2017-02-13 25 views
0

在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”)。如何在vSphere 5.5 java api中获得VirtualDisk的UUID?

我想识别具有唯一标识符(uuid)的虚拟硬盘。我如何获得虚拟磁盘的uuid?

回答

0

VirtualDisk对象有2个ID (vmware documentation):

  • diskObjectId:虚拟磁盘持久和不可变标识符。虚拟磁盘具有UUID字段,但可以通过VirtualDiskManager API进行设置。该标识符是不可设置的通用唯一标识符。即使虚拟磁盘不与虚拟机相关联,虚拟磁盘仍然可以存在。
  • UUID

但我更喜欢使用,因为上面提到的原因, 'diskObjectId'。

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

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

下面是如何我获取硬盘详细

首先让你的虚拟机中的所有设备

 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); 
      } 
     } 
+0

它始终是更好地检查是否virtualDevice是VirtualDisk类的实例越来越UUID之前。根据标签从所有虚拟设备过滤virtualDisk不是正确的方法。 'VirtualMachineConfigInfo vmConfig = vm.getConfig(); \t \t VirtualDevice [] vds = vmConfig.getHardware()。getDevice(); \t \t为(VirtualDevice VD:VDS){ \t \t \t如果(VD的instanceof VirtualDisk){ \t \t \t \t的System.out.println(vd.getDiskObjectId()); \t \t \t} \t \t}' –