[我之前发过这个问题,但有很多错误,所以我把它删掉了。如果我浪费了大家的时间,我深表歉意。]
我在配置文件中有一本字典:
foo:
key1: value1
key2: value2
key3: value3
# …
当我启动剧本时,我在命令行添加了以下字符串变量:
--extra-vars "k1=key1 k2=key2"
如果我想在播放过程中访问特定的字典值(假设我已经将配置文件包含在我的“vars_files”中),我可以简单地这样做:
- debug:
var="foo.{{ k1 }}"
# => foo.key1: value1
假设字典名称是可更改的,所以我希望它也是一个变量。我可以添加一个额外的命令行变量:
--extra-vars "k1=key1 k2=key2 dict_name=foo"
我尝试再次访问value1
,但这次,Ansible 似乎将语法解析为文字字符串,而不是对配置文件中变量的引用。例如:
- set_fact:
dict_value: "{{ dictname ~ '.' ~ k1 }}"
或者
- set_fact:
dict_value: "{{ dictname ~ k1 }}"
[对于第二种情况,我在命令行定义中添加了“。”,例如-e "dict_name=foo."
]
我现在得到了一个文字结果:
- debug:
var=dict_value
# => dict_value: foo.key1
=> foo.key1: value1
与我将字典名称硬编码为字符串时相反。"foo.{{ k1 }}"
如上所述,被识别为请求访问配置文件中的字典变量。当我尝试创建foo
变量时,它变成了文字字符串。
总而言之,我想使用由字典名称和键的变量创建的复合词来访问字典值(并且以某种方式需要容纳“。”
"{{ dict_name }}" appended to '.' appended to "{{ key_name }}" = "{{ composite_variable_to_lookup_value}}"
:。