jinja2 何时大括号上的 Ansible 警告
Ansible warning on jinja2 braces on when
我在 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
始终被评估为 true .在我之前给出的代码中工作正常
我该如何解决?
最干净的方法可能是设置一个事实而不是在变量中使用模板(它还会防止查找插件在包含的任务中被多次调用——这不是一个巨大的性能提升,但更干净一些) :
- set_fact:
MY_VAR: "{{lookup('env','MY_VAR') | default(true, true)}}"
另外请注意,当环境 MY_VAR
与 false
不同时,它会在所有情况下评估为 true
。
if I [ ] remove {{ }}
then I get no warning but then MY_VAR
is always evaluated as true
因为它将被视为一个字符串,并且非空字符串值的计算结果为 true
(除了等于 false
的字符串值)。
我在 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
始终被评估为 true .在我之前给出的代码中工作正常
我该如何解决?
最干净的方法可能是设置一个事实而不是在变量中使用模板(它还会防止查找插件在包含的任务中被多次调用——这不是一个巨大的性能提升,但更干净一些) :
- set_fact:
MY_VAR: "{{lookup('env','MY_VAR') | default(true, true)}}"
另外请注意,当环境 MY_VAR
与 false
不同时,它会在所有情况下评估为 true
。
if I [ ] remove
{{ }}
then I get no warning but thenMY_VAR
is always evaluated as true
因为它将被视为一个字符串,并且非空字符串值的计算结果为 true
(除了等于 false
的字符串值)。