Итак, в моем коде есть задача
- 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
правильный.
Вы также можете использовать не в
:
when: "'cool' not in me"
Проблема в том, что ваше сообщение об ошибке:
Условная проверка me.cool не удалась.
утверждает, что ваше состояние определяется как:
when: me.cool
Итак, либо в используемой вами версии есть ошибка (но вы не сообщили, какая именно), либо известные проблемы , или вы не опубликовали точную задачу, вызвавшую ошибку.
Вы можете избежать отсутствия атрибута у объекта dict, используя синтаксис 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()