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;