Есть ли способ проверить, что ключ словаря не определен в задании?
Так что в моем коде у меня есть задача
- 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'.
2 ответа
Синтаксис, который вы включили:
when: me.cool is not defined
верно.
Вы также можете использовать not in
:
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/.
Также работает проверка, входит ли атрибут в набор атрибутов хеша:
vars:
key: "name_of_key"
...
when:
- key not in hash_variable.keys()