我试图用我创建的字典来做键和值的更新,但是每个字典都有变量。我提示用户要更新哪个键,以及要更新哪些值,并使用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希望
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‘被硬编码时,我试图获得与输出相同的结果,但是使用变量的值来实现这一点。
我尝试过许多单引号/双引号的排列,并尝试过转义字符,但都没有效果。
有什么帮助吗?
发布于 2021-06-29 11:59:48
你试过这个吗?
"{{ applications|combine({'office': {'nuspec': {'%s': '%s'}}}, recursive=True) }}" % (selected_current_chocolatey_parameter, new_chocolatey_parameter_value)
https://stackoverflow.com/questions/68184848
复制相似问题