2016-11-04 11 views
0

に定義されていないとき、私は脚本で次の作業があります。スキップAnsibleタスク変数が

- name: task xyz 
    copy: 
    src="{{ item }}" 
    dest="/tmp/{{ item }}" 
    with_items: "{{ y.z }}" 
    when: y.z is defined 

y.zが定義されていないので、私は、タスクがスキップされることを期待しています。私が発見した

FAILED! => {"failed": true, "msg": "'dict object' has no attribute 'z'" 

:代わりに、私は受信 How to run a task when variable is undefined in ansible? が、私はちょうどそれを実装するようです。私はここで間違って何をしていますか?

+0

'y'辞書内の既存の属性' z'の欠如は、 'y.z'が未定義であることと同じである場合、私は知りません。 Undefinedは、null、空、nil、falseなどと同じ意味ではありません。 –

+0

を別の方法としてチェックしてください。 – user2599522

+0

yで ''z 'を試してみたいのですか?どんな場合でも、私は両方を試しましたが、結果は同じです – jdoestackoverflow

答えて

4

は、whenより前に評価されています。実際には実際のシナリオではitemwhenの条件に入れます。参照:Loops and Conditionals

このタスクは、あなたのために動作します:

- name: task xyz 
    copy: 
    src: "{{ item }}" 
    dest: "/tmp/{{ item }}" 
    with_items: "{{ (y|default([])).z | default([]) }}" 
+0

完全性についてのドキュメントを参照してください:" with whenit_items Loopsを参照)、when文が各項目ごとに別々に処理されることに注意してください。 "(http://docs.ansible.com/ansible/playbooks_conditionals.html) – jdoestackoverflow

+1

あなたのコメントが何を意味するか分かりません。 – techraf

+0

ああ、何とかそれを逃した。あなたは正しい、あなたの答えはすでにできる限り完全であった。 – jdoestackoverflow

関連する問題