关于jinja2括号的问题警告

时间:2017-07-26 01:00:08

标签: ansible ansible-2.x

我在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总是被评估为真。这在以前的代码中工作得很好

我该如何解决?

1 个答案:

答案 0 :(得分:1)

最干净的方法可能是设置一个事实,而不是在变量中使用模板(它也会阻止查找插件在包含的任务中被多次调用 - 不是一个巨大的性能提升,但有点干净):< / p>

- set_fact:
    MY_VAR: "{{lookup('env','MY_VAR') | default(true, true)}}"

另外请注意,当环境trueMY_VAR不同时,它会在所有情况下评估为false

  

如果我[]删除{{ }},则我没有收到任何警告,但MY_VAR始终被评估为真

因为它将被视为字符串,非空字符串值的计算结果为true(字符串值等于false除外)。