问题描述
我创建了一个角色,并创建了一个名为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
的变量而不会引发错误?
解决方法
根据设计,这是不可能的。参见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 }}"
我更喜欢这种结构。它更简单,更不易出错。