如何在 Ansible 中创建'null'默认值



我希望"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) }}"

相关内容

  • 没有找到相关文章

最新更新