From 7188f28118839468ac92352db767cc076aff4a5d Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Wed, 16 Apr 2025 17:58:30 +0530 Subject: [PATCH 1/2] server: fix available hypervisors listing for a zone In the absence of a SYSTEM type template for a zone, listing of templates can break. Behaviour was change in #9840 but it would be better to find available hypervisors using existing hosts. --- .../com/cloud/resource/ResourceManagerImpl.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/server/src/main/java/com/cloud/resource/ResourceManagerImpl.java b/server/src/main/java/com/cloud/resource/ResourceManagerImpl.java index 3414ed6651e1..534a99a2b0d1 100755 --- a/server/src/main/java/com/cloud/resource/ResourceManagerImpl.java +++ b/server/src/main/java/com/cloud/resource/ResourceManagerImpl.java @@ -3266,12 +3266,16 @@ public List listAllHostsInAllZonesByType(final Type type) { @Override public List listAvailHypervisorInZone(final Long zoneId) { - List systemVMTemplates = _templateDao.listAllReadySystemVMTemplates(zoneId); - final Set hypervisors = new HashSet<>(); - for (final VMTemplateVO systemVMTemplate : systemVMTemplates) { - hypervisors.add(systemVMTemplate.getHypervisorType()); + final SearchCriteria sc = _hypervisorsInDC.create(); + if (zoneId != null) { + sc.setParameters("dataCenter", zoneId); } - return new ArrayList<>(hypervisors); + sc.setParameters("type", Host.Type.Routing); + + return _hostDao.customSearch(sc, null).stream() + // The search is not able to return list of enums, so getting + // list of hypervisors as strings and then converting them to enum + .map(HypervisorType::getType).collect(Collectors.toList()); } @Override From 4c6aa555f296f426919b182460b33569f4275cb2 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Thu, 17 Apr 2025 10:46:10 +0530 Subject: [PATCH 2/2] fix Signed-off-by: Abhishek Kumar --- .../main/java/com/cloud/resource/ResourceManagerImpl.java | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/server/src/main/java/com/cloud/resource/ResourceManagerImpl.java b/server/src/main/java/com/cloud/resource/ResourceManagerImpl.java index 534a99a2b0d1..1ae214e3c164 100755 --- a/server/src/main/java/com/cloud/resource/ResourceManagerImpl.java +++ b/server/src/main/java/com/cloud/resource/ResourceManagerImpl.java @@ -32,7 +32,6 @@ import java.util.Locale; import java.util.Map; import java.util.Random; -import java.util.Set; import java.util.stream.Collectors; import javax.inject.Inject; @@ -60,10 +59,8 @@ import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao; import org.apache.cloudstack.storage.datastore.db.StoragePoolVO; import org.apache.cloudstack.utils.identity.ManagementServerNode; - import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.ObjectUtils; - import org.springframework.stereotype.Component; import com.cloud.agent.AgentManager; @@ -175,6 +172,7 @@ import com.cloud.storage.dao.VolumeDao; import com.cloud.user.Account; import com.cloud.user.AccountManager; +import com.cloud.utils.StringUtils; import com.cloud.utils.Ternary; import com.cloud.utils.UriUtils; import com.cloud.utils.component.Manager; @@ -201,7 +199,6 @@ import com.cloud.utils.ssh.SSHCmdHelper; import com.cloud.utils.ssh.SshException; import com.cloud.vm.UserVmManager; -import com.cloud.utils.StringUtils; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.State;