Ansible - 从远程主机读取环境变量

时间:2017-10-10 07:03:53

标签: linux ssh ansible

我正在尝试使用Ansible playbook从Target Linux Host读取一个Environment变量。我根据文档尝试了以下所有任务,但没有结果。

   - name: Test1    
     debug: msg="{{ ansible_env.BULK }}"
     delegate_to: "{{ target_host }}"

   - name: Test2  
     shell: echo $BULK
     delegate_to: "{{ target_host }}"
     register: foo

   - debug: msg="{{ foo.stdout }}"

   - name: Test3 
     debug: msg="{{ lookup('env','BULK')}} is an environment variable"
     delegate_to: "{{ target_host }}"

环境变量“BULK”未在我执行playbook的本地主机中设置,所以我假设它什么也没有返回。而不是BULK,如果我使用始终可用的“HOME”,它将返回结果。如果我通过SSH连接到target_host,我可以毫无问题地运行echo $BULK

如何从远程主机获取环境变量?

2 个答案:

答案 0 :(得分:1)

  

如果我通过SSH连接到target_host,我可以毫无问题地运行echo $BULK

最有可能的原因是,因为BULK设置在仅在目标计算机上的shell的交互式会话中获取的其中一个rc文件中。 Ansible的gather_facts任务以非交互式任务运行。

  

如何从远程主机获取Environment变量?

BULK变量的行设置移动到源的位置,无论会话类型如何(确切地说,取决于目标操作系统和shell)

例如,请参阅:https://unix.stackexchange.com/a/170499/133107了解提示。

答案 1 :(得分:0)

/etc/profile,然后grep env

我的解决方案不是完美的,但通常可行。例如,我想检查remote_host是否具有代理服务器的环境变量,请执行以下操作:

作为特殊的命令:

ansible remote_host -b -m shell -a '. /etc/profile && (env | grep -iP "proxy")'

说明:

  • 我更喜欢shell模块,它可以实现我期望的...如果我在shell上执行,则保持不变
  • . /etc/profile源于/ etc / profile。该文件还提供其他文件,例如/etc/profile.d下的文件。因此,在此之后,我就拥有了环境的修复机器部分。
  • env | grep -iP "proxy"然后为我正在寻找的变量过滤扩展环境