sql - 使用 Ansible 设置不同的 ORACLE_HOME 和 PATH 环境变量
问题描述
我目前正在查询多个数据库并捕获查询结果
我这样做的方式是,我正在编写一个复制 shell 脚本的任务,如下所示
#!/bin/bash
source $HOME/bin/gsd_xenv $1 &> /dev/null
sqlplus -s <<EOF
/ as sysdba
set heading off
select d.name||','||i.instance_name||','||i.host_name||';' from v\$database d,v\$instance i;
EOF
在剧本中,我写的任务如下:
- name: List Query [Host and DB]
shell: "/tmp/sqlscript/sql_select.sh {{item}} >> /tmp/sqlscript/output.out"
become: yes
become_method: sudo
become_user: oracle
environment:
PATH: "/home/oracle/bin:/usr/orasys/12.1.0.2r10/bin:/usr/bin:/bin:/usr/ucb:/sbin:/usr/sbin:/etc:/usr/local/bin:/oradata/epdmat/goldengate/config/sys"
ORACLE_HOME: "/usr/orasys/12.1.0.2r10"
with_items: "{{ factor_dbs.split('\n') }}"
但是我注意到不同的主机有不同的 ORACLE_HOME 和 PATHS。如何在剧本中定义这些变量,以便任务选择正确的 ORACLE_HOME 和 PATH 变量并成功执行任务
解决方案
您可以为每个主机定义主机特定变量。您可以编写库存文件,如:
[is_hosts]
greenhat ORACLE_HOME=/tmp
localhost ORACLE_HOME=/sbin
对于 PATH 变量类似
那么你的任务:
演示结果的示例剧本:
- hosts: is_hosts
gather_facts: false
vars:
tasks:
- name: task 1
shell: "env | grep -e PATH -e ORACLE_HOME"
environment:
# PATH: "{{ hostvars[inventory_hostname]['PATH']}}"
ORACLE_HOME: "{{ hostvars[inventory_hostname]['ORACLE_HOME'] }}"
register: shell_output
- name: print results
debug:
var: shell_output.stdout_lines
示例输出,您可以看到 ORACLE_HOME 变量确实发生了变化,并且按照每个主机的定义:
TASK [print results] ************************************************************************************************************************************************************************************************
ok: [greenhat] => {
"shell_output.stdout_lines": [
"ORACLE_HOME=/tmp",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
]
}
ok: [localhost] => {
"shell_output.stdout_lines": [
"ORACLE_HOME=/sbin",
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
]
}
推荐阅读
- python - Python:自动化 JSON 请求加载
- angular - Angular 7:组件中的外部脚本
- ssis - SSIS 平面文件标题空白行
- excel - excel中的等级范围并显示空白
- javascript - setInterval 不适用于 useState 挂钩
- if-statement - 省略某些值的数组公式
- c# - Application.Run 方法后表单加载不起作用
- machine-learning - 在 Pytorch 中下载预训练的 GAN 模型时出错:找不到“内存”文件
- sql - 根据两个条件返回 1 行
- c++ - 为什么 QFileSystemWatcher 会发出多个信号?而QFileInfo第一次写入零文件大小