This is an automated email from the ASF dual-hosted git repository.

nvazquez pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/main by this push:
     new 82e0d5d679 Fix UEFI detection on KVM and prevent deployments on non 
UEFI enabled hosts (#6423)
82e0d5d679 is described below

commit 82e0d5d6796cc30032919884863a52f52dfc632d
Author: Nicolas Vazquez <[email protected]>
AuthorDate: Tue May 31 14:31:42 2022 -0300

    Fix UEFI detection on KVM and prevent deployments on non UEFI enabled hosts 
(#6423)
    
    * Do not allow UEFI deployments on non UEFI enabled hosts
    
    * Fix UEFI detection on KVM
    
    * Refactor
    
    * Improvement
---
 .../com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java | 6 +++++-
 .../hypervisor/kvm/resource/wrapper/LibvirtReadyCommandWrapper.java | 2 +-
 .../main/java/com/cloud/deploy/DeploymentPlanningManagerImpl.java   | 5 ++---
 3 files changed, 8 insertions(+), 5 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 45072f436a..ba175c4457 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,9 +1414,13 @@ public class LibvirtComputingResource extends 
ServerResourceBase implements Serv
         s_logger.debug("agent.hooks.libvirt_vm_on_stop.method is " + 
_agentHooksVmOnStopMethod);
     }
 
+    public boolean isUefiPropertiesFileLoaded() {
+        return !_uefiProperties.isEmpty();
+    }
+
     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 69fe324ee3..a45f11bea8 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<ReadyComman
     public Answer execute(final ReadyCommand command, final 
LibvirtComputingResource libvirtComputingResource) {
         Map<String, String> hostDetails = new HashMap<String, String>();
 
-        if (hostSupportsUefi()) {
+        if (hostSupportsUefi() && 
libvirtComputingResource.isUefiPropertiesFileLoaded()) {
             hostDetails.put(Host.HOST_UEFI_ENABLE, Boolean.TRUE.toString());
         }
 
diff --git 
a/server/src/main/java/com/cloud/deploy/DeploymentPlanningManagerImpl.java 
b/server/src/main/java/com/cloud/deploy/DeploymentPlanningManagerImpl.java
index 86907a19ce..77f3596cc9 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 com.cloud.utils.fsm.StateMachine2;
 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 @@ StateListener<State, VirtualMachine.Event, VirtualMachine>, 
Configurable {
             }
             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;
 

Reply via email to