Repository: stratos Updated Branches: refs/heads/stratos-4.1.x a2adec321 -> 894aa4beb
Improve readability in createKubernetesServices method Project: http://git-wip-us.apache.org/repos/asf/stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/46f278ca Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/46f278ca Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/46f278ca Branch: refs/heads/stratos-4.1.x Commit: 46f278cad6ca26c6a9467b907f48dac1c92db0d2 Parents: a2adec3 Author: Akila Perera <[email protected]> Authored: Wed Sep 23 19:52:15 2015 +0530 Committer: Akila Perera <[email protected]> Committed: Wed Sep 23 19:52:15 2015 +0530 ---------------------------------------------------------------------- .../iaases/kubernetes/KubernetesIaas.java | 219 ++++++++++--------- 1 file changed, 110 insertions(+), 109 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/stratos/blob/46f278ca/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 9f42816..a47c61e 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 @@ -517,125 +517,127 @@ public class KubernetesIaas extends Iaas { Collection<ClusterPortMapping> clusterPortMappings = CloudControllerContext.getInstance() .getClusterPortMappings(clusterContext.getApplicationId(), clusterId); - if (clusterPortMappings != null) { - String serviceName = DigestUtils.md5Hex(clusterId); - Collection<KubernetesService> kubernetesServices = - clusterContext.getKubernetesServices(memberContext.getClusterInstanceId()); - - for (ClusterPortMapping clusterPortMapping : clusterPortMappings) { - // Skip if already created - int containerPort = clusterPortMapping.getPort(); - 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 ", - kubernetesCluster.getClusterId(), clusterId, serviceName, containerPort)); - } - continue; - } + if (clusterPortMappings == null) { + log.info("No cluster port mappings found. Stratos will not attempt to create Kubernetes services"); + return; + } - // Find next available service sequence number - long serviceSeqNo = kubernetesClusterContext.getNextServiceSeqNo(); - String serviceId = - KubernetesIaasUtil.fixSpecialCharacters(prepareServiceName(serviceSeqNo)); - while (kubernetesApi.getService(serviceId) != null) { - serviceSeqNo = kubernetesClusterContext.getNextServiceSeqNo(); - serviceId = KubernetesIaasUtil.fixSpecialCharacters(prepareServiceName(serviceSeqNo)); - } + String serviceName = DigestUtils.md5Hex(clusterId); + Collection<KubernetesService> kubernetesServices = + clusterContext.getKubernetesServices(memberContext.getClusterInstanceId()); - if (log.isInfoEnabled()) { - log.info(String.format("Creating kubernetes service: [cluster] %s [service-id] %s [service-name] " + - "%s " + "[protocol] %s [service-port] %d [container-port] %s", clusterId, - serviceId, serviceName, clusterPortMapping.getProtocol(), - clusterPortMapping.getKubernetesServicePort(), containerPort)); - } + for (ClusterPortMapping clusterPortMapping : clusterPortMappings) { + // Skip if already created + int containerPort = clusterPortMapping.getPort(); + KubernetesService existingService = findKubernetesService(kubernetesServices, containerPort); + if ((existingService != null) && serviceExistsInCluster( + existingService.getId(), kubernetesClusterContext, + memberContext, clusterPortMapping.getName())) { + + log.info(String.format("Kubernetes service already exists: [kubernetes-cluster] %s " + + "[cluster] %s [service-name] %s [container-port] %d ", + kubernetesCluster.getClusterId(), clusterId, serviceName, containerPort)); + continue; + } - // Create kubernetes service for port mapping - int servicePort = clusterPortMapping.getKubernetesServicePort(); - String serviceType = clusterPortMapping.getKubernetesPortType(); - String containerPortName = KubernetesIaasUtil.preparePortNameFromPortMapping(clusterPortMapping); - - Map<String, String> serviceLabels = new HashMap<>(); - serviceLabels.put(CloudControllerConstants.APPLICATION_ID_LABEL, - trimLabel(CloudControllerConstants.APPLICATION_ID_LABEL, clusterContext.getApplicationId())); - - serviceLabels.put(CloudControllerConstants.CLUSTER_INSTANCE_ID_LABEL, - trimLabel(CloudControllerConstants.CLUSTER_INSTANCE_ID_LABEL, - memberContext.getClusterInstanceId())); - - serviceLabels.put(CloudControllerConstants.PORT_NAME_LABEL, - trimLabel(CloudControllerConstants.PORT_NAME_LABEL, clusterPortMapping.getName())); - - Map<String, String> serviceAnnotations = new HashMap<>(); - serviceAnnotations - .put(CloudControllerConstants.APPLICATION_ID_LABEL, clusterContext.getApplicationId()); - serviceAnnotations.put(CloudControllerConstants.CLUSTER_ID_LABEL, clusterContext.getClusterId()); - serviceAnnotations.put(CloudControllerConstants.CLUSTER_INSTANCE_ID_LABEL, - memberContext.getClusterInstanceId()); - serviceAnnotations.put(CloudControllerConstants.PORT_NAME_LABEL, clusterPortMapping.getName()); - serviceAnnotations.put(CloudControllerConstants.PROTOCOL_LABEL, clusterPortMapping.getProtocol()); - serviceAnnotations.put(CloudControllerConstants.PORT_TYPE_LABEL, - clusterPortMapping.getKubernetesPortType()); - serviceAnnotations.put(CloudControllerConstants.SERVICE_PORT_LABEL, String.valueOf(clusterPortMapping - .getKubernetesServicePort())); - serviceAnnotations - .put(CloudControllerConstants.PORT_LABEL, String.valueOf(clusterPortMapping.getPort())); - serviceAnnotations.put(CloudControllerConstants.PROXY_PORT_LABEL, - String.valueOf(clusterPortMapping.getProxyPort())); - - kubernetesApi.createService(serviceId, serviceName, serviceLabels, serviceAnnotations, servicePort, - serviceType, containerPortName, containerPort, sessionAffinity); - try { - Thread.sleep(1000); - } - catch (InterruptedException ignore) { - } + // Find next available service sequence number + long serviceSeqNo = kubernetesClusterContext.getNextServiceSeqNo(); + String serviceId = + KubernetesIaasUtil.fixSpecialCharacters(prepareServiceName(serviceSeqNo)); + while (kubernetesApi.getService(serviceId) != null) { + serviceSeqNo = kubernetesClusterContext.getNextServiceSeqNo(); + serviceId = KubernetesIaasUtil.fixSpecialCharacters(prepareServiceName(serviceSeqNo)); + } - Service service = kubernetesApi.getService(serviceId); - if (service == null) { - throw new KubernetesClientException("Kubernetes service was not created: [service] " + serviceId); - } + if (log.isInfoEnabled()) { + log.info(String.format("Creating kubernetes service: [cluster] %s [service-id] %s [service-name] " + + "%s " + "[protocol] %s [service-port] %d [container-port] %s", clusterId, + serviceId, serviceName, clusterPortMapping.getProtocol(), + clusterPortMapping.getKubernetesServicePort(), containerPort)); + } - KubernetesService kubernetesService = new KubernetesService(); - kubernetesService.setId(service.getMetadata().getName()); - kubernetesService.setPortalIP(service.getSpec().getClusterIP()); - // Expose minions public IP addresses as they need to be accessed by external networks - String[] minionPublicIPArray = minionPublicIPList.toArray(new String[minionPublicIPList.size()]); - kubernetesService.setPublicIPs(minionPublicIPArray); - kubernetesService.setProtocol(clusterPortMapping.getProtocol()); - kubernetesService.setPortName(clusterPortMapping.getName()); - - String kubernetesPortType = service.getSpec().getType(); - kubernetesService.setServiceType(kubernetesPortType); - kubernetesService.setKubernetesClusterId(memberContext.getPartition().getKubernetesClusterId()); - - if (kubernetesPortType.equals(KubernetesConstants.NODE_PORT)) { - kubernetesService.setPort(service.getSpec().getPorts().get(0).getNodePort()); - } else { - kubernetesService.setPort(service.getSpec().getPorts().get(0).getPort()); - } + // Create kubernetes service for port mapping + int servicePort = clusterPortMapping.getKubernetesServicePort(); + String serviceType = clusterPortMapping.getKubernetesPortType(); + String containerPortName = KubernetesIaasUtil.preparePortNameFromPortMapping(clusterPortMapping); + + Map<String, String> serviceLabels = new HashMap<>(); + serviceLabels.put(CloudControllerConstants.APPLICATION_ID_LABEL, + trimLabel(CloudControllerConstants.APPLICATION_ID_LABEL, clusterContext.getApplicationId())); + + serviceLabels.put(CloudControllerConstants.CLUSTER_INSTANCE_ID_LABEL, + trimLabel(CloudControllerConstants.CLUSTER_INSTANCE_ID_LABEL, + memberContext.getClusterInstanceId())); + + serviceLabels.put(CloudControllerConstants.PORT_NAME_LABEL, + trimLabel(CloudControllerConstants.PORT_NAME_LABEL, clusterPortMapping.getName())); + + Map<String, String> serviceAnnotations = new HashMap<>(); + serviceAnnotations + .put(CloudControllerConstants.APPLICATION_ID_LABEL, clusterContext.getApplicationId()); + serviceAnnotations.put(CloudControllerConstants.CLUSTER_ID_LABEL, clusterContext.getClusterId()); + serviceAnnotations.put(CloudControllerConstants.CLUSTER_INSTANCE_ID_LABEL, + memberContext.getClusterInstanceId()); + serviceAnnotations.put(CloudControllerConstants.PORT_NAME_LABEL, clusterPortMapping.getName()); + serviceAnnotations.put(CloudControllerConstants.PROTOCOL_LABEL, clusterPortMapping.getProtocol()); + serviceAnnotations.put(CloudControllerConstants.PORT_TYPE_LABEL, + clusterPortMapping.getKubernetesPortType()); + serviceAnnotations.put(CloudControllerConstants.SERVICE_PORT_LABEL, String.valueOf(clusterPortMapping + .getKubernetesServicePort())); + serviceAnnotations + .put(CloudControllerConstants.PORT_LABEL, String.valueOf(clusterPortMapping.getPort())); + serviceAnnotations.put(CloudControllerConstants.PROXY_PORT_LABEL, + String.valueOf(clusterPortMapping.getProxyPort())); + + kubernetesApi.createService(serviceId, serviceName, serviceLabels, serviceAnnotations, servicePort, + serviceType, containerPortName, containerPort, sessionAffinity); + try { + Thread.sleep(1000); + } + catch (InterruptedException ignore) { + } - kubernetesService.setContainerPort(containerPort); + Service service = kubernetesApi.getService(serviceId); + if (service == null) { + throw new KubernetesClientException("Kubernetes service was not created: [service] " + serviceId); + } - clusterContext.addKubernetesService(memberContext.getClusterInstanceId(),kubernetesService); - CloudControllerContext.getInstance().persist(); + KubernetesService kubernetesService = new KubernetesService(); + kubernetesService.setId(service.getMetadata().getName()); + kubernetesService.setPortalIP(service.getSpec().getClusterIP()); + // Expose minions public IP addresses as they need to be accessed by external networks + String[] minionPublicIPArray = minionPublicIPList.toArray(new String[minionPublicIPList.size()]); + kubernetesService.setPublicIPs(minionPublicIPArray); + kubernetesService.setProtocol(clusterPortMapping.getProtocol()); + kubernetesService.setPortName(clusterPortMapping.getName()); + + String kubernetesPortType = service.getSpec().getType(); + kubernetesService.setServiceType(kubernetesPortType); + kubernetesService.setKubernetesClusterId(memberContext.getPartition().getKubernetesClusterId()); + + if (kubernetesPortType.equals(KubernetesConstants.NODE_PORT)) { + kubernetesService.setPort(service.getSpec().getPorts().get(0).getNodePort()); + } else { + kubernetesService.setPort(service.getSpec().getPorts().get(0).getPort()); + } - if (log.isInfoEnabled()) { - log.info(String.format( - "Kubernetes service successfully created: [cluster] %s [service-id] %s [protocol] %s " + - "[node-port] %d [container-port] %s", clusterId, serviceId, - clusterPortMapping.getProtocol(), servicePort, containerPort)); - } + kubernetesService.setContainerPort(containerPort); + + clusterContext.addKubernetesService(memberContext.getClusterInstanceId(), kubernetesService); + CloudControllerContext.getInstance().persist(); + + if (log.isInfoEnabled()) { + log.info(String.format( + "Kubernetes service successfully created: [cluster] %s [service-id] %s [protocol] %s " + + "[node-port] %d [container-port] %s", clusterId, serviceId, + clusterPortMapping.getProtocol(), servicePort, containerPort)); } } } /** * Check a given kubernetes service exists in kubernetes cluster + * * @param serviceId * @param kubernetesClusterContext * @param memberContext @@ -650,7 +652,7 @@ public class KubernetesIaas extends Iaas { KubernetesApiClient kubernetesApi = kubernetesClusterContext.getKubApi(); Service service = kubernetesApi.getService(serviceId); - if(service != null) { + 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); @@ -668,7 +670,7 @@ public class KubernetesIaas extends Iaas { } private String trimLabel(String key, String value) { - if(StringUtils.isNotEmpty(value) && (value.length() > KubernetesConstants.MAX_LABEL_LENGTH)) { + if (StringUtils.isNotEmpty(value) && (value.length() > KubernetesConstants.MAX_LABEL_LENGTH)) { String trimmed = value.substring(0, KubernetesConstants.MAX_LABEL_LENGTH - 2).concat("X"); log.warn(String.format("Kubernetes label trimmed: [key] %s [original] %s [trimmed] %s", key, value, trimmed)); @@ -706,7 +708,7 @@ public class KubernetesIaas extends Iaas { private KubernetesService findKubernetesService(Collection<KubernetesService> kubernetesServices, int containerPort) { - if(kubernetesServices != null) { + if (kubernetesServices != null) { for (KubernetesService kubernetesService : kubernetesServices) { if (kubernetesService.getContainerPort() == containerPort) { return kubernetesService; @@ -726,7 +728,6 @@ public class KubernetesIaas extends Iaas { private void generateKubernetesServicePorts(String applicationId, String clusterId, KubernetesClusterContext kubernetesClusterContext, Cartridge cartridge) throws KubernetesClientException { - synchronized (KubernetesIaas.class) { if (cartridge != null) {
