有人可以帮助我理解和解决它吗
- name: Copying file to sever2
fetch:
src: /tmp/
dest: /u0/test/
when:
"{{ inventory_hostname == 'testdb' }}"
Run Code Online (Sandbox Code Playgroud)
在您的情况下,您应该使用没有 Jinja 分隔符的 when 条件。
例子:
when: inventory_hostname == 'testdb'
Run Code Online (Sandbox Code Playgroud)
详细解释:
当文本和模板的上下文中需要变量插值时,使用 Jinja 模板分隔符。这告诉 Ansible 使用变量的值而不是变量名。
例子:
vars:
fav_tool: Ansible
tasks:
- debug:
msg: "I like fav_tool"
Run Code Online (Sandbox Code Playgroud)
这将输出:
"msg": "I like fav_tool"
Run Code Online (Sandbox Code Playgroud)
这不是我想要的,我想显示“我喜欢 Ansible”。那么我必须“告诉”ansible 使用fav_tool.
"msg": "I like fav_tool"
Run Code Online (Sandbox Code Playgroud)
同样,我们在模板中使用 Jinja 模板分隔符。我们想要将变量和表达式与文本分开的地方。
示例模板如下:
- debug:
msg: "I like {{ fav_tool }}"
Run Code Online (Sandbox Code Playgroud)
... 将产生完全相同的文本而不评估:
if fav_tool == 'Ansible'
I like Ansible
endif
Run Code Online (Sandbox Code Playgroud)
但是,当我们使用 Jinja 分隔符时:
if fav_tool == 'Ansible'
I like Ansible
endif
Run Code Online (Sandbox Code Playgroud)
这将导致:
I like Ansible
Run Code Online (Sandbox Code Playgroud)
当我们使用诸如 之类的条件时when:,我们不需要分隔符,因为条件会自动将变量插入到值中。
'')例子:
这里的情况颠倒了,任何没有用单引号括起来的东西都会被自动评估。'Ansible'此处仅视为文本(未评估)。
if fav_tool == 'Ansible'
I like Ansible
endif
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1621 次 |
| 最近记录: |