我正在尝试使用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
。
如何从远程主机获取环境变量?
答案 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")'
. /etc/profile
源于/ etc / profile。该文件还提供其他文件,例如/etc/profile.d下的文件。因此,在此之后,我就拥有了环境的修复机器部分。env | grep -iP "proxy"
然后为我正在寻找的变量过滤扩展环境