2017-09-26 27 views
1

我的問題是,我無法通過傳遞字典來設置環境來設置整個劇本的環境。那可能嗎?如何用傳入的環境詞典定義Ansible playbook環境

例如,這裏是我的樣本ansible劇本:

- hosts: localhost 
    vars: 
    env_vars: "{{ PLAY_ENVS }}" 

    environment: "{{ env_vars }}" 

    tasks: 
    - name: Here is what you passed in 
     debug: msg="env_vars == {{ env_vars }}" 

    - name: What is FAKE_ENV 
     debug: msg="FAKE_ENV == {{ lookup('env', 'FAKE_ENV') }}" 

而且我通過命令:

/bin/ansible-playbook sample_playbook.yml --extra-vars '{PLAY_ENVS: {"FAKE_ENV":"/path/to/fake/destination"}}' 

我得到的迴應是:

PLAY [localhost] *************************************************************** 

TASK [setup] ******************************************************************* 
ok: [localhost] 

TASK [Here is what you passed in] ********************************************** 
ok: [localhost] => { 
    "msg": "env_vars == {u'FAKE_ENV': u'/path/to/fake/destination'}" 
} 

TASK [What is FAKE_ENV] ******************************************************** 
ok: [localhost] => { 
    "msg": "FAKE_ENV == " 
} 

PLAY RECAP ********************************************************************* 
localhost     : ok=3 changed=0 unreachable=0 failed=0 

正如你所看到的'FAKE_ENV'沒有在環境中設置。我究竟做錯了什麼?

+1

我現在不能驗證,但'debug'模塊:

你應該與衍生的過程中檢查你的環境,這樣的:

- hosts: localhost vars: env_vars: FAKE_ENV: foobar environment: "{{ env_vars }}" tasks: - name: Test with spawned process shell: echo $FAKE_ENV 

並獲得預期的結果可能不是測試它的最好方法。對於不同的目標,它甚至不建立連接,也可能跟隨本地主機上的快捷方式。你能否嘗試註冊一些「真實」行動模塊的結果?例如用'content'複製'並檢查一個文件的內容。 – techraf

回答

2

Ansible中的查找是在父級ansible過程的上下文中執行的。利用查找插件"stdout": "foobar",