Sql 使用Ansible设置不同的ORACLE_HOME和PATH环境变量
Im当前正在查询多个数据库并捕获查询结果 我这样做的方式是,我写了一个复制shell脚本的任务,如下所示Sql 使用Ansible设置不同的ORACLE_HOME和PATH环境变量,sql,oracle,shell,ansible,ansible-2.x,Sql,Oracle,Shell,Ansible,Ansible 2.x,Im当前正在查询多个数据库并捕获查询结果 我这样做的方式是,我写了一个复制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\$i
#!/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
但是,我注意到不同的主机具有不同的ORACLE_主目录和路径。如何在剧本中定义这些变量,以便任务选择正确的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"
]
}
您是否尝试过
ORACLE\u HOME:“{lookup('env','ORACLE\u HOME')}”
?创建了一个新问题,因为它超出了当前问题的范围。是否有办法让Ansible获取这些值(ORACLE\u HOME)和路径,因为我要处理数千台主机,在清单文件中定义ORACLE_HOME和PATH可能不太困难。我不明白为什么您首先要在每台主机上专门设置这些变量。您已经成为\u用户:oracle
,您的.bashrc或.bash\u配置文件中是否已经定义了oracle\u 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"
]
}