当使用另一个字典值作为参数时,如何将包含变量的值分配给字典键。
示例
---
- name: Test vars
hosts: ['localhost']
vars:
foo:
a: "foo a value"
b: "{{ a }}"
tasks:
- name: Fix owneship and permission issue with sudoers file
debug:
msg: Print {{ foo.b }}
我尝试过以下方法:
vars:
foo:
a: " foo a value"
b: "{{ foo.a }}"
vars:
foo:
a: " foo a value"
b: "{{ foo['a'] }}"
vars:
foo:
a: " foo a value"
b: "{{ a }}"
以上都不起作用。
您可以仅使用 YAML,通过几个节点锚点/别名节点来满足此要求。
在 YAML 语法中,您可以在值之前添加锚点,然后可以通过别名节点引用它。
锚点由
&
指示器表示:
some_key: &anchor_name value
虽然别名由
*
指示符表示:
some_other_key: *anchor_name
因此,鉴于任务:
- debug:
var: foo.b
vars:
foo:
a: &foo_a "foo a value"
b: *foo_a
这产生了预期的结果:
ok: [localhost] =>
foo.b: foo a value
但是,事实上,它只是一个锚点和别名,您将无法从文字加变量组成值或基于多个变量组成,例如如果你愿意的话
####
# Please note that this is a counterexample and won't work
####
mydict:
foo: "example {{ mydict.bar }}"
bar: 123
或
####
# Please note that this is a counterexample and won't work
####
mydict:
foo: "{{ mydict.bar }}{{ mydict.baz }}"
bar: 123
baz: 456
您别无选择,因为这是 Ansible 不打算允许的事情:
这是预期的,我们不打算改变。您无法创建自引用变量。