我无法从Ansible文档中获取条件的明确含义,例如when: var | d()
。有人能够给出明确的解释吗?
E.g。无论是从cli输入extra-var值还是默认为本地ENV变量值,
都可以实现vars:
my_var: "{{ e_var | default(ansible_env.USER | default(False,true)) }}"
tasks:
- name: Conditional check
debug:
msg: "{{ my_var }}"
when: my_var | d()
但这失败了:
vars:
my_var: "{{ e_var | default(ansible_env.USER | default(false,true)) }}"
tasks:
- name: Conditional check
debug:
msg: "{{ my_var }}"
when: my_var
when: my_var | d()
究竟在做什么?它如何与变量声明中的| default(false,true)
部分相互作用?
答案 0 :(得分:1)
d
是default
过滤器的别名。它是一个Jinja2过滤器,所以前往the Jinja2 docs。他们的工作方式相同:
默认(值,default_value = u'',布尔值=错误)
[]
别名:
d
关于你所面临的问题,这是因为Ansible处理的条件只包含一个变量名,而不是更复杂的表达式(直接传递给Jinja2 / Python)({{3 }}):
如果my_var
变量的值为user01
,则条件将尝试查找值user01
变量并失败,因为它不存在。
如果你只是添加一个逻辑连接(通常意义上是冗余的),Ansible将以不同的方式处理整个表达式,它将起作用:
when: my_var and true
在您的情况下,在表达式中使用另一个default
过滤器也是多余的,但它会阻止Ansible尝试解析“嵌套”变量值。