You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向嵌套字典的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

关键说明

  1. 列表追加:用+ [new_team_entry]直接在原my_team列表末尾添加新条目,default([])用于避免原列表不存在时报错。
  2. 递归合并:combine过滤器加上recursive=True参数,确保深层嵌套的OTHER_KEYS_3字段被正确更新,不会覆盖其他未修改的键值。
  3. 直接更新结构:无需单独提取my_team处理后再替换,一次操作即可完成整个JSON结构的更新。

内容的提问来源于stack exchange,提问作者metalcated

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 20:57:03