У меня есть один список словарей:
members_list:
any:
name: any
username: any
anyone:
name:
username: anyone
В моей книге воспроизведения Ansible я запускаю несколько контейнеров докеров:
docker_container:
name: "{{ item.key }}"
when: "{{ item.key }} != any"
with_dict: "{{ members_list }}"
Но я получаю следующую ошибку:
The conditional check '{{ item.key }} != any' failed. The
error was: error while evaluating conditional ({{ item.key
}} != any): 'any' is undefined
Когда я запускаю playbook без условного оператора when, он работает нормально.
Заранее спасибо.
Слово any
необходимо заключить в кавычки, поскольку в противном случае оно интерпретируется как ссылка на переменную. Кроме того, вам не нужны маркеры шаблонов Jinja в выражении when
(выражение уже оценивается как выражение jinja):
- docker_container:
name: "{{ item.key }}"
when: "item.key != 'any'"
with_dict: "{{ members_list }}"
Я считаю, что такие вложенные цитаты могут сбивать с толку, и часто выбираю одну альтернативных механизмов цитирования YAML, например:
- docker_container:
name: "{{ item.key }}"
when: >-
item.key != 'any'
with_dict: "{{ members_list }}"
Это идентично предыдущей версии; Мне просто легче прочтите и поймите.