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

求助:在Ansible中从大型JSON变量提取组与用户ID映射数据

Ansible提取AD组ID与成员ID映射的解决方案

针对你提供的JSON结构,这里有两种高效的方法可以提取Group_ID到对应成员User_ID列表的映射:

方法一:使用json_query(推荐,适合大型数据集)

利用JMESPath查询语法直接提取并转换结构,一步到位:

- name: 生成组ID到成员ID的映射
  set_fact:
    group_member_map: "{{ ad_tenant_data.ad_groups | json_query('[].{key: Group_ID, value: group_members[].User_ID}') | items2dict }}"

逻辑说明:

  1. json_query('[].{key: Group_ID, value: group_members[].User_ID}'):遍历所有组,将每个组转换为包含key(组ID)和value(成员ID列表)的字典
  2. items2dict:将这些小字典合并成一个完整的映射集合

方法二:使用循环+combine(适合需要额外处理的场景)

如果需要在构建映射时添加额外逻辑,可以用循环逐步合并:

- name: 初始化空映射
  set_fact:
    group_member_map: {}

- name: 遍历每个组构建映射
  set_fact:
    group_member_map: "{{ group_member_map | combine({ item.Group_ID: item.group_members | map(attribute='User_ID') | list }) }}"
  loop: "{{ ad_tenant_data.ad_groups }}"

逻辑说明:

  1. 先初始化一个空字典作为映射容器
  2. 循环每个AD组,用map(attribute='User_ID')提取当前组所有成员的ID并转成列表
  3. 用combine将当前组的ID-成员列表键值对合并到总映射中

验证结果

可以通过debug模块查看最终生成的映射:

- name: 输出映射结果
  debug:
    var: group_member_map

注意:确保变量名和JSON中的属性名大小写完全匹配(比如Group_ID、User_ID的大小写不能写错),否则会提取失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:43:19