Comments
卢卡斯·巴斯克罗托评论:“... omit 仅在直接在模块中使用时才能正确工作,它在 set_fact 中不起作用...”
答:你错了。例如,默认(省略)都适用于set_fact并在模块中。列表中的第一项默认为false结果“变量未定义!”。第二项默认为omit。省略参数获取校验和 https://docs.ansible.com/ansible/devel/collections/ansible/builtin/stat_module.html#parameter-get_checksum默认为true结果中包含校验和
shell> cat pb.yml
- hosts: localhost
tasks:
- set_fact:
test:
- "{{ gchk|default(false) }}"
- "{{ gchk|default(omit) }}"
- stat:
path: /etc/passwd
get_checksum: "{{ item }}"
loop: "{{ test }}"
register: result
- debug:
var: item.stat.checksum
loop: "{{ result.results }}"
gives
shell> ansible-playbook pb.yml | grep item.stat.checksum
item.stat.checksum: VARIABLE IS NOT DEFINED!
item.stat.checksum: 7c73e9f589ca1f0a1372aa4cd6944feec459c4a8
除此之外,默认(省略)在某些表达式中也能按预期工作。例如
- debug:
msg: "{{ {'a': item}|combine({'b': true}) }}"
loop: "{{ test }}"
gives
msg:
a: false
b: true
msg:
b: true
查看没有默认值的结果
shell> ansible-playbook pb.yml -e "gchk={{ true|bool }}"
将变量传递给模块(在我的例子中是模板......)时它不起作用。当使用 omit 时,模板会获取占位符的值。
答:当然,在这个用例中它不起作用。例如,
shell> cat pb.yml
- hosts: localhost
tasks:
- debug:
msg: |
{{ var1 }}
{{ var2 }}
vars:
var1: "{{ foo }}"
var2: "{{ bar|default(omit) }}"
gives
shell> ansible-playbook pb.yml -e foo=123
...
msg: |-
123
__omit_place_holder__73431d735cecaedbd9c4386e2ebc77ded8eaee51
目标是省略模块中的参数。问题说:I can think of. 'null', 'None' etc. all fail. '' creates an empty string which is not right either. I can't find out how to do it. Any ideas?
这不是您的用例。也许标题有误导性?将默认值设置为None
如果你想使用null
。也许,这会达到你想要的效果。
vars:
var1: "{{ foo }}"
var2: "{{ bar|default(None) }}"