【发布时间】:2021-09-12 00:38:53
【问题描述】:
我正在尝试使用我创建的字典进行键和值更新,但 每个都有变量。我提示用户他们想要更新哪个键,以及什么值并使用 set_fact 存储它们。
这是我的应用程序字典
applications:
office:
nuspec:
id: black
version: blue
chocolatey_install:
softwareName: yellow
当我对“id”进行硬编码并尝试使用变量更新其值时,一切都很好。见下文:
- name: Setting new_chocolatey_parameter_value
set_fact: new_chocolatey_parameter_value="rainbow"
- name: Change applications.office.nuspec.id to prompted value
set_fact:
applications: "{{ applications|combine({'office': {'nuspec': {'id': '{{ new_chocolatey_parameter_value }}'}}}, recursive=True) }}"
我得到输出 Id hope
ok: [localhost]
TASK [output applications] *****************************************************
ok: [localhost] => {
"applications": {
"office": {
"chocolatey_install": {
"softwareName": "yellow",
},
"nuspec": {
"id": "rainbow",
"version": "blue"
}
}
}
}
但我也想使用一个变量来更新“id”的位置,以便更新应用程序字典。见下文
- name: Setting new_chocolatey_parameter_value
set_fact: new_chocolatey_parameter_value="rainbow"
- name: Setting selected_current_chocolatey_parameter
set_fact: selected_current_chocolatey_parameter="id"
- name: Change applications.office.nuspec.id to prompted value
set_fact:
applications: "{{ applications|combine({'office': {'nuspec': {'{{ selected_current_chocolatey_parameter }}': '{{ new_chocolatey_parameter_value }}'}}}, recursive=True) }}"
但正如你在下面看到的,它在字典中放置了一个新条目,其键为
“{{ selected_current_chocolatey_parameter }}”
ok: [localhost] => {
"applications": {
"office": {
"chocolatey_install": {
"softwareName": "yellow",
},
"nuspec": {
"id": "black",
"version": "blue",
"{{ selected_current_chocolatey_parameter }}": "rainbow"
}
}
}
}
我如何简单地获取 {{ selected_current_chocolatey_parameter }} 的值,即“id”,以替换我的应用程序字典更新代码?当 'id' 被硬编码时,我试图获得与输出相同的结果,而是使用变量的值来完成此操作。
我尝试了许多单引号/双引号的排列,并尝试了转义字符,但均无济于事。
有什么帮助吗?
【问题讨论】:
标签: python dictionary ansible jinja2