问:“如何在传递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 类型”部分。