mirror of https://github.com/apache/cloudstack.git
Find system VM templates for CKS cluster honouring the preferred architecture
This commit is contained in:
parent
2b49a2550e
commit
7b4cc632ad
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()));
|
||||
|
|
|
|||
|
|
@ -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()));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue