web-dev-qa-db-ja.com

辞書キーがansibleタスクで定義されていないことを確認する方法はありますか?

だから私のコードにはタスクがあります

- name: cool task
  Shell: 'touch iamnotcool.txt'
  when: me.cool is not defined

私の変数は次のようになります

---
me:
  stumped: yes

タスクを実行すると、次のエラーが返されます

{"failed": true, "msg": "The conditional check 'me.cool' failed. The error was: error while evaluating conditional (me.cool): 'dict object' has no attribute 'cool'.
21

含めた構文:

when: me.cool is not defined

正しい。

not inも使用できます。

when: "'cool' not in me"

問題はあなたのエラーメッセージです:

条件チェック 'me.cool'が失敗しました。

あなたの状態は次のように定義されていると主張します:

when: me.cool

そのため、使用しているバージョンにバグがあり(どのバージョンであるかは共有していません)、 既知の問題 があるか、エラーの原因となった正確なタスクを投稿していません。

30
techraf

次のようにjinja2 selectattr()構文を使用することで、「dictオブジェクト」に属性がないことを回避できます。

when: me|selectattr("cool", "defined")|list|length >0

https://groups.google.com/forum/#!topic/ansible-project/8XJkHQgttLA でMichael Hoglanから得たアイデア

7
emmanuelgws