2017-10-10 433 views
0

我想从使用Ansible手册的目标Linux主机读取环境变量。我根据文档尝试了以下所有任务,但没有任何结果。Ansible - 从远程主机读取环境变量

- 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”没有在我正在执行剧本的本地主机中设置,所以我认为它没有返回任何东西。如果我使用总是可用的“HOME”,它将返回结果,而不是BULK。如果我SSH到目标主机,我可以运行echo $BULK没有任何问题。

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

+0

为什么在每个任务中都使用'delegate_to'? – techraf

+0

@techraf:这个yaml文件中有多个任务。几乎没有任务在本地主机上运行,​​在目标机上很少。这仅仅用于测试,所有三个任务都执行相同的操作。如果我能够读取环境变量,我将删除其他两个。 –

回答

1

如果我SSH进入target_host,我可以运行echo $BULK没有任何问题。

很有可能是因为BULK是仅在目标机器上的shell的交互式会话中产生的一个rc文件中设置的。 Ansible的gather_facts任务在非交互式任务中运行。

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

移动线的BULK变量设置为在那里不管会话类型的源的地方(确切位置,取决于目标操作系统和壳上)

参见例如:https://unix.stackexchange.com/a/170499/133107用于提示。