我在vars中使用此代码
MY_VAR: "{{lookup('env','MY_VAR') | default(true, true)}}"
我正在使用它
- include: task.yml
when: MY_VAR
这在Ansible 2.2中没有任何问题
在Ansible 2.3中的我得到这样的警告
[WARNING]: when statements should not include jinja2 templating delimiters
such as {{ }} or {% %}. Found: {{lookup('env','MY_VAR') | default(true,
true)}}
因此,如果我使用此MY_VAR: "lookup('env','MY_VAR') | default(true, true)"
,我的意思是删除{{ }}
,然后我得不到任何警告,但无论我是否将false作为ENV变量传递,MY_VAR
总是被评估为真。这在以前的代码中工作得很好
我该如何解决?
答案 0 :(得分:1)
最干净的方法可能是设置一个事实,而不是在变量中使用模板(它也会阻止查找插件在包含的任务中被多次调用 - 不是一个巨大的性能提升,但有点干净):< / p>
- set_fact:
MY_VAR: "{{lookup('env','MY_VAR') | default(true, true)}}"
另外请注意,当环境true
与MY_VAR
不同时,它会在所有情况下评估为false
。
如果我[]删除
{{ }}
,则我没有收到任何警告,但MY_VAR
始终被评估为真
因为它将被视为字符串,非空字符串值的计算结果为true
(字符串值等于false
除外)。