如何在Ansible中的var文件中的列表中引用变量?

时间:2018-11-16 17:23:07

标签: variables reference ansible yaml

我有一个变量文件,其中包含类似以下格式的列表:

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}}等, 但他们都不起作用。

您如何引用列表中的子元素?

1 个答案:

答案 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