我希望"lucy"遵循用户模块创建者的默认行为,即创建和使用与用户名"lucy’匹配的组。然而,对于"坦率",我希望主要群体是一个现有的群体;gid 1003。所以我的散列看起来是这样的:
lucy:
comment: dog
frank:
comment: cat
group: 1003
我的任务是这样的:
- name: Set up local unix user accounts
user:
name: "{{ item.key }}"
comment: "{{ item.value.comment }}"
group: "{{ item.value.group | default(undef) }}"
loop: "{{ users|dict2items }}"
这不起作用,因为unde不被认可。我想不出其他什么了。"null"、"None"等都失败。"创建一个空字符串,该字符串也不对。我不知道怎么做。有什么想法吗?
默认值(省略)是您要查找的。例如,
- name: Set up local Unix user accounts
user:
name: "{{ item.key }}"
comment: "{{ item.value.comment }}"
group: "{{ item.value.group | default(omit) }}"
loop: "{{ users|dict2items }}"
评论
Lucas Basquerotto评论:"。。。省略只有在模块中直接使用时才能正确工作,它在set_fact中不起作用">
你错了。例如,default(省略)在set_fact和模块中都有效。列表中的第一项默认为false,结果为";变量未定义">。第二项默认为省略。省略的参数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 }}"
给出
shell> ansible-playbook pb.yml | grep item.stat.checksum
item.stat.checksum: VARIABLE IS NOT DEFINED!
item.stat.checksum: 7c73e9f589ca1f0a1372aa4cd6944feec459c4a8
除此之外,default(省略)在某些表达式中也可以按预期工作。例如
- debug:
msg: "{{ {'a': item}|combine({'b': true}) }}"
loop: "{{ test }}"
给出
msg:
a: false
b: true
msg:
b: true
查看没有默认值的结果
shell> ansible-playbook pb.yml -e "gchk={{ true|bool }}"
当将变量传递给模块(在我的例子中是一个模板…)时,它不起作用。当使用省略时,模板会获得占位符的值。
A:当然,它在这个用例中不起作用。例如,
shell> cat pb.yml
- hosts: localhost
tasks:
- debug:
msg: |
{{ var1 }}
{{ var2 }}
vars:
var1: "{{ foo }}"
var2: "{{ bar|default(omit) }}"
给出
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?
这不是您的用例。这个标题可能有误导性?如果要使用null
,请将默认值设置为None
。也许,这会做你想做的事。
vars:
var1: "{{ foo }}"
var2: "{{ bar|default(None) }}"