Есть ли способ проверить, что ключ словаря не определен в задании?

Так что в моем коде у меня есть задача

- 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()
Другие вопросы по тегам