#ansible #jinja2
#ansible #jinja2
Вопрос:
Ниже приведена задача, которая выдает мне ошибку, потому что шаблоны jinja2 не поддерживают это.
- name: Print the ip address
debug:
msg: "{{ ansible_{{ item }}['ipv4']['address'] }}"
with_items: "{{ ansible_interfaces|reject('search', 'lo')|list|sort }}"
Ошибка, вызванная:
«сообщение об ошибке шаблона при создании строки шаблона: ожидаемый токен ‘конец инструкции печати’, получен ‘{‘. Строка: {{ ansible_{{ item }}[‘ipv4’] [‘адрес’] }}»
Есть какие-либо указания на то, как решить эту проблему?
Ответ №1:
Вы не можете использовать расширение jinja2, когда вы уже находитесь внутри выражения расширения jinja2. Другими словами, усы не складываются.
В вашем случае вы можете использовать vars
поиск для извлечения вашего динамически именованного параметра:
- name: Print the ip address
vars:
interface_var_name: "ansible_{{ item }}"
debug:
msg: "{{ lookup('vars', interface_var_name)['ipv4']['address'] }}"
with_items: "{{ ansible_interfaces | reject('search', 'lo') | list | sort }}"
Ответ №2:
Используйте lookup
плагин vars
. Например
- name: Print the ip address
debug:
msg: "{{ my_ifc.ipv4.address|default('Undefined') }}"
loop: "{{ ansible_interfaces|reject('search', 'lo')|list|sort }}"
vars:
my_ifc: "{{ lookup('vars', 'ansible_' ~ item) }}"
выдает
ok: [localhost] => (item=eth0) =>
msg: 10.1.0.27
ok: [localhost] => (item=wlan0) =>
msg: Undefined