Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ansible:“;省略“占位符”;使用Jinja2过滤器链接时_Ansible_Jinja2 - Fatal编程技术网

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
中的其他字符串而变化?

在ansible
omit
中是一个特殊变量,如果您不想向模块提供参数,可以使用该变量。
因此,如果您将
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