如何在Ansible中使用嵌套变量(字典键)?
如果我的问题表达得不清楚,请随意建议或直接编辑 我在Ansible中声明了一些嵌套变量,如下所示:如何在Ansible中使用嵌套变量(字典键)?,ansible,Ansible,如果我的问题表达得不清楚,请随意建议或直接编辑 我在Ansible中声明了一些嵌套变量,如下所示: # vars/main.yml parent_key: child_key1: "child_value1" child_key2: "Resolving: {{ child_key1 }}" key1: &key1 "child_value1" parent_key: child_key1: *key1 child_key2: "Resolving: {{ key1
# vars/main.yml
parent_key:
child_key1: "child_value1"
child_key2: "Resolving: {{ child_key1 }}"
key1: &key1 "child_value1"
parent_key:
child_key1: *key1
child_key2: "Resolving: {{ key1 }}"
但是Ansible说:child\u key1没有定义
或类似的东西
但是,这也不起作用:
# vars/main.yml
parent_key:
child_key1: "child_value1"
child_key2: "Resolving: {{ parent_key.child_key1 }}"
Ansible说类似于的东西无法模板化…
Ansible 1.9.4和Ansible 2.0.0.2的结果几乎相同
如果child_-key2
中的child_-key1
的值都嵌套在parent_-key
下,如何使用它们
请注意,不嵌套键的相同概念可以正常工作:
你不能。这在早期的Ansible版本中确实有效,但Ansible现在阻止了这一点 问题是你试图引用一个对象,而这个对象不知何故正处于被定义的过程中 有些用户在讨论这个话题
至于解决办法。。。两者兼而有之如何。大概是这样的:
# vars/main.yml
parent_key:
child_key1: "child_value1"
child_key2: "Resolving: {{ child_key1 }}"
key1: &key1 "child_value1"
parent_key:
child_key1: *key1
child_key2: "Resolving: {{ key1 }}"
是的,这很难看,但至少可以防止您重复这些值。这很好,对我来说很有用。我同意删除该功能的原因,因此这是一个很好的折衷方案。您能解释一下
&
和*
操作符在这个上下文中是什么吗?这是一个锚和对锚的引用,YAML的一部分。您可以使用它,在右侧您将看到经过计算的对象,这将是Ansible在解析YAML后得到的对象。