2017-10-10 65 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用於提示。