Итак, в моем коде есть задача
- 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'.
Включенный вами синтаксис:
when: me.cool is not defined
правильно.
Вы также можете использовать not in
:
when: "'cool' not in me"
Проблема в том, что ваше сообщение об ошибке:
Условная проверка me.cool не удалась.
утверждает, что ваше состояние определяется как:
when: me.cool
Итак, либо в используемой вами версии есть ошибка (но вы не указали, какая именно), либо Известные проблемы, или вы не опубликовали точную задачу, вызвавшую ошибку.
Вы можете избежать отсутствия атрибута у dict object, используя синтаксис jinja2 selectattr (), как в:
when: me|selectattr("cool", "defined")|list|length >0
идея получена от Майкла Хоглана в https://groups.google.com/forum/#!topic/ansible-project/8XJkHQgttLA
Также работает проверка, входит ли атрибут в набор атрибутов хеша:
vars:
key: "name_of_key"
...
when:
- key not in hash_variable.keys()