ansible - 如何在ansible中修改深度字典中的多个值
问题描述
在我的 ansible 中,我需要进行一次休息调用以获取一个相当大的 json 对象(它以 dict 的形式出现)。然后我需要修改json中的几个字段并重新发布以更新我要更改的组件的状态。
我已经有了其余的响应,我正在尝试弄清楚如何干净地修改众多值。我目前的尝试看起来像这样(简化了一点):
- name: update locations for remote processor
set_fact:
request: "{{ response.json | combine(item)}}"
loop:
- { 'component': { 'targetUri': "{{remoteProcessorUri}}"
- { 'component': { 'targetUris': "{{remoteProcessorUri}}"
...
不幸的是,虽然这确实改变了请求,但它用仅包含 targetUri 的 dict 替换了较大的组件 dict,组件中的所有其他内容都被删除了,因为我想保留它并且只修改 targetUri。
我尝试了一个变体,其中我的循环对每个项目都有一个位置和一个值字段,但我无法正确获取位置字段语法,以便能够用 item.location 替换 response.json。
那么我怎样才能创建它以使其变得容易和可读,在我的 dict 中进行各种更改而不更改除我调用的特定子字段之外的任何内容?
解决方案
事实证明我几乎是正确的。我所需要的只是将 recursive=true 选项添加到组合过滤器中。所以...
- name: update locations for remote processor
set_fact:
request: "{{ response.json | combine(item, recursive=True)}}"
loop:
- { 'component': { 'targetUri': "{{remoteProcessorUri}}"
- { 'component': { 'targetUris': "{{remoteProcessorUri}}"
...
推荐阅读
- c# - 使用 .net core 将 Html 转换为纯文本
- npm - Webpack 插件:如何在构建时读取插件使用者的文件?
- javascript - 画布:在整个画布上创建半透明覆盖,除了一个窗口
- javascript - 正则表达式从开始查找字符串
- huggingface-transformers - 减少 XLTransformers 的输出层大小
- java - 春天,休眠:java.sql.SQLSyntaxErrorException:表'test2.ciudad_persona'不存在
- sorting - 排序层完全没有效果
- php - 你如何在 PhpStorm 上使用 file_get_contents()?
- python - 我正在尝试用不同类型的水果训练我的模型
- arcgis-js-api - 使用 wkid 102704 时,ArcGIS 地图显示所有大陆(完全缩小)