From e50a40ea086d968d73a32b8a314c6582eec2f031 Mon Sep 17 00:00:00 2001 From: sureshanaparti <12028987+sureshanaparti@users.noreply.github.com> Date: Tue, 31 Aug 2021 06:22:24 +0530 Subject: [PATCH] Start VM with deploy-as-is template having multiple disk (SCSI) controller types. (#5311) --- .../hypervisor/vmware/resource/VmwareResource.java | 3 ++- .../hypervisor/vmware/mo/VirtualMachineMO.java | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) 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");