Sql 使用Ansible设置不同的ORACLE_HOME和PATH环境变量

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

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\$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"
    ]
}