ansible不能使用变量

问题描述

我创建了一个角色,并创建了一个名为defaults/main.yml的变量文件,其内容如下:

level1:
  level2_1:
    level3_1: "value_3_1"
  level2_2:
    level3_2: "value_3_2"
    level3_3: "{{ level1.level2_1.level3_1 }} {{  level1.level2_2.level3_2  }}"

当我尝试在任务文件中运行时,它会抛出An unhandled exception occurred while templating

我尝试更改level3_3行而不添加括号,但也会引发错误

我发现唯一可行的方法是从level3_3删除缩进,这不会使缩进成为结构的一部分。

如何在结构内编写类似于level3_3的变量而不会引发错误

解决方法

根据设计,这是不可能的。参见Can't reference a dict key inside the same dict #50280。在字典外创建复合词,或将重复值放入变量中。例如

val_A: value_3_1
val_B: value_3_2

level1:
  level2_1:
    level3_1: "{{ val_A }}"
  level2_2:
    level3_2: "{{ val_B }}"
    level3_3: "{{ val_A }} {{ val_B }}"

我更喜欢这种结构。它更简单,更不易出错。