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

如何用Ansible的set_fact模块重组VM列表为指定结构?

使用Ansible将VM列表按订阅ID聚合重组

你可以通过groupby过滤器结合set_fact模块实现这个需求,同时对VM列表做反转排序来匹配目标结构:

原始数据

"myVms": [
        {
            "SubscriptionId": "564aba40-77683-4426-84ac-d195769c826c",
            "VirtualMachine": "K606WS625"
        },
        {
            "SubscriptionId": "564aba40-77683-4426-84ac-d195769c826c",
            "VirtualMachine": "K606WS626"
        },
        {
            "SubscriptionId": "564aba40-77683-4426-84ac-d195769c826c",
            "VirtualMachine": "K606WS812"
        },
        {
            "SubscriptionId": "564aba40-77683-4426-84ac-d195769c826c",
            "VirtualMachine": "K606WS817"
        }
]

目标结构

"myVmsModified": [
    {
        "SubscriptionId": "564aba40-77683-4426-84ac-d195769c826c",
        "MyBeautifulVms": [
            "K606WS817",
            "K606WS812",
            "K606WS626",
            "K606WS625"
        ]
    }
]

实现Playbook示例

原生Ansible写法(无需额外集合)

- name: 聚合VM列表
  hosts: localhost
  vars:
    myVms:
      - SubscriptionId: "564aba40-77683-4426-84ac-d195769c826c"
        VirtualMachine: "K606WS625"
      - SubscriptionId: "564aba40-77683-4426-84ac-d195769c826c"
        VirtualMachine: "K606WS626"
      - SubscriptionId: "564aba40-77683-4426-84ac-d195769c826c"
        VirtualMachine: "K606WS812"
      - SubscriptionId: "564aba40-77683-4426-84ac-d195769c826c"
        VirtualMachine: "K606WS817"
  tasks:
    - name: 生成聚合后的VM列表
      set_fact:
        myVmsModified: >-
          {% set aggregated = [] %}
          {% for sub_id, vm_entries in myVms | groupby('SubscriptionId') %}
            {% set vm_names = vm_entries | map(attribute='VirtualMachine') | reverse | list %}
            {% set _ = aggregated.append({
              'SubscriptionId': sub_id,
              'MyBeautifulVms': vm_names
            }) %}
          {% endfor %}
          {{ aggregated }}

    - name: 输出结果
      debug:
        var: myVmsModified

核心逻辑说明

  1. groupby('SubscriptionId'):将原始列表按订阅ID分组,得到(订阅ID, [该订阅下的所有VM条目])格式的分组对
  2. map(attribute='VirtualMachine'):从每个VM条目中提取名称字段
  3. reverse:反转VM名称列表的顺序,匹配目标结构的排序要求
  4. 遍历分组结果,将订阅ID和处理后的VM名称列表组装成字典,最终汇总为目标格式的列表

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 22:41:12