如何在Ansible中使用子集JSON增量更新已有JSON且不覆盖原有字段
问题原因
Ansible 的 combine 过滤器默认仅合并顶层字典,嵌套层级的字典会被新传入的值直接覆盖,因此你当前的写法会直接替换整个version字段,导致其他原有字段丢失。
修复方案
给 combine 过滤器添加 recursive=True 参数,开启递归嵌套合并,即可仅覆盖你指定的字段,保留其余所有原有字段。
修改后的 debug 任务写法如下:
- debug: msg: "{{ responseurl | combine({'json':{'body':{ 'version':{'minorEdit':true, 'number':responseversion.json.results[0].version.number+1} }}}, recursive=True) }}"
验证说明
开启递归合并后:
- 仅
version下的minorEdit和number两个字段会被更新 version下的_expandable、_links、by等其余字段完整保留version外层的所有层级字段不会被修改
内容的提问来源于stack exchange,提问作者fixxxera
相关产品推荐
相关产品推荐

