【问题标题】:How to refer to a variable within a list in var file in Ansible?如何在 Ansible 的 var 文件中引用列表中的变量?
【发布时间】:2019-04-19 22:09:35
【问题描述】:

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

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

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

【问题讨论】:

    标签: variables reference ansible yaml


    【解决方案1】:

    我认为正确的方法是{{ 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 2013-09-05
      • 2016-08-06
      • 2022-01-23
      相关资源
      最近更新 更多