Changing nodeport configurable in kubernetes

Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/86af82ff
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/86af82ff
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/86af82ff

Branch: refs/heads/master
Commit: 86af82ffc7f8da996131e683912e832b300173ae
Parents: 1c29971
Author: Pubudu Gunatilaka <[email protected]>
Authored: Tue Aug 4 13:12:08 2015 +0530
Committer: Imesh Gunaratne <[email protected]>
Committed: Tue Aug 4 14:09:08 2015 +0530

----------------------------------------------------------------------
 .../controller/domain/ClusterPortMapping.java   |   11 +-
 .../cloud/controller/domain/PortMapping.java    |    9 +
 .../iaases/kubernetes/KubernetesIaas.java       |   66 +-
 .../messaging/topology/TopologyBuilder.java     |   43 +-
 .../common/beans/cartridge/PortMappingBean.java |   16 +-
 .../kubernetes/client/KubernetesApiClient.java  |   26 +-
 .../kubernetes/client/KubernetesConstants.java  |    1 +
 .../KubernetesAPIClientInterface.java           |   17 +-
 .../client/live/AbstractLiveTest.java           |    4 +-
 .../live/KubernetesApiClientLiveTest.java       |    3 +-
 .../domain/topology/KubernetesService.java      |    9 +
 .../rest/endpoint/api/StratosApiV41Utils.java   |   26 +
 .../util/converter/ObjectConverter.java         |    4 +-
 samples/cartridges/kubernetes/php.json          |    3 +-
 .../main/resources/CloudControllerService.wsdl  | 1101 +++++++++---------
 15 files changed, 723 insertions(+), 616 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/86af82ff/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ClusterPortMapping.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ClusterPortMapping.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ClusterPortMapping.java
index e816459..ee0ba91 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ClusterPortMapping.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ClusterPortMapping.java
@@ -32,6 +32,7 @@ public class ClusterPortMapping extends PortMapping 
implements Serializable {
     private String clusterId;
     private boolean kubernetes;
     private int kubernetesServicePort;
+    private String kubernetesServiceType;
 
     public ClusterPortMapping() {
     }
@@ -61,6 +62,14 @@ public class ClusterPortMapping extends PortMapping 
implements Serializable {
         kubernetes = true;
     }
 
+    public void setKubernetesServiceType(String kubernetesServiceType) {
+        this.kubernetesServiceType = kubernetesServiceType;
+    }
+
+    public String getKubernetesServiceType() {
+        return kubernetesServiceType;
+    }
+
     public boolean isKubernetes() {
         return kubernetes;
     }
@@ -73,6 +82,6 @@ public class ClusterPortMapping extends PortMapping 
implements Serializable {
 
     public String toString() {
         return "[application-id] " + getApplicationId() + " [cluster-id] " + 
getClusterId() + ", " +
-                super.toString() + " [kubernetes-service-port] "+ 
getKubernetesServicePort();
+                super.toString() + " [kubernetes-service-port] " + 
getKubernetesServicePort();
     }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/86af82ff/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/PortMapping.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/PortMapping.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/PortMapping.java
index b33eb97..5e2e35e 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/PortMapping.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/PortMapping.java
@@ -28,6 +28,15 @@ public class PortMapping implements Serializable {
     private String protocol;
     private int port;
     private int proxyPort;
+    private String kubernetesPortType;
+
+    public String getKubernetesPortType() {
+        return kubernetesPortType;
+    }
+
+    public void setKubernetesPortType(String kubernetesPortType) {
+        this.kubernetesPortType = kubernetesPortType;
+    }
 
     public PortMapping() {
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/86af82ff/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 6fdaaf4..5904346 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
@@ -520,12 +520,13 @@ public class KubernetesIaas extends Iaas {
                 }
 
                 // Create kubernetes service for port mapping
-                int nodePort = clusterPortMapping.getKubernetesServicePort();
+                int servicePort = 
clusterPortMapping.getKubernetesServicePort();
+                String serviceType = 
clusterPortMapping.getKubernetesServiceType();
                 String containerPortName = 
KubernetesIaasUtil.preparePortNameFromPortMapping(clusterPortMapping);
 
                 try {
                     // Services need to use minions private IP addresses for 
creating iptable rules
-                    kubernetesApi.createService(serviceId, serviceLabel, 
nodePort, containerPortName,
+                    kubernetesApi.createService(serviceId, serviceLabel, 
servicePort, serviceType, containerPortName,
                             containerPort, sessionAffinity);
                 } finally {
                     // Persist kubernetes service sequence no
@@ -546,14 +547,23 @@ public class KubernetesIaas extends Iaas {
                 String[] minionPublicIPArray = minionPublicIPList.toArray(new 
String[minionPublicIPList.size()]);
                 kubernetesService.setPublicIPs(minionPublicIPArray);
                 
kubernetesService.setProtocol(clusterPortMapping.getProtocol());
-                
kubernetesService.setPort(service.getSpec().getPorts().get(0).getNodePort());
+
+                String kubernetesServiceType = service.getSpec().getType();
+                kubernetesService.setServiceType(kubernetesServiceType);
+
+                if 
(kubernetesServiceType.equals(KubernetesConstants.NODE_PORT)) {
+                    
kubernetesService.setPort(service.getSpec().getPorts().get(0).getNodePort());
+                } else {
+                    
kubernetesService.setPort(service.getSpec().getPorts().get(0).getPort());
+                }
+
                 kubernetesService.setContainerPort(containerPort);
                 kubernetesServices.add(kubernetesService);
 
                 if (log.isInfoEnabled()) {
                     log.info(String.format("Kubernetes service successfully 
created: [cluster] %s [service] %s " +
                                     "[protocol] %s [node-port] %d 
[container-port] %s", clusterId,
-                            serviceId, clusterPortMapping.getProtocol(), 
nodePort, containerPort));
+                            serviceId, clusterPortMapping.getProtocol(), 
servicePort, containerPort));
                 }
             }
         }
@@ -589,35 +599,48 @@ public class KubernetesIaas extends Iaas {
                 StringBuilder portMappingStrBuilder = new StringBuilder();
                 for (PortMapping portMapping : 
Arrays.asList(cartridge.getPortMappings())) {
 
-                    int nextServicePort = 
kubernetesClusterContext.getNextServicePort();
-                    if (nextServicePort == -1) {
-                        throw new RuntimeException(String.format("Could not 
generate service port: [cluster-id] %s " +
-                                "[port] %d", clusterId, 
portMapping.getPort()));
-                    }
-
                     Collection<ClusterPortMapping> clusterPortMappings =
                             
CloudControllerContext.getInstance().getClusterPortMappings(applicationId, 
clusterId);
-                    if(clusterPortMappings == null) {
+                    if (clusterPortMappings == null) {
                         throw new 
CloudControllerException(String.format("Cluster port mappings not found: " +
                                 "[application-id] %s [cluster-id] %s", 
applicationId, clusterId));
                     }
 
                     ClusterPortMapping clusterPortMapping = 
findClusterPortMapping(clusterPortMappings, portMapping);
-                    if(clusterPortMappings == null) {
+                    if (clusterPortMappings == null) {
                         throw new 
CloudControllerException(String.format("Cluster port mapping not found: " +
-                                "[application-id] %s [cluster-id] %s 
[transport] %s", applicationId, clusterId,
+                                        "[application-id] %s [cluster-id] %s 
[transport] %s", applicationId, clusterId,
                                 portMapping.getName()));
                     }
 
-                    
clusterPortMapping.setKubernetesServicePort(nextServicePort);
+                    if (clusterPortMapping.getKubernetesServiceType() == null) 
{
+                        throw new 
CloudControllerException(String.format("Kubernetes service type not " +
+                                        "found [application-id] %s 
[cluster-id] %s [cartridge] %s", applicationId,
+                                clusterId, cartridge));
+                    }
+
+                    String serviceType = portMapping.getKubernetesPortType();
+                    clusterPortMapping.setKubernetesServiceType(serviceType);
+
+                    if (serviceType.equals(KubernetesConstants.NODE_PORT)) {
+                        int nextServicePort = 
kubernetesClusterContext.getNextServicePort();
+                        if (nextServicePort == -1) {
+                            throw new RuntimeException(String.format("Could 
not generate service port: [cluster-id] %s " +
+                                    "[port] %d", clusterId, 
portMapping.getPort()));
+                        }
+                        
clusterPortMapping.setKubernetesServicePort(nextServicePort);
+                    } else {
+                        
clusterPortMapping.setKubernetesServicePort(portMapping.getPort());
+                    }
 
                     // Add port mappings to payload
                     if (portMappingStrBuilder.toString().length() > 0) {
                         portMappingStrBuilder.append(";");
                     }
-                    
portMappingStrBuilder.append(String.format("NAME:%s|PROTOCOL:%s|PORT:%d|PROXY_PORT:%d",
+                    
portMappingStrBuilder.append(String.format("NAME:%s|PROTOCOL:%s|PORT:%d|PROXY_PORT:%d|TYPE:%s",
                             clusterPortMapping.getName(), 
clusterPortMapping.getProtocol(),
-                            clusterPortMapping.getKubernetesServicePort(), 
clusterPortMapping.getProxyPort()));
+                            clusterPortMapping.getKubernetesServicePort(), 
clusterPortMapping.getProxyPort(),
+                            clusterPortMapping.getKubernetesServiceType()));
 
                     if (log.isInfoEnabled()) {
                         log.info(String.format("Kubernetes service port 
generated: [application-id] %s " +
@@ -644,8 +667,8 @@ public class KubernetesIaas extends Iaas {
      * @return
      */
     private ClusterPortMapping 
findClusterPortMapping(Collection<ClusterPortMapping> clusterPortMappings, 
PortMapping portMapping) {
-        for(ClusterPortMapping clusterPortMapping : clusterPortMappings) {
-            if(clusterPortMapping.getName().equals(portMapping.getName())) {
+        for (ClusterPortMapping clusterPortMapping : clusterPortMappings) {
+            if (clusterPortMapping.getName().equals(portMapping.getName())) {
                 return clusterPortMapping;
             }
         }
@@ -869,6 +892,7 @@ public class KubernetesIaas extends Iaas {
 
     /**
      * Remove kubernetes services if available for application cluster.
+     *
      * @param applicationId
      * @param clusterId
      */
@@ -876,12 +900,12 @@ public class KubernetesIaas extends Iaas {
 
         ClusterContext clusterContext =
                 
CloudControllerContext.getInstance().getClusterContext(clusterId);
-        if(clusterContext != null) {
+        if (clusterContext != null) {
             String kubernetesClusterId = 
clusterContext.getKubernetesClusterId();
-            
if(org.apache.commons.lang3.StringUtils.isNotBlank(kubernetesClusterId)) {
+            if 
(org.apache.commons.lang3.StringUtils.isNotBlank(kubernetesClusterId)) {
                 KubernetesClusterContext kubernetesClusterContext =
                         
CloudControllerContext.getInstance().getKubernetesClusterContext(kubernetesClusterId);
-                if(kubernetesClusterContext != null) {
+                if (kubernetesClusterContext != null) {
                     KubernetesApiClient kubernetesApiClient = 
kubernetesClusterContext.getKubApi();
                     for (KubernetesService kubernetesService : 
clusterContext.getKubernetesServices()) {
                         log.info(String.format("Deleting kubernetes service: 
[application-id] %s " +

http://git-wip-us.apache.org/repos/asf/stratos/blob/86af82ff/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
index b04204e..a11c5bf 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/messaging/topology/TopologyBuilder.java
@@ -31,6 +31,7 @@ import 
org.apache.stratos.cloud.controller.messaging.publisher.TopologyEventPubl
 import 
org.apache.stratos.cloud.controller.statistics.publisher.BAMUsageDataPublisher;
 import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
 import org.apache.stratos.common.Property;
+import org.apache.stratos.kubernetes.client.KubernetesConstants;
 import org.apache.stratos.messaging.domain.application.ClusterDataHolder;
 import org.apache.stratos.messaging.domain.instance.ClusterInstance;
 import org.apache.stratos.messaging.domain.topology.*;
@@ -171,17 +172,20 @@ public class TopologyBuilder {
         }
 
         log.debug("Creating cluster port mappings: [appication-id] " + appId);
-        for(Cluster cluster : appClusters) {
+        for (Cluster cluster : appClusters) {
             String cartridgeType = cluster.getServiceName();
             Cartridge cartridge = 
CloudControllerContext.getInstance().getCartridge(cartridgeType);
-            if(cartridge == null) {
+            if (cartridge == null) {
                 throw new CloudControllerException("Cartridge not found: 
[cartridge-type] " + cartridgeType);
             }
 
-            for(PortMapping portMapping : cartridge.getPortMappings()) {
+            for (PortMapping portMapping : cartridge.getPortMappings()) {
                 ClusterPortMapping clusterPortMapping = new 
ClusterPortMapping(appId,
                         cluster.getClusterId(), portMapping.getName(), 
portMapping.getProtocol(), portMapping.getPort(),
                         portMapping.getProxyPort());
+                if (portMapping.getKubernetesPortType() != null) {
+                    
clusterPortMapping.setKubernetesServiceType(portMapping.getKubernetesPortType());
+                }
                 
CloudControllerContext.getInstance().addClusterPortMapping(clusterPortMapping);
                 log.debug("Cluster port mapping created: " + 
clusterPortMapping.toString());
             }
@@ -848,20 +852,23 @@ public class TopologyBuilder {
                 try {
                     // Generate access URLs for kubernetes services
                     for (KubernetesService kubernetesService : 
kubernetesServices) {
-                        // Public IP = Kubernetes minion public IP
-                        String[] publicIPs = kubernetesService.getPublicIPs();
-                        if ((publicIPs != null) && (publicIPs.length > 0)) {
-                            for (String publicIP : publicIPs) {
-                                // There can be a String array with null values
-                                if (publicIP != null) {
-                                    // Using type URI since only http, https, 
ftp, file, jar protocols are supported in URL
-                                    URI accessURL = new 
URI(kubernetesService.getProtocol(), null, publicIP,
-                                            kubernetesService.getPort(), null, 
null, null);
-                                    cluster.addAccessUrl(accessURL.toString());
-                                    
clusterInstanceActivatedEvent.addAccessUrl(accessURL.toString());
-                                } else {
-                                    log.error(String.format("Could not create 
access URL for [Kubernetes-service] %s , " +
-                                            "since Public IP is not 
available", kubernetesService.getId()));
+
+                        if 
(kubernetesService.getServiceType().equals(KubernetesConstants.NODE_PORT)) {
+                            // Public IP = Kubernetes minion public IP
+                            String[] publicIPs = 
kubernetesService.getPublicIPs();
+                            if ((publicIPs != null) && (publicIPs.length > 0)) 
{
+                                for (String publicIP : publicIPs) {
+                                    // There can be a String array with null 
values
+                                    if (publicIP != null) {
+                                        // Using type URI since only http, 
https, ftp, file, jar protocols are supported in URL
+                                        URI accessURL = new 
URI(kubernetesService.getProtocol(), null, publicIP,
+                                                kubernetesService.getPort(), 
null, null, null);
+                                        
cluster.addAccessUrl(accessURL.toString());
+                                        
clusterInstanceActivatedEvent.addAccessUrl(accessURL.toString());
+                                    } else {
+                                        log.error(String.format("Could not 
create access URL for [Kubernetes-service] %s , " +
+                                                "since Public IP is not 
available", kubernetesService.getId()));
+                                    }
                                 }
                             }
                         }
@@ -1050,7 +1057,7 @@ public class TopologyBuilder {
                 // Remove kubernetes services if available
                 ClusterContext clusterContext =
                         
CloudControllerContext.getInstance().getClusterContext(event.getClusterId());
-                
if(StringUtils.isNotBlank(clusterContext.getKubernetesClusterId())) {
+                if 
(StringUtils.isNotBlank(clusterContext.getKubernetesClusterId())) {
                     KubernetesIaas.removeKubernetesServices(event.getAppId(), 
event.getClusterId());
                 }
             } else {

http://git-wip-us.apache.org/repos/asf/stratos/blob/86af82ff/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/cartridge/PortMappingBean.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/cartridge/PortMappingBean.java
 
b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/cartridge/PortMappingBean.java
index b0db909..0bc919e 100644
--- 
a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/cartridge/PortMappingBean.java
+++ 
b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/cartridge/PortMappingBean.java
@@ -28,6 +28,15 @@ public class PortMappingBean {
     private String protocol;
     private int port;
     private int proxyPort;
+    private String kubernetesPortType;
+
+    public String getKubernetesPortType() {
+        return kubernetesPortType;
+    }
+
+    public void setKubernetesPortType(String kubernetesPortType) {
+        this.kubernetesPortType = kubernetesPortType;
+    }
 
     public String getName() {
         return name;
@@ -63,8 +72,9 @@ public class PortMappingBean {
 
     public String toString() {
         return " [ Name: " + getName() + ", " +
-                  "Protocol: " + getProtocol() + ", " +
-                  "Port: " + getPort() + ", " +
-                  "Proxy port: " + getProxyPort() + "] ";
+                "Protocol: " + getProtocol() + ", " +
+                "Port: " + getPort() + ", " +
+                "Proxy port: " + getProxyPort() + ", " +
+                "Type: " + getKubernetesPortType() + "] ";
     }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/86af82ff/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
 
b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
index f176cd9..cfdaf77 100644
--- 
a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
+++ 
b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
@@ -155,22 +155,23 @@ public class KubernetesApiClient implements 
KubernetesAPIClientInterface {
      *
      * @param serviceId         Service id
      * @param serviceLabel      Service name to be used by the label name
-     * @param nodePort          Port to be exposed by the kubernetes node
+     * @param servicePort       Port to be exposed by the kubernetes node
      * @param containerPortName Container port name defined in the port label
      * @param containerPort     Container port
      * @param sessionAffinity   Session affinity configuration
+     * @param serviceType       Service type
      * @throws KubernetesClientException
      */
     @Override
-    public void createService(String serviceId, String serviceLabel, int 
nodePort,
+    public void createService(String serviceId, String serviceLabel, int 
servicePort, String serviceType,
                               String containerPortName, int containerPort, 
String sessionAffinity)
             throws KubernetesClientException {
 
         try {
             if (log.isDebugEnabled()) {
-                log.debug(String.format("Creating kubernetes service: 
[service-id] %s [service-name] %s [service-port] %d " +
-                                "[container-port-name] %s", serviceId, 
serviceLabel, nodePort,
-                        containerPortName));
+                log.debug(String.format("Creating kubernetes service: 
[service-id] %s [service-name] %s [service-port] " +
+                                "%d [container-port-name] %s [service-type] 
%s", serviceId, serviceLabel, servicePort,
+                        containerPortName, serviceType));
             }
 
             // Create service definition
@@ -183,7 +184,12 @@ public class KubernetesApiClient implements 
KubernetesAPIClientInterface {
 
             service.getMetadata().setName(serviceId);
             service.getSpec().setSessionAffinity(sessionAffinity);
-            service.getSpec().setType(KubernetesConstants.NODE_PORT);
+
+            if (serviceType.equals(KubernetesConstants.NODE_PORT)) {
+                service.getSpec().setType(KubernetesConstants.NODE_PORT);
+            } else {
+                service.getSpec().setType(KubernetesConstants.CLUSTER_IP);
+            }
 
             // Set port
             List<ServicePort> ports = new ArrayList<ServicePort>();
@@ -191,7 +197,9 @@ public class KubernetesApiClient implements 
KubernetesAPIClientInterface {
             port.setName(containerPortName);
             port.setPort(containerPort);
             port.setTargetPort(new IntOrString(containerPort));
-            port.setNodePort(nodePort);
+            if (serviceType.equals(KubernetesConstants.NODE_PORT)) {
+                port.setNodePort(servicePort);
+            }
             ports.add(port);
             service.getSpec().setPorts(ports);
 
@@ -211,12 +219,12 @@ public class KubernetesApiClient implements 
KubernetesAPIClientInterface {
             if (log.isDebugEnabled()) {
                 log.debug(String.format("Kubernetes service created 
successfully: [service-id] %s [service-name] %s " +
                                 "[node-port] %d [container-port-name] %s 
[container-port] %d", serviceId, serviceLabel,
-                        nodePort, containerPortName, containerPort));
+                        servicePort, containerPortName, containerPort));
             }
         } catch (Exception e) {
             String message = String.format("Could not create kubernetes 
service: [service-id] %s [service-name] %s " +
                             "[node-port] %d [container-port-name] %s 
[container-port] %d", serviceId, serviceLabel,
-                    nodePort, containerPortName, containerPort);
+                    servicePort, containerPortName, containerPort);
             log.error(message, e);
             throw new KubernetesClientException(message, e);
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/86af82ff/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesConstants.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesConstants.java
 
b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesConstants.java
index 9c8fc7a..d4dd02c 100644
--- 
a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesConstants.java
+++ 
b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesConstants.java
@@ -33,4 +33,5 @@ public class KubernetesConstants {
     public static final String RESOURCE_CPU = "cpu";
     public static final String RESOURCE_MEMORY = "memory";
     public static final String NODE_PORT = "NodePort";
+    public static final String CLUSTER_IP = "ClusterIP";
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/86af82ff/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java
 
b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java
index 6741d6b..ceeca1c 100644
--- 
a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java
+++ 
b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java
@@ -33,12 +33,12 @@ public interface KubernetesAPIClientInterface {
     /**
      * Create pod.
      *
-     * @param podId id of the pod
-     * @param podLabel pod label
-     * @param dockerImage docker image name
-     * @param cpu number of cpu cores
-     * @param memory memory allocation in mega bytes
-     * @param ports ports to be opened
+     * @param podId                id of the pod
+     * @param podLabel             pod label
+     * @param dockerImage          docker image name
+     * @param cpu                  number of cpu cores
+     * @param memory               memory allocation in mega bytes
+     * @param ports                ports to be opened
      * @param environmentVariables environment variables
      * @throws KubernetesClientException
      */
@@ -76,13 +76,14 @@ public interface KubernetesAPIClientInterface {
      *
      * @param serviceId
      * @param serviceLabel
-     * @param nodePort
+     * @param servicePort
+     * @param serviceType
      * @param containerPortName
      * @param containerPort
      * @param sessionAffinity
      * @throws KubernetesClientException
      */
-    public void createService(String serviceId, String serviceLabel, int 
nodePort,
+    public void createService(String serviceId, String serviceLabel, int 
servicePort, String serviceType,
                               String containerPortName, int containerPort, 
String sessionAffinity)
             throws KubernetesClientException;
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/86af82ff/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/AbstractLiveTest.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/AbstractLiveTest.java
 
b/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/AbstractLiveTest.java
index 293723c..0ee580d 100644
--- 
a/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/AbstractLiveTest.java
+++ 
b/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/AbstractLiveTest.java
@@ -196,10 +196,10 @@ public class AbstractLiveTest extends TestCase {
         }
     }
 
-    protected void createService(String serviceId, String serviceName, int 
nodePort, String containerPortName,
+    protected void createService(String serviceId, String serviceName, int 
nodePort, String serviceType, String containerPortName,
                                  int containerPort, List<String> publicIPs) 
throws KubernetesClientException, InterruptedException, IOException {
         log.info("Creating service...");
-        client.createService(serviceId, serviceName, nodePort, 
containerPortName, containerPort,
+        client.createService(serviceId, serviceName, nodePort, serviceType, 
containerPortName, containerPort,
                 KubernetesConstants.SESSION_AFFINITY_CLIENT_IP);
         serviceIdList.add(serviceId);
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/86af82ff/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java
 
b/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java
index 64c2f69..79c32a7 100644
--- 
a/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java
+++ 
b/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java
@@ -71,8 +71,9 @@ public class KubernetesApiClientLiveTest extends 
AbstractLiveTest {
         String serviceId = "tomcat-domain-1";
         String serviceName = "stratos-test-pod";
         String containerPortName = "http-1";
+        String serviceType = "NodePort";
 
-        createService(serviceId, serviceName, SERVICE_PORT, containerPortName, 
containerPort, minionPublicIPs);
+        createService(serviceId, serviceName, SERVICE_PORT, serviceType, 
containerPortName, containerPort, minionPublicIPs);
 
         createPod("stratos-test-pod-3", serviceName, containerPortName, 1, 
512);
         createPod("stratos-test-pod-4", serviceName, containerPortName, 2, 
512);

http://git-wip-us.apache.org/repos/asf/stratos/blob/86af82ff/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/KubernetesService.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/KubernetesService.java
 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/KubernetesService.java
index fc02179..9cee9d7 100644
--- 
a/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/KubernetesService.java
+++ 
b/components/org.apache.stratos.messaging/src/main/java/org/apache/stratos/messaging/domain/topology/KubernetesService.java
@@ -34,6 +34,15 @@ public class KubernetesService implements Serializable {
     private String protocol;
     private int port;
     private int containerPort;
+    private String serviceType;
+
+    public String getServiceType() {
+        return serviceType;
+    }
+
+    public void setServiceType(String serviceType) {
+        this.serviceType = serviceType;
+    }
 
     public String getId() {
         return id;

http://git-wip-us.apache.org/repos/asf/stratos/blob/86af82ff/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
index fae0f5e..fdf9aa6 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
@@ -104,6 +104,9 @@ public class StratosApiV41Utils {
     public static final String APPLICATION_STATUS_DEPLOYED = "Deployed";
     public static final String APPLICATION_STATUS_CREATED = "Created";
     public static final String APPLICATION_STATUS_UNDEPLOYING = "Undeploying";
+    public static final String KUBERNETES_SERVICE_TYPE_NODEPORT = "NodePort";
+    public static final String KUBERNETES_SERVICE_TYPE_CLUSTERIP = "ClusterIP";
+    public static final String KUBERNETES_IAAS_PROVIDER = "kubernetes";
 
     private static final Log log = LogFactory.getLog(StratosApiV41Utils.class);
 
@@ -127,6 +130,14 @@ public class StratosApiV41Utils {
                         cartridgeBean.getType()));
             }
 
+            boolean isKubernetesIaasProviderAvailable = false;
+
+            for (IaasProviderBean providers : iaasProviders) {
+                if (providers.getType().equals(KUBERNETES_IAAS_PROVIDER)) {
+                    isKubernetesIaasProviderAvailable = true;
+                }
+            }
+
             for (PortMappingBean portMapping : cartridgeBean.getPortMapping()) 
{
                 if (StringUtils.isBlank(portMapping.getName())) {
                     portMapping.setName(portMapping.getProtocol() + "-" + 
portMapping.getPort());
@@ -136,6 +147,21 @@ public class StratosApiV41Utils {
                                 cartridgeBean.getType(), 
portMapping.getName()));
                     }
                 }
+
+                String type = portMapping.getKubernetesPortType();
+
+                if (isKubernetesIaasProviderAvailable) {
+                    if (type == null) {
+                        throw new RestAPIException((String.format("Type is not 
found in portmapping: %s - Possible " +
+                                        "values - %s and %s", 
portMapping.getName(), KUBERNETES_SERVICE_TYPE_NODEPORT,
+                                KUBERNETES_SERVICE_TYPE_CLUSTERIP)));
+                    } else if (!type.equals(KUBERNETES_SERVICE_TYPE_NODEPORT) 
&& !type.equals(KUBERNETES_SERVICE_TYPE_CLUSTERIP)) {
+                        throw new RestAPIException((String.format("Type is not 
found in portmapping: %s - Possible " +
+                                        "values - %s and %s", 
portMapping.getName(), KUBERNETES_SERVICE_TYPE_NODEPORT,
+                                KUBERNETES_SERVICE_TYPE_CLUSTERIP)));
+                    }
+                }
+
             }
 
             Cartridge cartridgeConfig = createCartridgeConfig(cartridgeBean);

http://git-wip-us.apache.org/repos/asf/stratos/blob/86af82ff/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
index c452de8..798882e 100644
--- 
a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
+++ 
b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/util/converter/ObjectConverter.java
@@ -131,6 +131,7 @@ public class ObjectConverter {
             portMapping.setProtocol(portMappingBeanArray[i].getProtocol());
             portMapping.setPort(portMappingBeanArray[i].getPort());
             portMapping.setProxyPort(portMappingBeanArray[i].getProxyPort());
+            
portMapping.setKubernetesPortType(portMappingBeanArray[i].getKubernetesPortType());
             portMappingArray[i] = portMapping;
         }
 
@@ -151,6 +152,7 @@ public class ObjectConverter {
             portMappingBean.setProtocol(portMapping.getProtocol());
             portMappingBean.setPort(portMapping.getPort());
             portMappingBean.setProxyPort(portMapping.getProxyPort());
+            
portMappingBean.setKubernetesPortType(portMapping.getKubernetesPortType());
             portMappingBeans.add(portMappingBean);
         }
         return portMappingBeans;
@@ -1387,7 +1389,7 @@ public class ObjectConverter {
         
infoContext.setDeploymentPolicy(subscribableInfo.getDeploymentPolicy());
         infoContext.setMaxMembers(subscribableInfo.getMaxMembers());
         infoContext.setMinMembers(subscribableInfo.getMinMembers());
-        infoContext.setLvsVirtualIP(subscribableInfo.getLvsVirtualIP());
+           infoContext.setLvsVirtualIP(subscribableInfo.getLvsVirtualIP());
 
         if (subscribableInfo.getArtifactRepository() != null) {
             ArtifactRepositoryBean artifactRepository = 
subscribableInfo.getArtifactRepository();

http://git-wip-us.apache.org/repos/asf/stratos/blob/86af82ff/samples/cartridges/kubernetes/php.json
----------------------------------------------------------------------
diff --git a/samples/cartridges/kubernetes/php.json 
b/samples/cartridges/kubernetes/php.json
index 85adc13..cdb47ab 100755
--- a/samples/cartridges/kubernetes/php.json
+++ b/samples/cartridges/kubernetes/php.json
@@ -13,7 +13,8 @@
             "name": "http-80",
             "protocol": "http",
             "port": "80",
-            "proxyPort": "8281"
+            "proxyPort": "8281",
+            "kubernetesPortType":"NodePort"
         }
     ],
     "deployment": {

Reply via email to