#ansible #jinja2
#ansible #jinja2
Вопрос:
Ниже приведен мой список переменных
hostlist:
- { name: 'host1', ip_addr: '192.168.2.31', hostgrp: 'physical_workstation' }
- { name: 'host2', ip_addr: '192.168.2.32', hostgrp: 'physical_workstation' }
- { name: 'host3', ip_addr: '192.168.2.33', hostgrp: 'virtual_machine' }
Я указал ниже
- name: Conditional test
debug:
msg: "hello world"
when: hostlist|selectattr("name", "equalto", "host1")|list|length != 0
Это не работает, как показано ниже ошибка
The error was: TemplateRuntimeError: no test named 'equalto'
Существует решение для улучшения Jinaj2. Но есть ли какой-либо другой метод вместо использования selectattr. Я не хочу обновлять Jinja2
Комментарии:
1. Ваше сообщение об ошибке не соответствует вашему коду. Ошибка гласит
no test named 'equalto='
, что в вашем коде используется правильное имя тестаequalto
(с no=
).2. Извините, когда я копировал и корректировал выравнивание, я случайно добавил =
Ответ №1:
Создайте список имен и проверьте, есть ли имя в списке, например
- debug:
msg: "hello world"
loop:
- 'host1'
- 'host9'
when: item in _names
vars:
_names: "{{ hostlist|map(attribute='name')|list }}"
выдает
ok: [localhost] => (item=host1) =>
msg: hello world
skipping: [localhost] => (item=host9)
Проверьте только host1
- debug:
msg: "hello world"
when: "'host1' in _names"
vars:
_names: "{{ hostlist|map(attribute='name')|list }}"
выдает
ok: [localhost] => (item=host1) =>
msg: hello world
Комментарии:
1. спасибо за вашу идею. есть ли способ объединить его в одно условие when? я хотел бы проверить только host1
2. ДА. Это так. По какой-то причине вы должны заключить его в кавычки. Я добавил пример.
3. Да, то же самое. Я также попробовал ваш подход. То же самое, оно должно быть в кавычках