Ansible:“;省略“占位符”;使用Jinja2过滤器链接时
在调试带有过滤器链接的条件子句和检查未定义变量(Ansible:“;省略“占位符”;使用Jinja2过滤器链接时,ansible,jinja2,Ansible,Jinja2,在调试带有过滤器链接的条件子句和检查未定义变量(省略)时,我发现结果取决于过滤器如何包含在字符串中 我的意图是在条件中为具有值的Ansible任务创建一个when子句。根据链接中的“注意事项”,我尝试添加omit,并得到以下结果 我的剧本: --- - hosts: target tasks: - debug: msg="{{ value_not_defined|default('0') | int or omit }}" - debug: msg="debug {{ val
省略
)时,我发现结果取决于过滤器如何包含在字符串中
我的意图是在条件中为具有值的Ansible任务创建一个when子句。根据链接中的“注意事项”,我尝试添加omit
,并得到以下结果
我的剧本:
---
- hosts: target
tasks:
- debug: msg="{{ value_not_defined|default('0') | int or omit }}"
- debug: msg="debug {{ value_not_defined|default('0') | int or omit }}"
结果的相关部分:
TASK [debug] *******************************************************************
ok: [192.168.1.2] => {
"msg": "Hello world!"
}
msg: Hello world!
TASK [debug] *******************************************************************
ok: [192.168.1.2] => {
"msg": "debug __omit_place_holder__31268e787e722b495d512986994bcd66ce943a69"
}
msg: debug __omit_place_holder__63eea0d96dd6ed867b95405e11d87dddf61f448d
以下结果来自哪里
你好,世界代码>
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
为什么值会根据debug
的msg
中的其他字符串而变化?在ansibleomit
中是一个特殊变量,如果您不想向模块提供参数,可以使用该变量。
因此,如果您将arg=“{{omit}}”
传递给一个模块,就相当于根本不传递arg
。
如果您希望在自定义参数未定义的情况下依赖模块的默认值,则此选项非常有用。
这本书中有一个例子
在您的示例中,{{value_not_defined | default('0')| int或omit}}
的计算如下:
None | default('0')| int或ommit
(None
在这里用于解释)
'0'| int或省略
0或省略
省略
最后一步是因为在python中:
以下值被解释为false:false、None、所有类型的数字零以及空字符串和容器
考虑到这一点,您的任务被解释为:
- debug: msg="{{ omit }}"
- debug: msg="debug {{ omit }}"
导致调用第一个debug
而不调用msg
参数(这就是omit
的作用),调用第二个debug
而调用msg=“debug”omit\u place\u holder…”
(omit
在这里与debug
连接,因此它只是一个普通字符串)
如果调用debug
模块时没有msg
参数,它将打印Hello world代码>