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

Bro*_*oke 4 variables yaml reference ansible

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

VAR:
  - a: 1
    b: 2
    c: 3
  - a: 4 
    b: 5
    c: 6
Run Code Online (Sandbox Code Playgroud)

在这里,我想添加另一个引用列表中子变量的变量,例如:

VAR:
  - a: 1
    b: 2
    c: 3
    d: "{{ VAR.0.a }}"
  - a: 4 
    b: 5
    c: 6
    d: "{{ VAR.1.a }}"
Run Code Online (Sandbox Code Playgroud)

但他们没有工作。

我尝试了 {{ VAR[0].a }} {{ VAR[a] }} {{ VAR.0.a }} 等,但没有一个起作用。

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

Geo*_*lin 5

我认为正确的方法是{{ 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
Run Code Online (Sandbox Code Playgroud)