Назад | Перейти на главную страницу

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

Итак, в моем коде есть задача

- 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()