如何在 vSphere 5.5 java api 中获取 VirtualDisk 的 UUID?

How to get UUID for VirtualDisk in vSphere 5.5 java api?

在 virtualDisk 对象中我可以找到 diskObjectId,它是持久且不可变的标识符(根据 VMware 文档:https://pubs.vmware.com/vsphere-55/index.jsp?topic=%2Fcom.vmware.wssdk.apiref.doc%2Fvim.vm.device.VirtualDisk.html)。但是,如果我分离虚拟硬盘并将其再次附加到实例,那么该虚拟硬盘的 diskObjectId 也将与分离前相同。例如,diskObjectId 是“2086-2001”,甚至在分离硬盘后,我创建了一个新硬盘并为其分配了相同的 diskObjectId(“2086-2001”)。

我想用唯一标识符(uuid)来识别虚拟硬盘。如何获取虚拟磁盘的 uuid?

以下是我获取硬盘详细信息的方式

首先获取你VM的所有Devices

     VirtualDevice[] device=vm.getConfig().getHardware().getDevice();

然后在获取的设备中找到硬盘,找到它们的支持信息并从那里获取 UUID

示例代码

VirtualDevice[] device=vm.getConfig().getHardware().getDevice();



        for (VirtualDevice disk : device)
        {
            if(disk.getDeviceInfo().getLabel().contains("Hard disk"))
            {
                 VirtualDiskFlatVer2BackingInfo backing = (VirtualDiskFlatVer2BackingInfo) disk.getBacking();
                System.out.println(backing.uuid);
            }
        }

VirtualDisk 对象有 2 个标识符(vmware documentation):

  • diskObjectId:虚拟磁盘持久且不可变的标识符。虚拟磁盘有一个 UUID 字段,但可以通过 VirtualDiskManager API 进行设置。此标识符是不可设置的通用唯一标识符。 VirtualDisk 即使不与 VM 相关联也可以保持存在。
  • uuid

但由于上述原因,我更喜欢使用'diskObjectId'。

我通过下面提到的方式获得唯一标识符:

    VirtualMachineConfigInfo vmConfig = vm.getConfig();
    VirtualDevice[] vds = vmConfig.getHardware().getDevice();
    for(VirtualDevice vd : vds){
        if(vd instanceof VirtualDisk){
            System.out.println(vd.getDiskObjectId());
        }
    }