1

我只在定义了 my_int_http 时才尝试配置属性,否则我不想要它。所以我把它编码如下:

profiles:
      - "{{ my_int_L4 }}"
      - "{{ my_int_http | default(omit) }}"

但是我的执行失败,当检查实际配置中代码传递的参数时,它显示如下:

 "profiles": [
                "my_example.internal_tcp",
                "__omit_place_holder__ef8c5b99e9707c044ac07fda72fa950565f248a4"

那么如何在传递的地方传递绝对没有价值__omit_place_holder_****呢?

4

2 回答 2

1

问:如何在传递omit_place_holder的地方传递绝对没有值?

A1:某些过滤器也可以按预期使用省略。例如,该剧

- hosts: localhost
  vars:
    test:
      - "{{ var1|default(false) }}"
      - "{{ var1|default(omit) }}"
  tasks:
    - debug:
        msg: "{{ {'a': item}|combine({'b': true}) }}"
      loop: "{{ test }}"

  msg:
    a: false
    b: true

  msg:
    b: true

作为旁注,default(omit)定义类型字符串

    - debug:
        msg: "{{ item is defined }}"
      loop: "{{ test }}"
    - debug:
        msg: "{{ item|type_debug }}"
      loop: "{{ test }}"

TASK [debug] *************************************************************
ok: [localhost] => (item=False) => 
  msg: true
ok: [localhost] => (item=__omit_place_holder__6e56f2f992faa6e262507cb77410946ea57dc7ef) => 
  msg: true

TASK [debug] *************************************************************
ok: [localhost] => (item=False) => 
  msg: bool
ok: [localhost] => (item=__omit_place_holder__6e56f2f992faa6e262507cb77410946ea57dc7ef) => 
  msg: str

A2:Ansible 中没有值是 YAML null。报价:

这通常被转换为任何原生的类似空的值(例如,Perl 中的 undef,Python 中的 None)。

(给定my_int_L4=bob)。如果变量my_int_http默认为null而不是省略

profiles:
      - "{{ my_int_L4 }}"
      - "{{ my_int_http | default(null) }}"

列表配置文件未定义

  profiles: VARIABLE IS NOT DEFINED!

改用_

profiles:
      - "{{ my_int_L4 }}"
      - "{{ my_int_http | default(None) }}"

变量my_int_http将默认为空字符串

  profiles:
  - bob
  - ''

另请参阅PyYAML 文档中的“YAML 标记和 Python 类型”部分。

于 2021-02-02T07:25:41.957 回答
0

你可以试试这样的

profiles:
      - "{{ my_int_L4 }}"
      - "{{ my_int_http | default(None) }}"

这会给你一个空字符串。您可以在迭代配置文件时添加检查。

请查看此GitHub 问题以获得更多理解。

于 2021-02-02T07:18:23.520 回答