From 08699aa69076b6479bf9544f1375917e51be6a36 Mon Sep 17 00:00:00 2001 From: pavanaravapalli Date: Wed, 25 Mar 2020 14:31:13 +0530 Subject: [PATCH] NPE fix for System VM's start Command (#3985) Co-authored-by: Pavan Kumar Aravapalli --- .../com/cloud/hypervisor/guru/VMwareGuru.java | 2 +- .../vmware/resource/VmwareResource.java | 4 ++-- .../cloud/hypervisor/HypervisorGuruBase.java | 17 ++++++++++++++--- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/guru/VMwareGuru.java b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/guru/VMwareGuru.java index 4e8acad251b..59b27bd2410 100644 --- a/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/guru/VMwareGuru.java +++ b/plugins/hypervisors/vmware/src/main/java/com/cloud/hypervisor/guru/VMwareGuru.java @@ -294,7 +294,7 @@ public class VMwareGuru extends HypervisorGuruBase implements HypervisorGuru, Co } } - details.put(VmDetailConstants.BOOT_MODE, to.getBootType()); + details.put(VmDetailConstants.BOOT_MODE, to.getBootMode()); String diskDeviceType = details.get(VmDetailConstants.ROOT_DISK_CONTROLLER); if (userVm) { if (diskDeviceType == null) { 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 5a1459d3742..cc732f4d9d5 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 @@ -1724,7 +1724,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa String dataDiskController = vmSpec.getDetails().get(VmDetailConstants.DATA_DISK_CONTROLLER); String rootDiskController = vmSpec.getDetails().get(VmDetailConstants.ROOT_DISK_CONTROLLER); DiskTO rootDiskTO = null; - String bootMode = ApiConstants.BootType.BIOS.toString(); + String bootMode = "bios"; if (vmSpec.getDetails().containsKey(VmDetailConstants.BOOT_MODE)) { bootMode = vmSpec.getDetails().get(VmDetailConstants.BOOT_MODE); } @@ -2286,7 +2286,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa } } - if (!bootMode.equalsIgnoreCase(ApiConstants.BootType.BIOS.toString())) { + if (StringUtils.isNotBlank(bootMode) && !bootMode.equalsIgnoreCase("bios")) { vmConfigSpec.setFirmware("efi"); if (vmSpec.getDetails().containsKey(ApiConstants.BootType.UEFI.toString()) && "secure".equalsIgnoreCase(vmSpec.getDetails().get(ApiConstants.BootType.UEFI.toString()))) { VirtualMachineBootOptions bootOptions = new VirtualMachineBootOptions(); diff --git a/server/src/main/java/com/cloud/hypervisor/HypervisorGuruBase.java b/server/src/main/java/com/cloud/hypervisor/HypervisorGuruBase.java index 0c3263a0a8f..2ae35fc08ad 100644 --- a/server/src/main/java/com/cloud/hypervisor/HypervisorGuruBase.java +++ b/server/src/main/java/com/cloud/hypervisor/HypervisorGuruBase.java @@ -26,6 +26,7 @@ import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.backup.Backup; import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections.MapUtils; import org.apache.log4j.Logger; import com.cloud.agent.api.Command; @@ -172,9 +173,19 @@ public abstract class HypervisorGuruBase extends AdapterBase implements Hypervis offering.getRamSize() * 1024l * 1024l, null, null, vm.isHaEnabled(), vm.limitCpuUse(), vm.getVncPassword()); to.setBootArgs(vmProfile.getBootArgs()); - String bootType = (String)vmProfile.getParameter(new VirtualMachineProfile.Param("BootType")); - if (StringUtils.isNotBlank(bootType)) { - to.setBootType(bootType); + Map map = vmProfile.getParameters(); + if (MapUtils.isNotEmpty(map)) { + if (map.containsKey(VirtualMachineProfile.Param.BootMode)) { + if (StringUtils.isNotBlank((String) map.get(VirtualMachineProfile.Param.BootMode))) { + to.setBootMode((String) map.get(VirtualMachineProfile.Param.BootMode)); + } + } + + if (map.containsKey(VirtualMachineProfile.Param.BootType)) { + if (StringUtils.isNotBlank((String) map.get(VirtualMachineProfile.Param.BootType))) { + to.setBootType((String) map.get(VirtualMachineProfile.Param.BootType)); + } + } } List nicProfiles = vmProfile.getNics();