首页 > 解决方案 > if-else jinja 表达式为值添加了额外的空间

问题描述

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

- set_fact:
     value1: "{% if 1==0 %}{{ true }}
              {% else %}{{ false }}
              {% endif %}"
- debug: "{{ value1 }}"

我期待的输出是“假”,但实际输出是“假”。请注意 value 之后的额外空格,因此 boolean 被视为字符串。

如果我将表达式放在一行中:

- set_fact:
     value1: "{% if 1==0 %}{{ true }}{% else %}{{ false }}{% endif %}"
- debug: "{{ value1 }}"

然后输出值为布尔值,但这会降低代码的可读性,尤其是在表达式很大的情况下。

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

标签: ansiblejinja2

解决方案


您正在 jinja 中寻找空白控制
正如您从链接中看到的那样,有多种方法可以做到这一点,其中之一是:

BAD CODE:
它通常被认为是不好的风格,if (boolean condition): then return true因为你可以做return (boolean condition)

- set_fact:
     value1: "{%- if 1==0 -%}{{ true }}
              {%- else -%}{{ false }}
              {%- endif -%}"
- debug: "{{ value1 }}"

这实际上太复杂了。看看这个:

- set_fact:
    value1: "{{ 1 == 0 }}"
- debug:
    msg: "{{ value1 }}"

这会给你一个布尔值。

顺便说一句,在 ansible 中处理布尔值时,使用bool 过滤器通常是个好主意。


推荐阅读