2017-09-26 2 views
1

私の問題は、環境として設定されるべきdictを渡すことによって、プレイブック全体の環境を設定できないということです。それは可能ですか?例えば環境辞書に渡された不可能なプレイブック環境を定義する方法

が、ここで私のサンプル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'モジュールそれをテストする最良の方法ではないかもしれません。別のターゲットに対しては、接続を確立することさえできませんが、ローカルホストのショートカットにも続きます。 「実際の」アクションモジュールの結果を登録してみることはできますか?たとえば 'content'で' copy'を実行し、ファイルの内容を確認します。 – techraf

答えて

2

Ansibleのルックアップは、親のコンテキストansibleのプロセスで実行されます。

あなたはこのように、生成されたプロセスを使用して環境を確認する必要があります

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

と期待される結果を得る:"stdout": "foobar",

関連する問題