Repository: stratos Updated Branches: refs/heads/stratos-4.1.x 395be450e -> 8c1c56808
Fixing kubernetes service creation logic to create services in every kubernetes cluster available Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/8c1c5680 Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/8c1c5680 Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/8c1c5680 Branch: refs/heads/stratos-4.1.x Commit: 8c1c56808043abfac9a633229376532afa41e548 Parents: 395be45 Author: Imesh Gunaratne <[email protected]> Authored: Thu Sep 10 15:52:38 2015 +0530 Committer: Imesh Gunaratne <[email protected]> Committed: Thu Sep 10 15:52:57 2015 +0530 ---------------------------------------------------------------------- .../iaases/kubernetes/KubernetesIaas.java | 45 +++++++++++++------- 1 file changed, 30 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/8c1c5680/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java index eb78404..7c987b6 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesIaas.java @@ -19,10 +19,7 @@ package org.apache.stratos.cloud.controller.iaases.kubernetes; -import io.fabric8.kubernetes.api.model.ContainerPort; -import io.fabric8.kubernetes.api.model.EnvVar; -import io.fabric8.kubernetes.api.model.Pod; -import io.fabric8.kubernetes.api.model.Service; +import io.fabric8.kubernetes.api.model.*; import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang.NotImplementedException; import org.apache.commons.lang.StringUtils; @@ -46,10 +43,7 @@ import org.apache.stratos.kubernetes.client.KubernetesConstants; import org.apache.stratos.kubernetes.client.exceptions.KubernetesClientException; import org.apache.stratos.messaging.domain.topology.KubernetesService; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.List; +import java.util.*; import java.util.concurrent.locks.Lock; /** @@ -500,18 +494,27 @@ public class KubernetesIaas extends Iaas { .getClusterPortMappings(clusterContext.getApplicationId(), clusterId); if (clusterPortMappings != null) { - for (ClusterPortMapping clusterPortMapping : clusterPortMappings) { + String serviceLabel = DigestUtils.md5Hex(clusterId); + if(log.isDebugEnabled()) { + log.debug("Retrieving existing kubernetes services..."); + } + List<Service> services = kubernetesApi.getServices(); + for (ClusterPortMapping clusterPortMapping : clusterPortMappings) { // Skip if already created int containerPort = clusterPortMapping.getPort(); - if (kubernetesServiceExist(kubernetesServices, containerPort)) { + if (kubernetesServiceExist(services, serviceLabel, containerPort)) { + if(log.isDebugEnabled()) { + log.debug(String.format("Kubernetes service already exists: [kubernetes-cluster] %s " + + "[cluster] %s [service-label] %s [container-port] %d ", + kubernetesCluster.getClusterId(), clusterId, serviceLabel, containerPort)); + } continue; } // Find next service sequence no long serviceSeqNo = kubernetesClusterContext.getServiceSeqNo().incrementAndGet(); String serviceId = KubernetesIaasUtil.fixSpecialCharacters("service" + "-" + (serviceSeqNo)); - String serviceLabel = DigestUtils.md5Hex(clusterId); if (log.isInfoEnabled()) { log.info(String.format("Creating kubernetes service: [cluster] %s [service] %s [service-label] %s " + @@ -584,10 +587,22 @@ public class KubernetesIaas extends Iaas { CloudControllerContext.getInstance().persist(); } - private boolean kubernetesServiceExist(List<KubernetesService> kubernetesServices, int port) { - for (KubernetesService kubernetesService : kubernetesServices) { - if (kubernetesService.getContainerPort() == port) { - return true; + /** + * Returns true if a kubernetes service exists with the given container port + * @param services + * @param serviceLabel + * @param containerPort + * @return + */ + private boolean kubernetesServiceExist(List<Service> services, String serviceLabel, int containerPort) { + for(Service service : services) { + Map<String, String> labels = service.getMetadata().getLabels(); + if((labels != null) && (labels.get(KubernetesConstants.LABEL_NAME).equals(serviceLabel))) { + for (ServicePort port : service.getSpec().getPorts()) { + if (port.getPort() == containerPort) { + return true; + } + } } } return false;
