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

如何在Ansible中为VM字典添加对应item字段并生成新字典?

在Ansible中为子字典添加同级键值对

原始数据

注意:你提供的原始JSON存在语法问题——results数组中的单个字典包含重复的item和vms键,这会导致后序键覆盖前序。修正后的有效原始数据如下:

ok: [localhost] => {
  "vm_info": {
    "results": [
      {
        "item": "AP",
        "vms": [
          {"VM": "1"},
          {"VM": "2"},
          {"VM": "2"}
        ]
      },
      {
        "item": "US",
        "vms": [
          {"VM": "1"},
          {"VM": "2"},
          {"VM": "2"}
        ]
      }
    ]
  }
}

期望输出

"updated_vm": {
  "results": [
    {
      "item": "AP",
      "vms": [
        {"VM": "1", "item": "AP"},
        {"VM": "2", "item": "AP"},
        {"VM": "2", "item": "AP"}
      ]
    },
    {
      "item": "US",
      "vms": [
        {"VM": "1", "item": "US"},
        {"VM": "2", "item": "US"},
        {"VM": "2", "item": "US"}
      ]
    }
  ]
}

实现方法

可以通过Ansible的combine和map过滤器结合Jinja2模板语法实现,示例Playbook如下:

- name: 为VM字典添加对应item值
  hosts: localhost
  vars:
    vm_info:
      results:
        - item: "AP"
          vms:
            - {"VM": "1"}
            - {"VM": "2"}
            - {"VM": "2"}
        - item: "US"
          vms:
            - {"VM": "1"}
            - {"VM": "2"}
            - {"VM": "2"}
  tasks:
    - name: 生成更新后的updated_vm数据
      set_fact:
        updated_vm:
          results: "{{ vm_info.results | map('update_vms_item') | list }}"
      vars:
        update_vms_item: >-
          {% set current_item = item.item %}
          {{
            item | combine({
              'vms': item.vms | map('combine', {'item': current_item}) | list
            })
          }}

    - name: 打印更新后的数据
      debug:
        var: updated_vm

逻辑说明

  1. 用map过滤器遍历vm_info.results中的每个条目
  2. 对每个条目,取出当前的item值(如"AP")
  3. 用combine过滤器将该item值合并到vms列表的每个字典中
  4. 用combine替换原条目里的vms字段,最终生成新的results数组

相关文档参考

  • Ansible官方文档的Filters章节:重点查看combine、map过滤器的用法
  • Ansible官方文档的Jinja2 Templates章节:了解Jinja2变量赋值、表达式语法

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:44:53