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

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

- 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'.
17
задан 26 June 2017 в 22:32
3 ответа

Синтаксис, который вы ввели:

when: me.cool is not defined

правильный.

Вы также можете использовать не в :

when: "'cool' not in me"

Проблема в том, что ваше сообщение об ошибке:

Условная проверка me.cool не удалась.

утверждает, что ваше состояние определяется как:

when: me.cool

Итак, либо в используемой вами версии есть ошибка (но вы не сообщили, какая именно), либо известные проблемы , или вы не опубликовали точную задачу, вызвавшую ошибку.

24
ответ дан 2 December 2019 в 20:29

Вы можете избежать отсутствия атрибута у объекта dict, используя синтаксис jinja2 selectattr (), как в:

when: me|selectattr("cool", "defined")|list|length >0

идея, полученная от Майкла Хоглана на https://groups.google. com / forum / #! topic / ansible-project / 8XJkHQgttLA

7
ответ дан 2 December 2019 в 20:29

Проверка того, включен ли атрибут в набор атрибутов хеша, также работает:

vars:
    key: "name_of_key"
...
when:
-   key not in hash_variable.keys()
0
ответ дан 12 June 2020 в 02:03

Теги

Похожие вопросы