我有一个词典结构,我包括在我的角色执行中,我试图根据另一个值在其中一个词典中设置一个项目。 以下示例中发生的情况是,在" another_host"上运行时执行将失败。因为它没有名为" value2"在字典中,Ansible给出了"' dict对象'没有属性"错误。
我不确定是不是因为我试图做一些与Ansible的设计相冲突的事情,或者只是一个更简单的方法来实现我和我#39;我试图这样做。
dict1:
abc:
name: abc
value: something
xyz:
name: xyz
value: "{{ dict2[inventory_hostname].values.value2 | default(blah) }}"
dict2:
some_host:
values:
value1: aaa
value2: bbb
another_host:
values:
value1: aaa
答案 0 :(得分:0)
我回答了类似的问题here。
首先,避免对dict键使用values
名称,因为它是系统“关键字”。在您的示例中,您尝试访问value2
系统方法的values()
属性,这肯定会失败。
其次,|default('def')
构造可以正常工作,如果您的顶级变量未定义(示例中为dict2
)或底层键未定义(示例中为value2
)。所以,没有value2
就好了。
但是如果您有中级键未定义,例如:
top:
middle1:
leaf1: 1
middle3:
leaf3: 3
top.middle2.leaf2 | default('def')
会出错。在这种情况下,将每个级别默认为空dict {}
可以完成工作:((top | default({})).middle2 | default({})).leaf2 | default('def')
。