如何向嵌套字典的my_team字段添加新条目并更新原结构?
在Ansible中向嵌套字典的列表字段添加新条目
直接利用Ansible的combine过滤器和列表追加语法就能一步完成,不需要单独提取嵌套字典再替换,以下是具体实现方式:
假设你已经通过uri模块获取到目标数据并注册为original_response,且有变量new_team_entry存储要添加的新条目(比如{'org': 'Default', 'team': 'TEAM-FOUR-ADMINS'}),可以用set_fact直接更新嵌套的my_team列表:
- set_fact: updated_saml_settings: "{{ original_response.json | combine( {'OTHER_KEYS_3': original_response.json.OTHER_KEYS_3 | combine( {'my_team': original_response.json.OTHER_KEYS_3.my_team + [new_team_entry]} )}, recursive=True ) }}"
完整示例Playbook片段
- name: 获取SAML配置 uri: url: "https://tower/api/v2/settings/saml/?format=json" method: GET return_content: yes register: original_response - name: 定义要添加的新团队 set_fact: new_team_entry: org: "Default" team: "{{ new_team_name }}" # 替换为你的变量 - name: 更新my_team列表 set_fact: updated_saml_settings: "{{ original_response.json | combine( {'OTHER_KEYS_3': original_response.json.OTHER_KEYS_3 | combine( {'my_team': original_response.json.OTHER_KEYS_3.my_team | default([]) + [new_team_entry]} )}, recursive=True ) }}" - name: 提交更新后的配置 uri: url: "https://tower/api/v2/settings/saml/?format=json" method: PATCH body: "{{ updated_saml_settings }}" body_format: json status_code: 200
关键说明
- 列表追加:用
+ [new_team_entry]直接在原my_team列表末尾添加新条目,default([])用于避免原列表不存在时报错。 - 递归合并:
combine过滤器加上recursive=True参数,确保深层嵌套的OTHER_KEYS_3字段被正确更新,不会覆盖其他未修改的键值。 - 直接更新结构:无需单独提取
my_team处理后再替换,一次操作即可完成整个JSON结构的更新。
内容的提问来源于stack exchange,提问作者metalcated
相关产品推荐
相关产品推荐

