Ansible if else jinja表达式为值添加额外的空间

Ansible if else jinja表达式为值添加额外的空间,ansible,jinja2,Ansible,Jinja2,我在我的剧本中使用了以下代码: - set_fact: value1: "{% if 1==0 %}{{ true }} {% else %}{{ false }} {% endif %}" - debug: "{{ value1 }}" 我期望的输出为“false”,但实际输出为“false”。请注意,值后面有额外的空格,因此布尔值被视为字符串 如果我将表达式放在一行中,如下所示: -

我在我的剧本中使用了以下代码:

- set_fact:
     value1: "{% if 1==0 %}{{ true }}
              {% else %}{{ false }}
              {% endif %}"
- debug: "{{ value1 }}"
我期望的输出为“false”,但实际输出为“false”。请注意,值后面有额外的空格,因此布尔值被视为字符串

如果我将表达式放在一行中,如下所示:

- set_fact:
     value1: "{% if 1==0 %}{{ true }}{% else %}{{ false }}{% endif %}"
- debug: "{{ value1 }}"
然后输出值是布尔值,但这会降低代码的可读性,尤其是在表达式较大的情况下

有没有办法在多行if else jinja表达式中获取布尔值?

您在jinja中寻找的值。
从链接中可以看到,有多种方法可以做到这一点,其中之一是:

错误代码:
通常认为
if(布尔条件):然后返回true
之类的错误样式,因为您可以执行
return(布尔条件)

-设置事实:
值1:“{%-if 1==0-%}{{true}”
{%-else-%}{{false}
{%-endif-%}”
-调试:“{value1}}”
这其实太复杂了。看看这个:

-设置事实:
值1:“{{1==0}”
-调试:
msg:“{{value1}}”
这将为您提供一个布尔值


顺便说一下,在ansible中处理布尔值时,通常最好使用。

使用下面的解决方案:

  • 设定事实: 值1:“{%if 1==0%}{{true}” {%-else%}{{false} {%-endif%}”
  • 调试:“{value1}}”

嘿,我今天用了这样的方法,找到了更好的方法。查看我答案的编辑。