Hi Andrea,
Please have a look at the method attached in the text file to collect VM disks information from the VirtualMachineConfigInfo object.
Thanks.
Viswanath
private static List<VMDisk> collectVMDiskData(String datacenterName, VMWareVMSummary vmstate, VirtualMachine vm, Folder rootFolder) throws Exception
{
List<VMDisk> vdiskList = new ArrayList<VMDisk>();
VirtualDevice[] vds = null;
VirtualMachineConfigInfo vmConfigInfo = vm.getConfig();
if ((vmConfigInfo != null) && (vmConfigInfo.getHardware() != null)) {
vds = vmConfigInfo.getHardware().getDevice();
}
if (vds != null) {
for (int i = 0; i < vds.length; i++) {
if (vds[i] instanceof VirtualDisk) {
VMDisk disk = new VMDisk();
VirtualDisk vDisk = (VirtualDisk) vds[i];
disk.setVmwareDatacenterName(datacenterName);
disk.setVmName(vm.getName());
disk.setVmIPAddr(vmstate.getVmIPAddr());
disk.setHostNode(vmstate.getHostNode());
disk.setKey(vDisk.getKey());
disk.setLabel(vDisk.getDeviceInfo().getLabel());
disk.setProvisionedSizeKB(vDisk.getCapacityInKB());
disk.setUnitNumber(vDisk.getUnitNumber());
if (vDisk.getBacking() != null) {
if (vDisk.getBacking() instanceof VirtualDiskFlatVer2BackingInfo) {
VirtualDiskFlatVer2BackingInfo backing = (VirtualDiskFlatVer2BackingInfo) vDisk.getBacking();
disk.setVirtualDiskType(
"VirtualDiskFlatVer2BackingInfo");
disk.setDiskMode(backing.getDiskMode());
disk.setFileName(backing.getFileName());
if (backing.getSplit() != null) {
disk.setSplit(backing.getSplit());
}
disk.setThinProvision(backing.getThinProvisioned());
if (backing.getWriteThrough() != null) {
disk.setWriteThrough(backing.getWriteThrough());
}
disk.setUuid(backing.getUuid());
try {
ManagedObjectReference dsMOR = backing.getDatastore();
Datastore ds = (Datastore) MorUtil.createExactManagedEntity(rootFolder.getServerConnection(),
dsMOR);
disk.setDatastore(ds.getName());
if(ds.getSummary().getMultipleHostAccess()!=null)
disk.setDataStoreMultiHost(ds.getSummary().getMultipleHostAccess().booleanValue());
} catch (Exception e) {
logger.error(
"Exception while getting datastore name for vmdisk " +
disk.getLabel() + " on vm " + vm.getName());
}
if (backing.getEagerlyScrub() != null) {
disk.setEagerlyScrub(backing.getEagerlyScrub());
}
} else if (vDisk.getBacking() instanceof VirtualDiskRawDiskMappingVer1BackingInfo) {
// instance of raw device mapping
VirtualDiskRawDiskMappingVer1BackingInfo rawBacking = (VirtualDiskRawDiskMappingVer1BackingInfo) vDisk.getBacking();
disk.setVirtualDiskType(
"VirtualDiskRawDiskMappingVer1BackingInfo");
disk.setDiskMode(rawBacking.getDiskMode());
disk.setFileName(rawBacking.getFileName());
disk.setUuid(rawBacking.getUuid());
disk.setCompatabilityMode(rawBacking.getCompatibilityMode());
try {
ManagedObjectReference dsMOR = rawBacking.getDatastore();
Datastore ds = (Datastore) MorUtil.createExactManagedEntity(rootFolder.getServerConnection(),
dsMOR);
disk.setDatastore(ds.getName());
if(ds.getSummary().getMultipleHostAccess()!=null)
disk.setDataStoreMultiHost(ds.getSummary().getMultipleHostAccess().booleanValue());
} catch (Exception e) {
logger.error(
"Exception while getting datastore name for vmdisk " +
disk.getLabel() + " on vm " + vm.getName());
}
} else if (vDisk.getBacking() instanceof VirtualDiskSparseVer2BackingInfo) {
VirtualDiskSparseVer2BackingInfo backing = (VirtualDiskSparseVer2BackingInfo) vDisk.getBacking();
disk.setVirtualDiskType(
"VirtualDiskSparseVer2BackingInfo");
disk.setDiskMode(backing.getDiskMode());
disk.setFileName(backing.getFileName());
if (backing.getSplit() != null) {
disk.setSplit(backing.getSplit());
}
if (backing.getWriteThrough() != null) {
disk.setWriteThrough(backing.getWriteThrough());
}
disk.setUuid(backing.getUuid());
try {
ManagedObjectReference dsMOR = backing.getDatastore();
Datastore ds = (Datastore) MorUtil.createExactManagedEntity(rootFolder.getServerConnection(),
dsMOR);
disk.setDatastore(ds.getName());
if(ds.getSummary().getMultipleHostAccess()!=null)
disk.setDataStoreMultiHost(ds.getSummary().getMultipleHostAccess().booleanValue());
} catch (Exception e) {
logger.error(
"Exception while getting datastore name for vmdisk " +
disk.getLabel() + " on vm " + vm.getName());
}
} else if (vDisk.getBacking() instanceof VirtualDiskRawDiskVer2BackingInfo) {
VirtualDiskRawDiskVer2BackingInfo backing = (VirtualDiskRawDiskVer2BackingInfo) vDisk.getBacking();
disk.setVirtualDiskType(
"VirtualDiskRawDiskVer2BackingInfo");
disk.setFileName(backing.getDescriptorFileName());
disk.setUuid(backing.getUuid());
} else if (vDisk.getBacking() instanceof VirtualDiskSparseVer1BackingInfo) {
VirtualDiskSparseVer1BackingInfo backing = (VirtualDiskSparseVer1BackingInfo) vDisk.getBacking();
disk.setVirtualDiskType(
"VirtualDiskSparseVer1BackingInfo");
disk.setDiskMode(backing.getDiskMode());
disk.setFileName(backing.getFileName());
if (backing.getSplit() != null) {
disk.setSplit(backing.getSplit());
}
if (backing.getWriteThrough() != null) {
disk.setWriteThrough(backing.getWriteThrough());
}
try {
ManagedObjectReference dsMOR = backing.getDatastore();
Datastore ds = (Datastore) MorUtil.createExactManagedEntity(rootFolder.getServerConnection(),
dsMOR);
disk.setDatastore(ds.getName());
if(ds.getSummary().getMultipleHostAccess()!=null)
disk.setDataStoreMultiHost(ds.getSummary().getMultipleHostAccess().booleanValue());
} catch (Exception e) {
logger.error(
"Exception while getting datastore name for vmdisk " +
disk.getLabel() + " on vm " + vm.getName());
}
} else if (vDisk.getBacking() instanceof VirtualDiskPartitionedRawDiskVer2BackingInfo) {
VirtualDiskPartitionedRawDiskVer2BackingInfo backing =
(VirtualDiskPartitionedRawDiskVer2BackingInfo) vDisk.getBacking();
disk.setVirtualDiskType(
"VirtualDiskPartitionedRawDiskVer2BackingInfo");
disk.setFileName(backing.getDescriptorFileName());
disk.setUuid(backing.getUuid());
} else if (vDisk.getBacking() instanceof VirtualDiskFlatVer1BackingInfo) {
VirtualDiskFlatVer1BackingInfo backing = (VirtualDiskFlatVer1BackingInfo) vDisk.getBacking();
disk.setVirtualDiskType(
"VirtualDiskFlatVer1BackingInfo");
disk.setDiskMode(backing.getDiskMode());
disk.setFileName(backing.getFileName());
if (backing.getSplit() != null) {
disk.setSplit(backing.getSplit());
}
if (backing.getWriteThrough() != null) {
disk.setWriteThrough(backing.getWriteThrough());
}
try {
ManagedObjectReference dsMOR = backing.getDatastore();
Datastore ds = (Datastore) MorUtil.createExactManagedEntity(rootFolder.getServerConnection(),
dsMOR);
disk.setDatastore(ds.getName());
if(ds.getSummary().getMultipleHostAccess()!=null)
disk.setDataStoreMultiHost(ds.getSummary().getMultipleHostAccess().booleanValue());
} catch (Exception e) {
logger.error(
"Exception while getting datastore name for vmdisk " +
disk.getLabel() + " on vm " + vm.getName());
}
}
}
vdiskList.add(disk);
}
}
}
return vdiskList;
}