如何在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

如果我的问题表达得不清楚,请随意建议或直接编辑

我在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 }}"
但是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后得到的对象。