diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java index dee66c41308..8e41ed118b2 100644 --- a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java +++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/vmware/resource/VmwareResource.java @@ -2603,7 +2603,8 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa try { s_logger.debug("Mapping spec disks information to cloned VM disks for VM " + vmInternalCSName); if (vmMo != null && ArrayUtils.isNotEmpty(specDisks)) { - List vmDisks = vmMo.getVirtualDisks(); + List vmDisks = vmMo.getVirtualDisksOrderedByKey(); + List rootDisks = new ArrayList<>(); List sortedRootDisksFromSpec = Arrays.asList(sortVolumesByDeviceId(specDisks)) .stream() diff --git a/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java index 0a1ad39c559..8db7ff9c963 100644 --- a/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java +++ b/vmware-base/src/main/java/com/cloud/hypervisor/vmware/mo/VirtualMachineMO.java @@ -2785,6 +2785,20 @@ public class VirtualMachineMO extends BaseMO { return virtualDisks; } + public List getVirtualDisksOrderedByKey() throws Exception { + List virtualDisks = getVirtualDisks(); + Collections.sort(virtualDisks, new Comparator() { + @Override + public int compare(VirtualDisk disk1, VirtualDisk disk2) { + Integer disk1Key = disk1.getKey(); + Integer disk2Key = disk2.getKey(); + return disk1Key.compareTo(disk2Key); + } + }); + + return virtualDisks; + } + public List detachAllDisksExcept(String vmdkBaseName, String deviceBusName) throws Exception { List devices = _context.getVimClient().getDynamicProperty(_mor, "config.hardware.device");