每当我尝试让 Ansible 解释嵌套变量(即另一个变量内的变量)时,我都无法得到我期望的结果。给定变量:key:barfoo:bar:bazfoo_bar:bazI...
每当我尝试让 Ansible 解释嵌套变量(即另一个变量内的变量)时,我都无法得到我期望的结果。
鉴于变量:
key: bar
foo:
bar: baz
foo_bar: baz
字典的 bar
键 foo
或键 foo_bar
(当从值构造时) key
:
- ansible.builtin.debug: msg: "{{ foo[{{ key }}] }}"
p4
p5
- ansible.builtin.debug: msg: "{{ foo_{{ key }} }}"
p6
p7
- ansible.builtin.debug: msg: "{{ foo['{{ key }}'] }}"
p8
p9
我期望获得 foo.bar
或的 foo_bar
,所以 baz
.
实现这一目标的正确方法是什么?
Ansible 常见问题解答 中建议的那样 胡子不会堆叠 .
另一条规则是“胡子不能叠在一起”。我们经常看到这样的情况:
{{ somevar_{{other_var}} }}
上述操作并不像您预期的那样工作,如果您需要使用动态变量,请根据需要使用以下命令:
{{ hostvars[inventory_hostname]['somevar_' ~ other_var] }}
对于“非主机变量”,您可以使用 变量查找 插件:
{{ lookup('vars', 'somevar_' ~ other_var) }}
因此,有两种情况适用:
p6
- ansible.builtin.debug: msg: "{{ foo[key] }}" vars: key: bar foo: bar: baz
p7
- ansible.builtin.debug: msg: "{{ foo['foo_' ~ key] }}" vars: key: bar foo: foo_bar: baz
p8
- ansible.builtin.debug: msg: "{{ lookup('vars', 'foo_' ~ key) }}" vars: key: bar foo_bar: baz
附注:
p10
p11
p12
p13
p14
p15
p16
p17