From c3beef45aacee0d1f50255ed6dc7c4aa1200ad32 Mon Sep 17 00:00:00 2001 From: Suresh Kumar Anaparti Date: Fri, 13 Aug 2021 10:51:55 +0530 Subject: [PATCH] Start VM with deploy-as-is template having multiple disk (SCSI) controller types. --- .../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 dee66c413081..8e41ed118b2f 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 @@ private void mapSpecDisksToClonedDisksAndTearDownDatadisks(VirtualMachineMO vmMo 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 0fdaa7d52ea1..0d8bfdfe2367 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 List getVirtualDisks() throws Exception { 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");