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

Ansible如何遍历字典指定键 生成team为key、org为值的新字典

Ansible 遍历字典生成team-org映射字典解决方案

你可以通过subelements展开teams列表后,逐次合并单键字典得到目标结构,完整可运行代码如下:

---
- name: main playbook
  hosts: localhost
  vars:
    tower_objects_organizations:
      security:
        org: ORG_I-SSO-ES-ADM-SSMM
        teams:
          - I-SSO-ES-ADM-SSMM
          - I-SSO-ES-ADM-SSMM2
      monit:
        org: ORG_I-SSO-ES-TS-MONIT
        teams:
          - I-SSO-ES-TS-MONIT
  tasks:
    # 初始化空结果字典
    - name: Initialize empty team org mapping
      set_fact:
        team_org_map: {}

    # 遍历生成映射关系
    - name: Generate team to organization map
      set_fact:
        team_org_map: "{{ team_org_map | combine({item[1]: item[0].value.org}) }}"
      loop: "{{ tower_objects_organizations | dict2items | subelements('value.teams') }}"

    # 输出字典格式结果
    - name: Print team org mapping
      debug:
        var: team_org_map

    # 可选:转成你示例要求的逗号分隔字符串
    - name: Convert mapping to comma separated string
      set_fact:
        team_org_str: "{{ team_org_map | dictsort | map('join', ': ') | join(', ') }}"
    
    - name: Print string format result
      debug:
        var: team_org_str

运行后得到的team_org_map就是你要的键值对结构:

{
    "I-SSO-ES-ADM-SSMM": "ORG_I-SSO-ES-ADM-SSMM",
    "I-SSO-ES-ADM-SSMM2": "ORG_I-SSO-ES-ADM-SSMM",
    "I-SSO-ES-TS-MONIT": "ORG_I-SSO-ES-TS-MONIT"
}

生成的team_org_str和你给出的预期输出完全一致:

I-SSO-ES-ADM-SSMM: ORG_I-SSO-ES-ADM-SSMM, I-SSO-ES-ADM-SSMM2: ORG_I-SSO-ES-ADM-SSMM, I-SSO-ES-TS-MONIT: ORG_I-SSO-ES-TS-MONIT

注:如果存在重名team,默认后面的org会覆盖前面的,需要保留多个org的话可以调整combine参数增加递归合并逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:36:05