You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2015/09/20 21:31:49 UTC
stratos git commit: Adding logic to recreate a kubernetes service if
not found in the kubernetes cluster
Repository: stratos
Updated Branches:
refs/heads/stratos-4.1.x fd1c9fbe4 -> 93b3b7394
Adding logic to recreate a kubernetes service if not found in the kubernetes cluster
Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/93b3b739
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/93b3b739
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/93b3b739
Branch: refs/heads/stratos-4.1.x
Commit: 93b3b7394b87bff7f991443a5ecbd542fe3f8432
Parents: fd1c9fb
Author: Imesh Gunaratne <im...@apache.org>
Authored: Mon Sep 21 01:01:38 2015 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Mon Sep 21 01:01:38 2015 +0530
----------------------------------------------------------------------
.../iaases/kubernetes/KubernetesIaas.java | 47 +++++++++++++++++---
1 file changed, 42 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/stratos/blob/93b3b739/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 f985f01..053fc00 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
@@ -524,7 +524,11 @@ public class KubernetesIaas extends Iaas {
for (ClusterPortMapping clusterPortMapping : clusterPortMappings) {
// Skip if already created
int containerPort = clusterPortMapping.getPort();
- if (kubernetesServiceExist(kubernetesServices, containerPort)) {
+ KubernetesService existingService = findKubernetesService(kubernetesServices, containerPort);
+ if ((existingService != null) && serviceExistsInCluster(
+ existingService.getId(), kubernetesClusterContext,
+ memberContext, clusterPortMapping.getName())) {
+
if (log.isDebugEnabled()) {
log.debug(String.format("Kubernetes service already exists: [kubernetes-cluster] %s " +
"[cluster] %s [service-name] %s [container-port] %d ",
@@ -629,6 +633,39 @@ public class KubernetesIaas extends Iaas {
}
}
+ /**
+ * Check a given kubernetes service exists in kubernetes cluster
+ * @param serviceId
+ * @param kubernetesClusterContext
+ * @param memberContext
+ * @param portName
+ * @return
+ * @throws KubernetesClientException
+ */
+ private boolean serviceExistsInCluster(String serviceId, KubernetesClusterContext kubernetesClusterContext,
+ MemberContext memberContext, String portName)
+ throws KubernetesClientException {
+
+ KubernetesApiClient kubernetesApi = kubernetesClusterContext.getKubApi();
+ Service service = kubernetesApi.getService(serviceId);
+
+ if(service != null) {
+ Map<String, String> annotations = service.getMetadata().getAnnotations();
+ String applicationIdLabel = annotations.get(CloudControllerConstants.APPLICATION_ID_LABEL);
+ String clusterInstanceIdLabel = annotations.get(CloudControllerConstants.CLUSTER_INSTANCE_ID_LABEL);
+ String portNameLabel = annotations.get(CloudControllerConstants.PORT_NAME_LABEL);
+
+ return (StringUtils.isNotEmpty(applicationIdLabel) &&
+ StringUtils.isNotEmpty(clusterInstanceIdLabel) &&
+ StringUtils.isNotEmpty(portNameLabel) &&
+ applicationIdLabel.equals(memberContext.getApplicationId()) &&
+ clusterInstanceIdLabel.equals(memberContext.getClusterInstanceId()) &&
+ portNameLabel.equals(portName)
+ );
+ }
+ return false;
+ }
+
private String trimLabel(String key, String value) {
if(StringUtils.isNotEmpty(value) && (value.length() > KubernetesConstants.MAX_LABEL_LENGTH)) {
String trimmed = value.substring(0, KubernetesConstants.MAX_LABEL_LENGTH - 2);
@@ -659,19 +696,19 @@ public class KubernetesIaas extends Iaas {
}
/**
- * Returns true if a kubernetes service exists with the given container port
+ * Find a kubernetes service by container port
*
* @param services
* @param containerPort
* @return
*/
- private boolean kubernetesServiceExist(Collection<KubernetesService> services, int containerPort) {
+ private KubernetesService findKubernetesService(Collection<KubernetesService> services, int containerPort) {
for (KubernetesService service : services) {
if (service.getContainerPort() == containerPort) {
- return true;
+ return service;
}
}
- return false;
+ return null;
}
/**