ansible - 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 表达式中获取布尔值?
解决方案
您正在 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 过滤器通常是个好主意。
推荐阅读
- ios - 每个设备的唯一标识符,跨多个应用程序
- ios - 每次单击一个按钮后,我都想在 TableView 中更新 TableViewCell
- amadeus - 生产中的数据新鲜度
- facebook - 如何在没有 Cocoapods/Maven 的情况下使用 Unity Facebook SDK
- api - Autodesk Forge API 是否有 openapi 描述?
- c++ - 为什么我的线程池有时会抛出 `std::bad_function_call` 或 `double free or corruption (!prev)`
- valgrind - WSL linux 和 valgrind
- php - GuzzleHttp 请求不起作用
- java - 在接口中使用泛型类列表时的不兼容类型
- linux - 跳过获取配置文件'main/binary-i386/Packages'