2016-03-08 35 views
3

我在/etc/profile.d/文件夾中定義了一個envs.sh腳本。 執行ansible-playbook時,我試圖讓這個的環境變量的值,但它,而不是拋出我的錯誤:Ansible - /etc/profile.d腳本

Ansible測試:

debug: msg="{{ ansible_env.NGN_VAL }} is an environment variable" 

錯誤:

fatal: [xxx.yyy.zzz.kkk] => One or more undefined variables: 'dict object' has no attribute 'NGN_VAL' 

FATAL: all hosts have already failed -- aborting 

爲什麼它不會執行該文件夾內的腳本?當我通過ssh連接時,我會回顯它並顯示它的值。如何設置遠程環境變量並在執行過程中獲取它們?

感謝

+2

什麼是linux發行版?你能發佈'ls -l /etc/profile.d/envs.sh'的輸出嗎? 「ssh用戶」和「有用用戶」是否一樣? – helloV

+0

你可以使用環境:在你的劇本開始。但是如果你想使用一個文件中的變量,使用一個shell:source /etc/profile.d/envs.sh &&命令....但是這個解決方案只能在一個任務中工作。最好的方法是使用環境模塊 –

+0

@helloV,它是一個ubuntu/trusty64 14.04。在文件內部,我只輸出一個變量:'export NGN_VAL = myvalue'。我認爲用戶是一樣的,是的。我試圖在這個變量中保留一個密碼。但是我剛剛看到了密碼,ansible有一個名爲'Vaults'的解決方案。我要試驗它,但無論如何,如果你知道爲什麼我的變量沒有被加載,你可以在這裏回答。謝謝! – armoucar

回答

1

測試這個,如果你想趕上環境變量。

[[email protected] jenkins]$ cat mypass 
export MYPASSWD=3455637 

[[email protected] jenkins]$ cat test.yml 
- hosts: all 
    user: jenkins 
    tasks: 
    - name: Test variables. 
     shell: source /apps/opt/jenkins/mypass && echo $MYPASSWD 
     register: myenvpass 

    - debug: var=myenvpass.stdout 

[[email protected] jenkins]$ ansible-playbook -i hosts test.yml  

PLAY *************************************************************************** 

TASK [setup] ******************************************************************* 
ok: [127.0.0.1] 

TASK [Test variables.] ********************************************************* 
changed: [127.0.0.1] 

TASK [debug] ******************************************************************* 
ok: [127.0.0.1] => { 
    "myenvpass.stdout": "3455637" 
} 

PLAY RECAP ********************************************************************* 
127.0.0.1     : ok=3 changed=1 unreachable=0 failed=0 
+0

嗨勞爾!對我來說變量只在我的遠程服務器中很重要。這是一個密碼,我不想把它放在我的手冊裏。不管怎麼說,還是要謝謝你! – armoucar

+0

我編輯我的答案,告訴我是否需要解決方案。 –