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

rohit pushed a commit to branch opensuse-fix
in repository https://gitbox.apache.org/repos/asf/cloudstack.git

commit 7b4cc632ada869d5b5b2986f8899cdead7958317
Author: nvazquez <[email protected]>
AuthorDate: Mon Jun 2 14:17:23 2025 -0300

    Find system VM templates for CKS cluster honouring the preferred 
architecture
---
 .../src/main/java/com/cloud/storage/dao/VMTemplateDao.java    |  2 +-
 .../main/java/com/cloud/storage/dao/VMTemplateDaoImpl.java    | 11 ++++++++++-
 .../kubernetes/cluster/KubernetesClusterManagerImpl.java      |  3 ++-
 .../sharedfs/lifecycle/StorageVmSharedFSLifeCycle.java        |  4 +++-
 .../sharedfs/lifecycle/StorageVmSharedFSLifeCycleTest.java    |  4 ++--
 5 files changed, 18 insertions(+), 6 deletions(-)

diff --git 
a/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDao.java 
b/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDao.java
index 0b40366a866..c751f81f927 100644
--- a/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDao.java
+++ b/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDao.java
@@ -72,7 +72,7 @@ public interface VMTemplateDao extends 
GenericDao<VMTemplateVO, Long>, StateDao<
 
     VMTemplateVO findSystemVMTemplate(long zoneId);
 
-    VMTemplateVO findSystemVMReadyTemplate(long zoneId, HypervisorType 
hypervisorType);
+    VMTemplateVO findSystemVMReadyTemplate(long zoneId, HypervisorType 
hypervisorType, String preferredArch);
 
     List<VMTemplateVO> findSystemVMReadyTemplates(long zoneId, HypervisorType 
hypervisorType, String preferredArch);
 
diff --git 
a/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDaoImpl.java 
b/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDaoImpl.java
index 12c00a3209a..42bef095a97 100644
--- a/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDaoImpl.java
+++ b/engine/schema/src/main/java/com/cloud/storage/dao/VMTemplateDaoImpl.java
@@ -23,6 +23,7 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import javax.inject.Inject;
 import javax.naming.ConfigurationException;
@@ -578,11 +579,19 @@ public class VMTemplateDaoImpl extends 
GenericDaoBase<VMTemplateVO, Long> implem
     }
 
     @Override
-    public VMTemplateVO findSystemVMReadyTemplate(long zoneId, HypervisorType 
hypervisorType) {
+    public VMTemplateVO findSystemVMReadyTemplate(long zoneId, HypervisorType 
hypervisorType, String preferredArch) {
         List<VMTemplateVO> templates = listAllReadySystemVMTemplates(zoneId);
         if (CollectionUtils.isEmpty(templates)) {
             return null;
         }
+        if (StringUtils.isNotBlank(preferredArch)) {
+            templates = templates.stream()
+                    .filter(x -> 
x.getArch().getType().equalsIgnoreCase(preferredArch))
+                    .collect(Collectors.toList());
+            if (CollectionUtils.isEmpty(templates)) {
+                return null;
+            }
+        }
         if (hypervisorType == HypervisorType.Any) {
             return templates.get(0);
         }
diff --git 
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java
 
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java
index 411e6af883e..a741b961ab7 100644
--- 
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java
+++ 
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/KubernetesClusterManagerImpl.java
@@ -434,7 +434,8 @@ public class KubernetesClusterManagerImpl extends 
ManagerBase implements Kuberne
     }
 
     public VMTemplateVO getKubernetesServiceTemplate(DataCenter dataCenter, 
Hypervisor.HypervisorType hypervisorType) {
-        VMTemplateVO template = 
templateDao.findSystemVMReadyTemplate(dataCenter.getId(), hypervisorType);
+        ConfigKey<String> preferredArchitecture = 
ResourceManager.SystemVmPreferredArchitecture;
+        VMTemplateVO template = 
templateDao.findSystemVMReadyTemplate(dataCenter.getId(), hypervisorType, 
preferredArchitecture.value());
         if (DataCenter.Type.Edge.equals(dataCenter.getType()) && template != 
null && !template.isDirectDownload()) {
             logger.debug(String.format("Template %s can not be used for edge 
zone %s", template, dataCenter));
             template = templateDao.findRoutingTemplate(hypervisorType, 
networkHelper.getHypervisorRouterTemplateConfigMap().get(hypervisorType).valueIn(dataCenter.getId()));
diff --git 
a/plugins/storage/sharedfs/storagevm/src/main/java/org/apache/cloudstack/storage/sharedfs/lifecycle/StorageVmSharedFSLifeCycle.java
 
b/plugins/storage/sharedfs/storagevm/src/main/java/org/apache/cloudstack/storage/sharedfs/lifecycle/StorageVmSharedFSLifeCycle.java
index 31159e7d3d9..9d76995211b 100644
--- 
a/plugins/storage/sharedfs/storagevm/src/main/java/org/apache/cloudstack/storage/sharedfs/lifecycle/StorageVmSharedFSLifeCycle.java
+++ 
b/plugins/storage/sharedfs/storagevm/src/main/java/org/apache/cloudstack/storage/sharedfs/lifecycle/StorageVmSharedFSLifeCycle.java
@@ -61,6 +61,7 @@ import com.cloud.vm.dao.UserVmDao;
 import org.apache.cloudstack.api.ApiCommandResourceType;
 import org.apache.cloudstack.api.BaseCmd;
 import org.apache.cloudstack.context.CallContext;
+import org.apache.cloudstack.framework.config.ConfigKey;
 import org.apache.cloudstack.storage.sharedfs.SharedFS;
 import org.apache.cloudstack.storage.sharedfs.SharedFSLifeCycle;
 import org.apache.commons.codec.binary.Base64;
@@ -174,10 +175,11 @@ public class StorageVmSharedFSLifeCycle implements 
SharedFSLifeCycle {
             customParameterMap.put("maxIopsDo", maxIops.toString());
         }
         List<String> keypairs = new ArrayList<String>();
+        ConfigKey<String> preferredArchitecture = 
ResourceManager.SystemVmPreferredArchitecture;
 
         for (final Iterator<Hypervisor.HypervisorType> iter = 
hypervisors.iterator(); iter.hasNext();) {
             final Hypervisor.HypervisorType hypervisor = iter.next();
-            VMTemplateVO template = 
templateDao.findSystemVMReadyTemplate(zoneId, hypervisor);
+            VMTemplateVO template = 
templateDao.findSystemVMReadyTemplate(zoneId, hypervisor, 
preferredArchitecture.value());
             if (template == null && !iter.hasNext()) {
                 throw new CloudRuntimeException(String.format("Unable to find 
the systemvm template for %s or it was not downloaded in %s.", 
hypervisor.toString(), zone.toString()));
             }
diff --git 
a/plugins/storage/sharedfs/storagevm/src/test/java/org/apache/cloudstack/storage/sharedfs/lifecycle/StorageVmSharedFSLifeCycleTest.java
 
b/plugins/storage/sharedfs/storagevm/src/test/java/org/apache/cloudstack/storage/sharedfs/lifecycle/StorageVmSharedFSLifeCycleTest.java
index 4393b0565f8..a880657797b 100644
--- 
a/plugins/storage/sharedfs/storagevm/src/test/java/org/apache/cloudstack/storage/sharedfs/lifecycle/StorageVmSharedFSLifeCycleTest.java
+++ 
b/plugins/storage/sharedfs/storagevm/src/test/java/org/apache/cloudstack/storage/sharedfs/lifecycle/StorageVmSharedFSLifeCycleTest.java
@@ -236,7 +236,7 @@ public class StorageVmSharedFSLifeCycleTest {
         
when(serviceOfferingDao.findById(s_serviceOfferingId)).thenReturn(serviceOffering);
 
         VMTemplateVO template = mock(VMTemplateVO.class);
-        when(templateDao.findSystemVMReadyTemplate(s_zoneId, 
Hypervisor.HypervisorType.KVM)).thenReturn(template);
+        when(templateDao.findSystemVMReadyTemplate(s_zoneId, 
Hypervisor.HypervisorType.KVM, null)).thenReturn(template);
         when(template.getId()).thenReturn(s_templateId);
 
         return sharedFS;
@@ -298,7 +298,7 @@ public class StorageVmSharedFSLifeCycleTest {
         when(dataCenterDao.findById(s_zoneId)).thenReturn(zone);
         when(resourceMgr.getSupportedHypervisorTypes(s_zoneId, false, 
null)).thenReturn(List.of(Hypervisor.HypervisorType.KVM));
 
-        when(templateDao.findSystemVMReadyTemplate(s_zoneId, 
Hypervisor.HypervisorType.KVM)).thenReturn(null);
+        when(templateDao.findSystemVMReadyTemplate(s_zoneId, 
Hypervisor.HypervisorType.KVM, null)).thenReturn(null);
         lifeCycle.deploySharedFS(sharedFS, s_networkId, s_diskOfferingId, 
s_size, s_minIops, s_maxIops);
     }
 

Reply via email to