以下是一个任务,它向我抛出一个错误,因为 jinja2 模板不支持此操作。
- name: Print the ip address
debug:
msg: "{{ ansible_{{ item }}['ipv4']['address'] }}"
with_items: "{{ ansible_interfaces|reject('search', 'lo')|list|sort }}"
Run Code Online (Sandbox Code Playgroud)
抛出的错误是:
"msg": "模板化字符串时出现模板错误:预期标记'打印语句结束',得到'{'。字符串:{{ ansible_{{ item }}['ipv4']['address'] }}"
有关如何解决这个问题的任何指示吗?
当您已经位于 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 }}"
Run Code Online (Sandbox Code Playgroud)
使用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) }}"
Run Code Online (Sandbox Code Playgroud)
给出
ok: [localhost] => (item=eth0) =>
msg: 10.1.0.27
ok: [localhost] => (item=wlan0) =>
msg: Undefined
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23817 次 |
| 最近记录: |