From a3809bd9264a208a5983ca46a66b509da956c265 Mon Sep 17 00:00:00 2001 From: nvazquez Date: Mon, 30 May 2022 15:04:43 -0300 Subject: [PATCH 1/4] Do not allow UEFI deployments on non UEFI enabled hosts --- .../java/com/cloud/deploy/DeploymentPlanningManagerImpl.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/server/src/main/java/com/cloud/deploy/DeploymentPlanningManagerImpl.java b/server/src/main/java/com/cloud/deploy/DeploymentPlanningManagerImpl.java index 86907a19ce30..77f3596cc94c 100644 --- a/server/src/main/java/com/cloud/deploy/DeploymentPlanningManagerImpl.java +++ b/server/src/main/java/com/cloud/deploy/DeploymentPlanningManagerImpl.java @@ -42,7 +42,6 @@ import org.apache.cloudstack.framework.config.ConfigKey; import org.apache.cloudstack.framework.config.Configurable; import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; import org.apache.cloudstack.affinity.AffinityGroupProcessor; @@ -301,8 +300,8 @@ public DeployDestination planDeployment(VirtualMachineProfile vmProfile, Deploym } HostVO host = _hostDao.findById(hostIdSpecified); if (host != null && StringUtils.isNotBlank(uefiFlag) && "yes".equalsIgnoreCase(uefiFlag)) { - _hostDao.loadDetails(host); - if (MapUtils.isNotEmpty(host.getDetails()) && host.getDetails().containsKey(Host.HOST_UEFI_ENABLE) && "false".equalsIgnoreCase(host.getDetails().get(Host.HOST_UEFI_ENABLE))) { + DetailVO uefiHostDetail = _hostDetailsDao.findDetail(host.getId(), Host.HOST_UEFI_ENABLE); + if (uefiHostDetail == null || "false".equalsIgnoreCase(uefiHostDetail.getValue())) { s_logger.debug("Cannot deploy to specified host as host does n't support uefi vm deployment, returning."); return null; From a56ebbb97231786e6cb4bdbbcec97b9cd7680034 Mon Sep 17 00:00:00 2001 From: nvazquez Date: Mon, 30 May 2022 15:17:58 -0300 Subject: [PATCH 2/4] Fix UEFI detection on KVM --- .../hypervisor/kvm/resource/LibvirtComputingResource.java | 4 ++++ .../kvm/resource/wrapper/LibvirtReadyCommandWrapper.java | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index 45072f436ae4..5f406935e605 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -1414,6 +1414,10 @@ private void configureAgentHooks(final Map params) { s_logger.debug("agent.hooks.libvirt_vm_on_stop.method is " + _agentHooksVmOnStopMethod); } + public boolean isUefiPropertiesFileSet() { + return PropertiesUtil.findConfigFile("uefi.properties") != null; + } + private void loadUefiProperties() throws FileNotFoundException { if (_uefiProperties != null && _uefiProperties.getProperty("guest.loader.legacy") != null) { diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtReadyCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtReadyCommandWrapper.java index 69fe324ee309..5d42226cde64 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtReadyCommandWrapper.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtReadyCommandWrapper.java @@ -42,7 +42,7 @@ public final class LibvirtReadyCommandWrapper extends CommandWrapper hostDetails = new HashMap(); - if (hostSupportsUefi()) { + if (hostSupportsUefi() && libvirtComputingResource.isUefiPropertiesFileSet()) { hostDetails.put(Host.HOST_UEFI_ENABLE, Boolean.TRUE.toString()); } From 370aca0fb80ba620231945a947a3086d128f8b5d Mon Sep 17 00:00:00 2001 From: nvazquez Date: Tue, 31 May 2022 06:56:21 -0300 Subject: [PATCH 3/4] Refactor --- .../hypervisor/kvm/resource/LibvirtComputingResource.java | 6 +++--- .../kvm/resource/wrapper/LibvirtReadyCommandWrapper.java | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index 5f406935e605..a1927048efca 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -1414,13 +1414,13 @@ private void configureAgentHooks(final Map params) { s_logger.debug("agent.hooks.libvirt_vm_on_stop.method is " + _agentHooksVmOnStopMethod); } - public boolean isUefiPropertiesFileSet() { - return PropertiesUtil.findConfigFile("uefi.properties") != null; + public boolean isUefiPropertiesFileLoaded() { + return _uefiProperties != null && _uefiProperties.getProperty("guest.loader.legacy") != null; } private void loadUefiProperties() throws FileNotFoundException { - if (_uefiProperties != null && _uefiProperties.getProperty("guest.loader.legacy") != null) { + if (isUefiPropertiesFileLoaded()) { return; } final File file = PropertiesUtil.findConfigFile("uefi.properties"); diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtReadyCommandWrapper.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtReadyCommandWrapper.java index 5d42226cde64..a45f11bea834 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtReadyCommandWrapper.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/wrapper/LibvirtReadyCommandWrapper.java @@ -42,7 +42,7 @@ public final class LibvirtReadyCommandWrapper extends CommandWrapper hostDetails = new HashMap(); - if (hostSupportsUefi() && libvirtComputingResource.isUefiPropertiesFileSet()) { + if (hostSupportsUefi() && libvirtComputingResource.isUefiPropertiesFileLoaded()) { hostDetails.put(Host.HOST_UEFI_ENABLE, Boolean.TRUE.toString()); } From 9be5241692b7e76b97807ad7f0668cbc7741ba3e Mon Sep 17 00:00:00 2001 From: nvazquez Date: Tue, 31 May 2022 08:07:16 -0300 Subject: [PATCH 4/4] Improvement --- .../cloud/hypervisor/kvm/resource/LibvirtComputingResource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index a1927048efca..ba175c445731 100644 --- a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -1415,7 +1415,7 @@ private void configureAgentHooks(final Map params) { } public boolean isUefiPropertiesFileLoaded() { - return _uefiProperties != null && _uefiProperties.getProperty("guest.loader.legacy") != null; + return !_uefiProperties.isEmpty(); } private void loadUefiProperties() throws FileNotFoundException {