我有一个变量文件,其中包含类似以下格式的列表:
VAR:
- a: 1
b: 2
c: 3
- a: 4
b: 5
c: 6
在这里,我想添加另一个引用列表中子变量的变量,例如:
VAR:
- a: 1
b: 2
c: 3
d: "{{ VAR.0.a }}"
- a: 4
b: 5
c: 6
d: "{{ VAR.1.a }}"
但是他们没有用。
我尝试了{{VAR [0] .a}} {{VAR [a]}} {{VAR.0.a}}等, 但他们都不起作用。
您如何引用列表中的子元素?
答案 0 :(得分:0)
我认为正确的方法是{{ VAR[0]["a"] }}
。但是您很有可能无法做某事。
原因是“弹药不能堆叠”。如果您在代码“ VAR.d”中的某处使用,它将扩展为字符串“ VAR [0] [“ a”]”(不是表达式,而是文字字符串)。 Ansible使用惰性模板化,将模板扩展延迟到最后一个可能的时刻。 set_fact
模块可以部分覆盖它,但是我怀疑在这种情况下是否有帮助。
我的建议是避免引用此类内容。
但这是拯救YAML的把戏。它与Ansible无关,尽管它在Ansible中有效。
YAML允许使用对旧值的引用。
VAR:
- a: &refname 1
b: 2
c: 3
d: *refname
- a: &ref2 4
b: 5
c: 6
d: *ref2