在使用ansible的when条件语句时,如果语句中包含jinja2模板的变量,需要注意jinja2模板定界符与ansible的默认定界符'{{”和'}}”冲突的问题。 例如,当使用如下的条件语句时:
when: hostvars[inventory_hostname]['ansible_default_ipv4']['address'] == "{{ ansible_default_ipv4.address }}"
会出现警告:
[WARNING]: conditional statements should not include jinja2 templating delimiters such as {{ }} or {% %}. Found: hostvars[inventory_hostname]['ansible_default_ipv4']['address'] == "{{ ansible_default_ipv4.address }}"
为了避免这个警告,可以在语句中将jinja2定界符替换为其他字符,例如:
when: hostvars[inventory_hostname]['ansible_default_ipv4']['address'] == "!@@! ansible_default_ipv4.address !@@!"
同时,在playbook的顶层添加如下配置,将新的定界符定义为'!@@”和'@@!”:
- hosts: all
vars:
ansible_jinja2_variable_start_string: "!@@"
ansible_jinja2_variable_end_string: "@@!"
然后在语句中将新定义的定界符使用即可:
when: hostvars[inventory_hostname]['ansible_default_ipv4']['address'] == "!@@ ansible_default_ipv4.address @@!"