繁体   English   中英

Ansible:条件语句不应包含 jinja2 模板分隔符,例如 {{ }} 或 {% %}

[英]Ansible: conditional statements should not include jinja2 templating delimiters such as {{ }} or {% %}

有人可以帮助我理解和解决它吗

 - name: Copying file to sever2
    fetch:
      src: /tmp/
      dest: /u0/test/
    when:
      "{{ inventory_hostname == 'testdb' }}"

在您的情况下,您应该使用没有 Jinja 分隔符的 when 条件。

例子:

when: inventory_hostname == 'testdb'

详细解释:

当文本和模板的上下文中需要变量插值时,使用 Jinja 模板分隔符。 这告诉 Ansible 使用变量的值而不是变量名。

  • 除非另有说明,否则将所有内容视为文本(带分隔符)

例子:

  vars:
    fav_tool: Ansible

  tasks:
  - debug:
      msg: "I like fav_tool"

这将输出:

"msg": "I like fav_tool"

这不是我想要的,我想显示“我喜欢 Ansible” 那么我必须“告诉” fav_tool使用fav_tool的值。

  - debug:
      msg: "I like {{ fav_tool }}"

同样,我们在模板中使用 Jinja 模板分隔符。 我们想要将变量和表达式与文本分开的地方。

示例模板如下:

if fav_tool == 'Ansible'
I like Ansible
endif

... 将产生完全相同的文本而不评估:

if fav_tool == 'Ansible'
I like Ansible
endif

但是,当我们使用 Jinja 分隔符时:

{% if fav_tool == 'Ansible' %}
I like Ansible
{% endif %}

这将导致:

I like Ansible

当我们使用诸如when:条件when: ,我们不需要分隔符,因为条件会自动将变量插入到值中。

  • 除非另有说明,否则将所有内容视为变量和表达式(使用''

例子:

这里的情况颠倒了,任何没有用单引号括起来的东西都会被自动评估。 此处仅将'Ansible'视为文本(未评估)。

  vars:
    fav_tool: Ansible

  tasks:
  - debug:
      msg: "Ansible rocks!"
    when: fav_tool == 'Ansible'

它对我有用

    when:
     (inventory_hostname in groups['testdb'])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM