gpt4 book ai didi

Ansible:使用 Jinja2 过滤器链接时出现 "omit place holder"

转载 作者:行者123 更新时间:2023-12-04 02:10:52 34 4
gpt4 key购买 nike

在使用过滤器链接和检查 undefined variable (omit) 调试条件子句时,我发现结果取决于过滤器如何包含在字符串中。

我的意图是使用 value 为 Ansible 任务创建一个 when 子句。处于一种状态。根据 Ansible documentation 中链接的“注释” ,我尝试添加 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

以下结果来自哪里?
  • Hello world!
  • __omit_place_holder__63eea0d96dd6ed867b95405e11d87dddf61f448d

  • 为什么值会根据 debug 中的其他字符串而变化的 msg ?

    最佳答案

    在 ansible omit是一个特殊变量,如果您不想为模块提供参数,则使用该变量。
    所以如果你通过 arg="{{omit}}"对于一个模块,它相当于不传递 arg一点也不。
    如果您的自定义参数未定义,则如果您想依赖模块的默认值,这将非常有用。
    documentation 中有一个例子.

    在您的示例中 {{ value_not_defined|default('0') | int or omit }}评估如下:

  • None | default('0') | int or omit (None 在这里被我用来解释)
  • '0' | int or omit
  • 0 or omit
  • omit

  • 最后一步是因为 boolean operations在 python 中:

    the following values are interpreted as false: False, None, numeric zero of all types, and empty strings and containers



    考虑到这一点,您的任务是这样解释的:
    - debug: msg="{{ omit }}"
    - debug: msg="debug {{ omit }}"

    导致调用第一个 debug没有 msg参数(即 omit 的用途)和第二个 debugmsg="debug __omit_place_holder..." ( omit 在这里与 debug 连接,所以它只是一个普通的字符串)。

    如果 debug模块在没有 msg 的情况下被调用参数,它打印 Hello world! .

    关于Ansible:使用 Jinja2 过滤器链接时出现 "omit place holder",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38558379/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com