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

如何从vmware_guest_disk_info输出中提取backing_datastore值

VMware虚拟机backing_datastore字段提取失败解决方法

提取失败核心原因有两点:一是未找对vmware_guest_disk_info模块返回值的嵌套层级,二是不同版本的community.vmware集合字段位置存在变动,未做兼容处理。

返回结构层级说明

模块注册的disk_fact变量不是平铺的磁盘列表,实际嵌套规则如下:

  • 最外层为模块通用返回字段:changed、failed等执行状态字段
  • 全量磁盘数据存放在guest_disk_info键下,该值为字典结构:键为磁盘唯一标识,值为单块磁盘的属性对象
  • backing datastore名称在单块磁盘的backing子字典内:新版本集合字段名为datastore,1.10.0之前的老版本集合直接在磁盘属性根节点放置backing_datastore字段

标准返回结构示例:

disk_fact:
  changed: false
  failed: false
  guest_disk_info:
    "2000":
      label: "Hard disk 1"
      scsi_controller: 0
      unit_number: 0
      capacity_in_kb: 104857600
      backing:
        datastore: "prod_datastore_01" # 新版本存储名字段
        filename: "[prod_datastore_01] centos7/centos7.vmdk"
      # 老版本兼容字段,部分版本会同时返回
      backing_datastore: "prod_datastore_01"

正确取值代码示例

- name: 采集目标虚拟机磁盘信息
  community.vmware.vmware_guest_disk_info:
    hostname: "{{ vcenter_host }}"
    username: "{{ vcenter_user }}"
    password: "{{ vcenter_pass }}"
    validate_certs: false
    name: "{{ matched_vm_name }}" # 支持用moid、uuid、IP匹配目标虚拟机
  register: disk_fact

- name: 遍历输出所有磁盘所属的backing存储
  ansible.builtin.debug:
    msg: >-
      磁盘{{ item.value.label }}(控制器{{ item.value.scsi_controller }}:{{ item.value.unit_number }})
      所属datastore:{{ item.value.backing.datastore | default(item.value.backing_datastore, true) }}
  loop: "{{ disk_fact.guest_disk_info | dict2items }}"

常见问题排查

  • 遍历方式错误:guest_disk_info是字典类型而非列表,直接遍历该值只会拿到磁盘的键名,无法获取属性,必须通过dict2items过滤器转为键值对列表后再遍历
  • 权限不足:如果字段返回空值,检查vCenter服务账号是否具备存储浏览权限,缺少Datastore.Browse权限时该字段会被强制置空
  • 版本适配问题:建议优先升级community.vmware集合到最新稳定版,使用示例中的default过滤器做新旧版本兼容,避免字段路径变动导致的报错
  • 匹配逻辑错误:如果前置通过IP匹配虚拟机的逻辑出错,拿到非目标主机的VM对象,也会出现字段不符合预期的问题,可在磁盘采集前输出匹配到的VM名称、MOID做校验
  • 调试技巧:拿不准字段路径时,直接将完整返回值写入本地文件排查,不要盲猜字段位置:
    - name: 输出disk_fact全量结构到本地调试
      ansible.builtin.copy:
        content: "{{ disk_fact | to_nice_yaml(indent=2) }}"
        dest: "./disk_fact_debug.yaml"
      delegate_to: localhost
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:45:46