在Ansible中,条件语句不应包含Jinja2模板分隔符。如果条件语句中包含了Jinja2模板分隔符,Ansible会将其解析为Jinja2模板,并在运行时引发错误。
要解决这个问题,你可以使用Jinja2模板的raw标记来告诉Ansible不要解析条件语句中的Jinja2模板分隔符。下面是一个示例:
- name: Example playbook
hosts: localhost
vars:
my_var: "{{ some_variable }}"
tasks:
- name: Print message
debug:
msg: "The value of my_var is {{ my_var }}"
when: my_var is defined and my_var != ""
在上面的示例中,我们使用when
条件语句来检查my_var
变量是否已定义,并且它的值不为空。注意,在my_var
变量的定义中,我们没有使用Jinja2模板分隔符{{}}
,而是直接使用了some_variable
作为变量名称。
如果你的条件语句需要使用Jinja2模板分隔符,你可以将其放在{{}}
中,并使用Jinja2模板的raw
标记来告诉Ansible不要解析它。下面是一个示例:
- name: Example playbook
hosts: localhost
vars:
my_var: "{% raw %}{{ some_variable }}{% endraw %}"
tasks:
- name: Print message
debug:
msg: "The value of my_var is {{ my_var }}"
when: my_var is defined and my_var != ""
在上面的示例中,我们使用了Jinja2模板的raw
标记来告诉Ansible不要解析my_var
变量的定义。这样,我们就可以在条件语句中包含Jinja2模板分隔符,并且不会引发错误。
上一篇:Ansible:条件性注册检查
下一篇:Ansible:提取路径循环查找