This is an automated email from the ASF dual-hosted git repository.
rohit pushed a commit to branch 4.14
in repository https://gitbox.apache.org/repos/asf/cloudstack.git
The following commit(s) were added to refs/heads/4.14 by this push:
new a7f56d4 cks: assorted bug fixes (#4116)
a7f56d4 is described below
commit a7f56d41c8bc04383d4f2c67cf5433e496cdc7a5
Author: Abhishek Kumar <[email protected]>
AuthorDate: Tue Aug 4 05:57:32 2020 +0000
cks: assorted bug fixes (#4116)
Fixes #4056
Fixes #4107
Fixes #4113
Fixes #4133
Fixes deployment, template and network deletion.
Also allows filetering in listKubernetesSupportedVersions with keyword
Signed-off-by: Abhishek Kumar <[email protected]>
---
.../java/com/cloud/storage/dao/VMTemplateDao.java | 2 +-
.../com/cloud/storage/dao/VMTemplateDaoImpl.java | 7 ++++
.../cluster/KubernetesClusterManagerImpl.java | 49 ++++++++++++++--------
.../KubernetesClusterActionWorker.java | 2 +
.../KubernetesClusterDestroyWorker.java | 37 ++++++++++++----
...ernetesClusterResourceModifierActionWorker.java | 22 ++++++----
.../KubernetesClusterStartWorker.java | 11 ++---
.../version/KubernetesVersionManagerImpl.java | 31 +++++++++-----
.../ListKubernetesSupportedVersionsCmd.java | 2 +-
.../version/KubernetesVersionServiceTest.java | 15 ++++++-
10 files changed, 124 insertions(+), 54 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 c43a2ea..c01c165 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
@@ -36,7 +36,7 @@ public interface VMTemplateDao extends
GenericDao<VMTemplateVO, Long>, StateDao<
public VMTemplateVO findByTemplateName(String templateName);
- // public void update(VMTemplateVO template);
+ public VMTemplateVO findValidByTemplateName(String templateName);
public List<VMTemplateVO> listAllSystemVMTemplates();
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 6773c20..1621bae 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
@@ -137,6 +137,13 @@ public class VMTemplateDaoImpl extends
GenericDaoBase<VMTemplateVO, Long> implem
}
@Override
+ public VMTemplateVO findValidByTemplateName(String templateName) {
+ SearchCriteria<VMTemplateVO> sc = NameSearch.create();
+ sc.setParameters("name", templateName);
+ return findOneBy(sc);
+ }
+
+ @Override
public List<VMTemplateVO> listByParentTemplatetId(long parentTemplatetId) {
SearchCriteria<VMTemplateVO> sc = ParentTemplateIdSearch.create();
sc.setParameters("parentTemplateId", parentTemplatetId);
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 358fa03..204f2d7 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
@@ -51,7 +51,6 @@ import
org.apache.cloudstack.api.response.KubernetesClusterResponse;
import org.apache.cloudstack.api.response.ListResponse;
import org.apache.cloudstack.context.CallContext;
import
org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService;
-import
org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine;
import org.apache.cloudstack.framework.config.ConfigKey;
import org.apache.cloudstack.managed.context.ManagedContextRunnable;
import org.apache.commons.codec.binary.Base64;
@@ -63,7 +62,6 @@ import com.cloud.api.ApiDBUtils;
import com.cloud.api.query.dao.NetworkOfferingJoinDao;
import com.cloud.api.query.dao.TemplateJoinDao;
import com.cloud.api.query.vo.NetworkOfferingJoinVO;
-import com.cloud.api.query.vo.TemplateJoinVO;
import com.cloud.capacity.CapacityManager;
import com.cloud.dc.ClusterDetailsDao;
import com.cloud.dc.ClusterDetailsVO;
@@ -82,6 +80,7 @@ import com.cloud.exception.PermissionDeniedException;
import com.cloud.exception.ResourceAllocationException;
import com.cloud.host.Host.Type;
import com.cloud.host.HostVO;
+import com.cloud.host.dao.HostDao;
import com.cloud.hypervisor.Hypervisor;
import
com.cloud.kubernetes.cluster.actionworkers.KubernetesClusterActionWorker;
import
com.cloud.kubernetes.cluster.actionworkers.KubernetesClusterDestroyWorker;
@@ -122,9 +121,7 @@ import com.cloud.resource.ResourceManager;
import com.cloud.service.ServiceOfferingVO;
import com.cloud.service.dao.ServiceOfferingDao;
import com.cloud.storage.VMTemplateVO;
-import com.cloud.storage.VMTemplateZoneVO;
import com.cloud.storage.dao.VMTemplateDao;
-import com.cloud.storage.dao.VMTemplateZoneDao;
import com.cloud.user.Account;
import com.cloud.user.AccountManager;
import com.cloud.user.AccountService;
@@ -181,12 +178,12 @@ public class KubernetesClusterManagerImpl extends
ManagerBase implements Kuberne
@Inject
protected ClusterDetailsDao clusterDetailsDao;
@Inject
+ protected HostDao hostDao;
+ @Inject
protected ServiceOfferingDao serviceOfferingDao;
@Inject
protected VMTemplateDao templateDao;
@Inject
- protected VMTemplateZoneDao templateZoneDao;
- @Inject
protected TemplateJoinDao templateJoinDao;
@Inject
protected AccountService accountService;
@@ -300,8 +297,7 @@ public class KubernetesClusterManagerImpl extends
ManagerBase implements Kuberne
LOGGER.warn(String.format("Unable to find the template %s to
be used for provisioning Kubernetes cluster nodes", templateName));
return false;
}
- List<VMTemplateZoneVO> listZoneTemplate =
templateZoneDao.listByZoneTemplate(zone.getId(), template.getId());
- if (listZoneTemplate == null || listZoneTemplate.isEmpty()) {
+ if
(CollectionUtils.isEmpty(templateJoinDao.newTemplateView(template,
zone.getId(), true))) {
LOGGER.warn(String.format("The template ID: %s, name: %s is
not available for use in zone ID: %s provisioning Kubernetes cluster nodes",
template.getUuid(), templateName, zone.getUuid()));
return false;
}
@@ -394,7 +390,7 @@ public class KubernetesClusterManagerImpl extends
ManagerBase implements Kuberne
tempalteName = KubernetesClusterXenserverTemplateName.value();
break;
}
- return templateDao.findByTemplateName(tempalteName);
+ return templateDao.findValidByTemplateName(tempalteName);
}
private boolean validateIsolatedNetwork(Network network, int
clusterTotalNodeCount) {
@@ -523,6 +519,10 @@ public class KubernetesClusterManagerImpl extends
ManagerBase implements Kuberne
for (Map.Entry<String, Pair<HostVO, Integer>> hostEntry :
hosts_with_resevered_capacity.entrySet()) {
Pair<HostVO, Integer> hp = hostEntry.getValue();
HostVO h = hp.first();
+ hostDao.loadHostTags(h);
+ if (!Strings.isNullOrEmpty(offering.getHostTag()) &&
!(h.getHostTags() != null && h.getHostTags().contains(offering.getHostTag()))) {
+ continue;
+ }
int reserved = hp.second();
reserved++;
ClusterVO cluster = clusterDao.findById(h.getClusterId());
@@ -545,7 +545,7 @@ public class KubernetesClusterManagerImpl extends
ManagerBase implements Kuberne
}
if (!suitable_host_found) {
if (LOGGER.isInfoEnabled()) {
- LOGGER.info(String.format("Suitable hosts not found in
datacenter ID: %s for node %d", zone.getUuid(), i));
+ LOGGER.info(String.format("Suitable hosts not found in
datacenter ID: %s for node %d with offering ID: %s", zone.getUuid(), i,
offering.getUuid()));
}
break;
}
@@ -556,8 +556,8 @@ public class KubernetesClusterManagerImpl extends
ManagerBase implements Kuberne
}
return new DeployDestination(zone, null, planCluster, null);
}
- String msg = String.format("Cannot find enough capacity for Kubernetes
cluster(requested cpu=%1$s memory=%2$s)",
- cpu_requested * nodesCount, ram_requested * nodesCount);
+ String msg = String.format("Cannot find enough capacity for Kubernetes
cluster(requested cpu=%d memory=%d) with offering ID: %s",
+ cpu_requested * nodesCount, ram_requested * nodesCount,
offering.getUuid());
LOGGER.warn(msg);
throw new InsufficientServerCapacityException(msg, DataCenter.class,
zone.getId());
}
@@ -684,12 +684,12 @@ public class KubernetesClusterManagerImpl extends
ManagerBase implements Kuberne
throw new InvalidParameterValueException(String.format("Kubernetes
version ID: %s is not available for zone ID: %s",
clusterKubernetesVersion.getUuid(), zone.getUuid()));
}
- TemplateJoinVO iso =
templateJoinDao.findById(clusterKubernetesVersion.getIsoId());
+ VMTemplateVO iso =
templateDao.findById(clusterKubernetesVersion.getIsoId());
if (iso == null) {
throw new InvalidParameterValueException(String.format("Invalid
ISO associated with version ID: %s", clusterKubernetesVersion.getUuid()));
}
- if (!ObjectInDataStoreStateMachine.State.Ready.equals(iso.getState()))
{
- throw new InvalidParameterValueException(String.format("ISO
associated with version ID: %s is not in Ready state",
clusterKubernetesVersion.getUuid()));
+ if (CollectionUtils.isEmpty(templateJoinDao.newTemplateView(iso,
zone.getId(), true))) {
+ throw new InvalidParameterValueException(String.format("ISO
associated with version ID: %s is not in Ready state for datacenter ID: %s",
clusterKubernetesVersion.getUuid(), zone.getUuid()));
}
ServiceOffering serviceOffering =
serviceOfferingDao.findById(serviceOfferingId);
@@ -887,6 +887,15 @@ public class KubernetesClusterManagerImpl extends
ManagerBase implements Kuberne
if (clusterSize < 1) {
throw new
InvalidParameterValueException(String.format("Kubernetes cluster ID: %s cannot
be scaled for size, %d", kubernetesCluster.getUuid(), clusterSize));
}
+ if (clusterSize > kubernetesCluster.getNodeCount()) { // Upscale
+ VMTemplateVO template =
templateDao.findById(kubernetesCluster.getTemplateId());
+ if (template == null) {
+ throw new
InvalidParameterValueException(String.format("Invalid template associated with
Kubernetes cluster ID: %s", kubernetesCluster.getUuid()));
+ }
+ if
(CollectionUtils.isEmpty(templateJoinDao.newTemplateView(template,
zone.getId(), true))) {
+ throw new
InvalidParameterValueException(String.format("Template ID: %s associated with
Kubernetes cluster ID: %s is not in Ready state for datacenter ID: %s",
template.getUuid(), kubernetesCluster.getUuid(), zone.getUuid()));
+ }
+ }
}
}
@@ -908,6 +917,10 @@ public class KubernetesClusterManagerImpl extends
ManagerBase implements Kuberne
if
(!KubernetesCluster.State.Running.equals(kubernetesCluster.getState())) {
throw new InvalidParameterValueException(String.format("Kubernetes
cluster ID: %s is not in running state", kubernetesCluster.getUuid()));
}
+ final DataCenter zone =
dataCenterDao.findById(kubernetesCluster.getZoneId());
+ if (zone == null) {
+ logAndThrow(Level.WARN, String.format("Unable to find zone for
Kubernetes cluster ID: %s", kubernetesCluster.getUuid()));
+ }
KubernetesSupportedVersionVO upgradeVersion =
kubernetesSupportedVersionDao.findById(upgradeVersionId);
if (upgradeVersion == null || upgradeVersion.getRemoved() != null) {
throw new InvalidParameterValueException("Invalid Kubernetes
version ID");
@@ -939,12 +952,12 @@ public class KubernetesClusterManagerImpl extends
ManagerBase implements Kuberne
throw new InvalidParameterValueException(e.getMessage());
}
- TemplateJoinVO iso =
templateJoinDao.findById(upgradeVersion.getIsoId());
+ VMTemplateVO iso = templateDao.findById(upgradeVersion.getIsoId());
if (iso == null) {
throw new InvalidParameterValueException(String.format("Invalid
ISO associated with version ID: %s", upgradeVersion.getUuid()));
}
- if (!ObjectInDataStoreStateMachine.State.Ready.equals(iso.getState()))
{
- throw new InvalidParameterValueException(String.format("ISO
associated with version ID: %s is not in Ready state",
upgradeVersion.getUuid()));
+ if (CollectionUtils.isEmpty(templateJoinDao.newTemplateView(iso,
zone.getId(), true))) {
+ throw new InvalidParameterValueException(String.format("ISO
associated with version ID: %s is not in Ready state for datacenter ID: %s",
upgradeVersion.getUuid(), zone.getUuid()));
}
}
diff --git
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterActionWorker.java
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterActionWorker.java
index aad9a22..0a52b66 100644
---
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterActionWorker.java
+++
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterActionWorker.java
@@ -122,6 +122,7 @@ public class KubernetesClusterActionWorker {
protected KubernetesCluster kubernetesCluster;
protected Account owner;
+ protected VirtualMachineTemplate clusterTemplate;
protected File sshKeyFile;
protected String publicIpAddress;
protected int sshPort;
@@ -136,6 +137,7 @@ public class KubernetesClusterActionWorker {
protected void init() {
this.owner = accountDao.findById(kubernetesCluster.getAccountId());
+ this.clusterTemplate =
templateDao.findById(kubernetesCluster.getTemplateId());
this.sshKeyFile = getManagementServerSshPublicKeyFile();
}
diff --git
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterDestroyWorker.java
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterDestroyWorker.java
index 8d7f427..c1a095f 100644
---
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterDestroyWorker.java
+++
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterDestroyWorker.java
@@ -37,7 +37,6 @@ import com.cloud.kubernetes.cluster.KubernetesClusterVO;
import com.cloud.kubernetes.cluster.KubernetesClusterVmMap;
import com.cloud.kubernetes.cluster.KubernetesClusterVmMapVO;
import com.cloud.network.IpAddress;
-import com.cloud.network.Network;
import com.cloud.network.dao.NetworkVO;
import com.cloud.network.rules.FirewallRule;
import com.cloud.user.Account;
@@ -48,6 +47,8 @@ import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.vm.ReservationContext;
import com.cloud.vm.ReservationContextImpl;
import com.cloud.vm.UserVmVO;
+import com.cloud.vm.VMInstanceVO;
+import com.cloud.vm.VirtualMachine;
public class KubernetesClusterDestroyWorker extends
KubernetesClusterResourceModifierActionWorker {
@@ -129,7 +130,7 @@ public class KubernetesClusterDestroyWorker extends
KubernetesClusterResourceMod
private void deleteKubernetesClusterNetworkRules() throws
ManagementServerException {
NetworkVO network =
networkDao.findById(kubernetesCluster.getNetworkId());
- if (network == null ||
!Network.GuestType.Isolated.equals(network.getGuestType())) {
+ if (network == null) {
return;
}
List<Long> removedVmIds = new ArrayList<>();
@@ -189,17 +190,39 @@ public class KubernetesClusterDestroyWorker extends
KubernetesClusterResourceMod
public boolean destroy() throws CloudRuntimeException {
init();
validateClusterSate();
- if (LOGGER.isInfoEnabled()) {
- LOGGER.info(String.format("Destroying Kubernetes cluster ID: %s",
kubernetesCluster.getUuid()));
- }
- stateTransitTo(kubernetesCluster.getId(),
KubernetesCluster.Event.DestroyRequested);
this.clusterVMs =
kubernetesClusterVmMapDao.listByClusterId(kubernetesCluster.getId());
- boolean vmsDestroyed = destroyClusterVMs();
boolean cleanupNetwork = true;
final KubernetesClusterDetailsVO clusterDetails =
kubernetesClusterDetailsDao.findDetail(kubernetesCluster.getId(),
"networkCleanup");
if (clusterDetails != null) {
cleanupNetwork = Boolean.parseBoolean(clusterDetails.getValue());
}
+ if (cleanupNetwork) { // if network has additional VM, cannot proceed
with cluster destroy
+ NetworkVO network =
networkDao.findById(kubernetesCluster.getNetworkId());
+ if (network == null) {
+ logAndThrow(Level.ERROR, String.format("Failed to find network
for Kubernetes cluster ID: %s", kubernetesCluster.getUuid()));
+ }
+ List<VMInstanceVO> networkVMs =
vmInstanceDao.listNonRemovedVmsByTypeAndNetwork(network.getId(),
VirtualMachine.Type.User);
+ if (networkVMs.size() > clusterVMs.size()) {
+ logAndThrow(Level.ERROR, String.format("Network ID: %s for
Kubernetes cluster ID: %s has instances using it which are not part of the
Kubernetes cluster", network.getUuid(), kubernetesCluster.getUuid()));
+ }
+ for (VMInstanceVO vm : networkVMs) {
+ boolean vmFoundInKubernetesCluster = false;
+ for (KubernetesClusterVmMap clusterVM : clusterVMs) {
+ if (vm.getId() == clusterVM.getVmId()) {
+ vmFoundInKubernetesCluster = true;
+ break;
+ }
+ }
+ if (!vmFoundInKubernetesCluster) {
+ logAndThrow(Level.ERROR, String.format("VM ID: %s which is
not a part of Kubernetes cluster ID: %s is using Kubernetes cluster network ID:
%s", vm.getUuid(), kubernetesCluster.getUuid(), network.getUuid()));
+ }
+ }
+ }
+ if (LOGGER.isInfoEnabled()) {
+ LOGGER.info(String.format("Destroying Kubernetes cluster ID: %s",
kubernetesCluster.getUuid()));
+ }
+ stateTransitTo(kubernetesCluster.getId(),
KubernetesCluster.Event.DestroyRequested);
+ boolean vmsDestroyed = destroyClusterVMs();
// if there are VM's that were not expunged, we can not delete the
network
if (vmsDestroyed) {
if (cleanupNetwork) {
diff --git
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterResourceModifierActionWorker.java
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterResourceModifierActionWorker.java
index 5d25614..aeed9b8 100644
---
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterResourceModifierActionWorker.java
+++
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterResourceModifierActionWorker.java
@@ -50,6 +50,7 @@ import com.cloud.exception.ResourceAllocationException;
import com.cloud.exception.ResourceUnavailableException;
import com.cloud.host.Host;
import com.cloud.host.HostVO;
+import com.cloud.host.dao.HostDao;
import com.cloud.hypervisor.Hypervisor;
import com.cloud.kubernetes.cluster.KubernetesCluster;
import com.cloud.kubernetes.cluster.KubernetesClusterDetailsVO;
@@ -69,7 +70,6 @@ import com.cloud.network.rules.RulesService;
import com.cloud.network.rules.dao.PortForwardingRulesDao;
import com.cloud.offering.ServiceOffering;
import com.cloud.resource.ResourceManager;
-import com.cloud.template.VirtualMachineTemplate;
import com.cloud.user.Account;
import com.cloud.user.SSHKeyPairVO;
import com.cloud.uservm.UserVm;
@@ -97,6 +97,8 @@ public class KubernetesClusterResourceModifierActionWorker
extends KubernetesClu
@Inject
protected ClusterDetailsDao clusterDetailsDao;
@Inject
+ protected HostDao hostDao;
+ @Inject
protected FirewallRulesDao firewallRulesDao;
@Inject
protected FirewallService firewallService;
@@ -208,6 +210,13 @@ public class KubernetesClusterResourceModifierActionWorker
extends KubernetesClu
for (Map.Entry<String, Pair<HostVO, Integer>> hostEntry :
hosts_with_resevered_capacity.entrySet()) {
Pair<HostVO, Integer> hp = hostEntry.getValue();
HostVO h = hp.first();
+ if
(!h.getHypervisorType().equals(clusterTemplate.getHypervisorType())) {
+ continue;
+ }
+ hostDao.loadHostTags(h);
+ if (!Strings.isNullOrEmpty(offering.getHostTag()) &&
!(h.getHostTags() != null && h.getHostTags().contains(offering.getHostTag()))) {
+ continue;
+ }
int reserved = hp.second();
reserved++;
ClusterVO cluster = clusterDao.findById(h.getClusterId());
@@ -229,7 +238,7 @@ public class KubernetesClusterResourceModifierActionWorker
extends KubernetesClu
}
if (!suitable_host_found) {
if (LOGGER.isInfoEnabled()) {
- LOGGER.info(String.format("Suitable hosts not found in
datacenter ID: %s for node %d", zone.getUuid(), i));
+ LOGGER.info(String.format("Suitable hosts not found in
datacenter ID: %s for node %d, with offering ID: %s and hypervisor: %s",
zone.getUuid(), i, offering.getUuid(),
clusterTemplate.getHypervisorType().toString()));
}
break;
}
@@ -240,8 +249,8 @@ public class KubernetesClusterResourceModifierActionWorker
extends KubernetesClu
}
return new DeployDestination(zone, null, null, null);
}
- String msg = String.format("Cannot find enough capacity for Kubernetes
cluster(requested cpu=%1$s memory=%2$s)",
- cpu_requested * nodesCount, ram_requested * nodesCount);
+ String msg = String.format("Cannot find enough capacity for Kubernetes
cluster(requested cpu=%d memory=%d) with offering ID: %s and hypervisor: %s",
+ cpu_requested * nodesCount, ram_requested * nodesCount,
offering.getUuid(), clusterTemplate.getHypervisorType().toString());
LOGGER.warn(msg);
throw new InsufficientServerCapacityException(msg, DataCenter.class,
zone.getId());
}
@@ -306,7 +315,6 @@ public class KubernetesClusterResourceModifierActionWorker
extends KubernetesClu
UserVm nodeVm = null;
DataCenter zone =
dataCenterDao.findById(kubernetesCluster.getZoneId());
ServiceOffering serviceOffering =
serviceOfferingDao.findById(kubernetesCluster.getServiceOfferingId());
- VirtualMachineTemplate template =
templateDao.findById(kubernetesCluster.getTemplateId());
List<Long> networkIds = new ArrayList<Long>();
networkIds.add(kubernetesCluster.getNetworkId());
Account owner = accountDao.findById(kubernetesCluster.getAccountId());
@@ -319,12 +327,12 @@ public class
KubernetesClusterResourceModifierActionWorker extends KubernetesClu
String hostName =
getKubernetesClusterNodeAvailableName(String.format("%s-node-%s",
kubernetesClusterNodeNamePrefix, nodeInstance));
String k8sNodeConfig = null;
try {
- k8sNodeConfig = getKubernetesNodeConfig(joinIp,
Hypervisor.HypervisorType.VMware.equals(template.getHypervisorType()));
+ k8sNodeConfig = getKubernetesNodeConfig(joinIp,
Hypervisor.HypervisorType.VMware.equals(clusterTemplate.getHypervisorType()));
} catch (IOException e) {
logAndThrow(Level.ERROR, "Failed to read Kubernetes node
configuration file", e);
}
String base64UserData =
Base64.encodeBase64String(k8sNodeConfig.getBytes(StringUtils.getPreferredCharset()));
- nodeVm = userVmService.createAdvancedVirtualMachine(zone,
serviceOffering, template, networkIds, owner,
+ nodeVm = userVmService.createAdvancedVirtualMachine(zone,
serviceOffering, clusterTemplate, networkIds, owner,
hostName, hostName, null, null, null,
null, BaseCmd.HTTPMethod.POST, base64UserData,
kubernetesCluster.getKeyPair(),
null, addrs, null, null, null, customParameterMap, null, null,
null, null);
diff --git
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterStartWorker.java
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterStartWorker.java
index d452563..24690c5 100644
---
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterStartWorker.java
+++
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/cluster/actionworkers/KubernetesClusterStartWorker.java
@@ -60,7 +60,6 @@ import com.cloud.network.Network;
import com.cloud.network.addr.PublicIp;
import com.cloud.network.rules.LoadBalancer;
import com.cloud.offering.ServiceOffering;
-import com.cloud.template.VirtualMachineTemplate;
import com.cloud.user.Account;
import com.cloud.user.SSHKeyPairVO;
import com.cloud.uservm.UserVm;
@@ -172,7 +171,6 @@ public class KubernetesClusterStartWorker extends
KubernetesClusterResourceModif
UserVm masterVm = null;
DataCenter zone =
dataCenterDao.findById(kubernetesCluster.getZoneId());
ServiceOffering serviceOffering =
serviceOfferingDao.findById(kubernetesCluster.getServiceOfferingId());
- VirtualMachineTemplate template =
templateDao.findById(kubernetesCluster.getTemplateId());
List<Long> networkIds = new ArrayList<Long>();
networkIds.add(kubernetesCluster.getNetworkId());
Pair<String, Map<Long, Network.IpAddresses>> ipAddresses =
getKubernetesMasterIpAddresses(zone, network, owner);
@@ -195,12 +193,12 @@ public class KubernetesClusterStartWorker extends
KubernetesClusterResourceModif
boolean haSupported = isKubernetesVersionSupportsHA();
String k8sMasterConfig = null;
try {
- k8sMasterConfig = getKubernetesMasterConfig(masterIp, serverIp,
hostName, haSupported,
Hypervisor.HypervisorType.VMware.equals(template.getHypervisorType()));
+ k8sMasterConfig = getKubernetesMasterConfig(masterIp, serverIp,
hostName, haSupported,
Hypervisor.HypervisorType.VMware.equals(clusterTemplate.getHypervisorType()));
} catch (IOException e) {
logAndThrow(Level.ERROR, "Failed to read Kubernetes master
configuration file", e);
}
String base64UserData =
Base64.encodeBase64String(k8sMasterConfig.getBytes(StringUtils.getPreferredCharset()));
- masterVm = userVmService.createAdvancedVirtualMachine(zone,
serviceOffering, template, networkIds, owner,
+ masterVm = userVmService.createAdvancedVirtualMachine(zone,
serviceOffering, clusterTemplate, networkIds, owner,
hostName, hostName, null, null, null,
null, BaseCmd.HTTPMethod.POST, base64UserData,
kubernetesCluster.getKeyPair(),
requestedIps, addrs, null, null, null, customParameterMap,
null, null, null, null);
@@ -238,7 +236,6 @@ public class KubernetesClusterStartWorker extends
KubernetesClusterResourceModif
UserVm additionalMasterVm = null;
DataCenter zone =
dataCenterDao.findById(kubernetesCluster.getZoneId());
ServiceOffering serviceOffering =
serviceOfferingDao.findById(kubernetesCluster.getServiceOfferingId());
- VirtualMachineTemplate template =
templateDao.findById(kubernetesCluster.getTemplateId());
List<Long> networkIds = new ArrayList<Long>();
networkIds.add(kubernetesCluster.getNetworkId());
Network.IpAddresses addrs = new Network.IpAddresses(null, null);
@@ -250,12 +247,12 @@ public class KubernetesClusterStartWorker extends
KubernetesClusterResourceModif
String hostName =
getKubernetesClusterNodeAvailableName(String.format("%s-master-%d",
kubernetesClusterNodeNamePrefix, additionalMasterNodeInstance + 1));
String k8sMasterConfig = null;
try {
- k8sMasterConfig = getKubernetesAdditionalMasterConfig(joinIp,
Hypervisor.HypervisorType.VMware.equals(template.getHypervisorType()));
+ k8sMasterConfig = getKubernetesAdditionalMasterConfig(joinIp,
Hypervisor.HypervisorType.VMware.equals(clusterTemplate.getHypervisorType()));
} catch (IOException e) {
logAndThrow(Level.ERROR, "Failed to read Kubernetes master
configuration file", e);
}
String base64UserData =
Base64.encodeBase64String(k8sMasterConfig.getBytes(StringUtils.getPreferredCharset()));
- additionalMasterVm = userVmService.createAdvancedVirtualMachine(zone,
serviceOffering, template, networkIds, owner,
+ additionalMasterVm = userVmService.createAdvancedVirtualMachine(zone,
serviceOffering, clusterTemplate, networkIds, owner,
hostName, hostName, null, null, null,
null, BaseCmd.HTTPMethod.POST, base64UserData,
kubernetesCluster.getKeyPair(),
null, addrs, null, null, null, customParameterMap, null, null,
null, null);
diff --git
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/version/KubernetesVersionManagerImpl.java
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/version/KubernetesVersionManagerImpl.java
index 4eefc3f..5f2e42b 100644
---
a/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/version/KubernetesVersionManagerImpl.java
+++
b/plugins/integrations/kubernetes-service/src/main/java/com/cloud/kubernetes/version/KubernetesVersionManagerImpl.java
@@ -52,6 +52,9 @@ import com.cloud.template.VirtualMachineTemplate;
import com.cloud.user.AccountManager;
import com.cloud.utils.component.ComponentContext;
import com.cloud.utils.component.ManagerBase;
+import com.cloud.utils.db.Filter;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.exception.CloudRuntimeException;
import com.google.common.base.Strings;
@@ -246,19 +249,25 @@ public class KubernetesVersionManagerImpl extends
ManagerBase implements Kuberne
}
minimumSemanticVersion = minVersion.getSemanticVersion();
}
- List <KubernetesSupportedVersionVO> versions = new ArrayList<>();
+ Filter searchFilter = new Filter(KubernetesSupportedVersionVO.class,
"id", true, cmd.getStartIndex(), cmd.getPageSizeVal());
+ SearchBuilder<KubernetesSupportedVersionVO> sb =
kubernetesSupportedVersionDao.createSearchBuilder();
+ sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
+ sb.and("keyword", sb.entity().getName(), SearchCriteria.Op.LIKE);
+ SearchCriteria<KubernetesSupportedVersionVO> sc = sb.create();
+ String keyword = cmd.getKeyword();
if (versionId != null) {
- KubernetesSupportedVersionVO version =
kubernetesSupportedVersionDao.findById(versionId);
- if (version != null && (zoneId == null || version.getZoneId() ==
null || version.getZoneId().equals(zoneId))) {
- versions.add(version);
- }
- } else {
- if (zoneId == null) {
- versions = kubernetesSupportedVersionDao.listAll();
- } else {
- versions = kubernetesSupportedVersionDao.listAllInZone(zoneId);
- }
+ sc.setParameters("id", versionId);
+ }
+ if (zoneId != null) {
+ SearchCriteria<KubernetesSupportedVersionVO> scc =
kubernetesSupportedVersionDao.createSearchCriteria();
+ scc.addOr("zoneId", SearchCriteria.Op.EQ, zoneId);
+ scc.addOr("zoneId", SearchCriteria.Op.NULL);
+ sc.addAnd("zoneId", SearchCriteria.Op.SC, scc);
+ }
+ if(keyword != null){
+ sc.setParameters("keyword", "%" + keyword + "%");
}
+ List <KubernetesSupportedVersionVO> versions =
kubernetesSupportedVersionDao.search(sc, searchFilter);
versions = filterKubernetesSupportedVersions(versions,
minimumSemanticVersion);
return createKubernetesSupportedVersionListResponse(versions);
diff --git
a/plugins/integrations/kubernetes-service/src/main/java/org/apache/cloudstack/api/command/user/kubernetes/version/ListKubernetesSupportedVersionsCmd.java
b/plugins/integrations/kubernetes-service/src/main/java/org/apache/cloudstack/api/command/user/kubernetes/version/ListKubernetesSupportedVersionsCmd.java
index efa029a..6d2c285 100644
---
a/plugins/integrations/kubernetes-service/src/main/java/org/apache/cloudstack/api/command/user/kubernetes/version/ListKubernetesSupportedVersionsCmd.java
+++
b/plugins/integrations/kubernetes-service/src/main/java/org/apache/cloudstack/api/command/user/kubernetes/version/ListKubernetesSupportedVersionsCmd.java
@@ -36,7 +36,7 @@ import com.cloud.kubernetes.version.KubernetesVersionService;
import com.google.common.base.Strings;
@APICommand(name = ListKubernetesSupportedVersionsCmd.APINAME,
- description = "Lists container clusters",
+ description = "Lists supported Kubernetes version",
responseObject = KubernetesSupportedVersionResponse.class,
responseView = ResponseObject.ResponseView.Restricted,
authorized = {RoleType.Admin, RoleType.ResourceAdmin,
RoleType.DomainAdmin, RoleType.User})
diff --git
a/plugins/integrations/kubernetes-service/src/test/java/com/cloud/kubernetes/version/KubernetesVersionServiceTest.java
b/plugins/integrations/kubernetes-service/src/test/java/com/cloud/kubernetes/version/KubernetesVersionServiceTest.java
index 6878c4c..59eb121 100644
---
a/plugins/integrations/kubernetes-service/src/test/java/com/cloud/kubernetes/version/KubernetesVersionServiceTest.java
+++
b/plugins/integrations/kubernetes-service/src/test/java/com/cloud/kubernetes/version/KubernetesVersionServiceTest.java
@@ -65,6 +65,9 @@ import com.cloud.user.AccountVO;
import com.cloud.user.User;
import com.cloud.user.UserVO;
import com.cloud.utils.component.ComponentContext;
+import com.cloud.utils.db.Filter;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
import com.cloud.utils.exception.CloudRuntimeException;
@RunWith(PowerMockRunner.class)
@@ -101,6 +104,15 @@ public class KubernetesVersionServiceTest {
overrideDefaultConfigValue(KubernetesClusterService.KubernetesServiceEnabled,
"_defaultValue", "true");
+ final SearchBuilder<KubernetesSupportedVersionVO> versionSearchBuilder
= Mockito.mock(SearchBuilder.class);
+ final SearchCriteria<KubernetesSupportedVersionVO>
versionSearchCriteria = Mockito.mock(SearchCriteria.class);
+
when(kubernetesSupportedVersionDao.createSearchBuilder()).thenReturn(versionSearchBuilder);
+ final KubernetesSupportedVersionVO kubernetesSupportedVersionVO =
Mockito.mock(KubernetesSupportedVersionVO.class);
+
when(versionSearchBuilder.entity()).thenReturn(kubernetesSupportedVersionVO);
+
when(versionSearchBuilder.entity()).thenReturn(kubernetesSupportedVersionVO);
+ when(versionSearchBuilder.create()).thenReturn(versionSearchCriteria);
+
when(kubernetesSupportedVersionDao.createSearchCriteria()).thenReturn(versionSearchCriteria);
+
DataCenterVO zone = Mockito.mock(DataCenterVO.class);
when(zone.getId()).thenReturn(1L);
when(dataCenterDao.findById(Mockito.anyLong())).thenReturn(zone);
@@ -127,9 +139,8 @@ public class KubernetesVersionServiceTest {
KubernetesSupportedVersionVO versionVO =
Mockito.mock(KubernetesSupportedVersionVO.class);
when(versionVO.getSemanticVersion()).thenReturn(KubernetesVersionService.MIN_KUBERNETES_VERSION);
versionVOs.add(versionVO);
- when(kubernetesSupportedVersionDao.listAll()).thenReturn(versionVOs);
-
when(kubernetesSupportedVersionDao.listAllInZone(Mockito.anyLong())).thenReturn(versionVOs);
when(kubernetesSupportedVersionDao.findById(Mockito.anyLong())).thenReturn(versionVO);
+
when(kubernetesSupportedVersionDao.search(Mockito.any(SearchCriteria.class),
Mockito.any(Filter.class))).thenReturn(versionVOs);
kubernetesVersionService.listKubernetesSupportedVersions(cmd);
}