Implementing Kubernetes replication controller creation and service proxy 
creation - initial version.


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

Branch: refs/heads/docker-integration
Commit: bedaac71648a30ef4212a7146e17f7a0034374bc
Parents: 39d161e
Author: Nirmal Fernando <[email protected]>
Authored: Sat Sep 13 20:30:37 2014 +0530
Committer: Nirmal Fernando <[email protected]>
Committed: Sat Sep 13 20:30:37 2014 +0530

----------------------------------------------------------------------
 .../MemberContextToKubernetesContainer.java     |  57 +++----
 .../MemberContextToReplicationController.java   |  24 ++-
 .../impl/CloudControllerServiceImpl.java        | 165 ++++++++++++++-----
 .../pojo/KubernetesClusterContext.java          |  62 ++++++-
 .../runtime/FasterLookUpDataHolder.java         |   6 +-
 .../controller/util/CloudControllerUtil.java    |   6 +
 6 files changed, 247 insertions(+), 73 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/bedaac71/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToKubernetesContainer.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToKubernetesContainer.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToKubernetesContainer.java
index a38f5d6..9ae4145 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToKubernetesContainer.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToKubernetesContainer.java
@@ -27,6 +27,7 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.pojo.Cartridge;
 import org.apache.stratos.cloud.controller.pojo.ClusterContext;
 import org.apache.stratos.cloud.controller.pojo.KubernetesClusterContext;
+import org.apache.stratos.cloud.controller.pojo.MemberContext;
 import org.apache.stratos.cloud.controller.pojo.PortMapping;
 import org.apache.stratos.cloud.controller.pojo.Property;
 import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
@@ -39,16 +40,19 @@ import org.apache.stratos.kubernetes.client.model.Port;
 import com.google.common.base.Function;
 
 /**
- *     Is responsible for converting a {@link ClusterContext} object to a 
Kubernetes {@link Container}
+ *     Is responsible for converting a {@link MemberContext} object to a 
Kubernetes {@link Container}
  *     Object.
  */
-public class ClusterContextToKubernetesContainer implements 
Function<ClusterContext, Container>{
+public class MemberContextToKubernetesContainer implements 
Function<MemberContext, Container>{
        
-       private static final Log log = 
LogFactory.getLog(ClusterContextToKubernetesContainer.class);
+       private static final Log log = 
LogFactory.getLog(MemberContextToKubernetesContainer.class);
        private FasterLookUpDataHolder dataHolder = 
FasterLookUpDataHolder.getInstance();
 
        @Override
-       public Container apply(ClusterContext clusterContext) {
+       public Container apply(MemberContext memberContext) {
+               String clusterId = memberContext.getClusterId();
+        ClusterContext clusterContext = 
dataHolder.getClusterContext(clusterId);
+        
                Container container = new Container();
                container.setName(clusterContext.getHostName());
 
@@ -64,21 +68,23 @@ public class ClusterContextToKubernetesContainer implements 
Function<ClusterCont
                container.setImage(cartridge.getContainer().getImageName());
 
                container.setPorts(getPorts(clusterContext, cartridge));
+               
+               container.setEnv(getEnvironmentVars(memberContext, 
clusterContext));
 
                return container;
        }
        
        private Port[] getPorts(ClusterContext ctxt, Cartridge cartridge) {
-               String kubernetesClusterId = 
CloudControllerUtil.getProperty(ctxt.getProperties(), 
-                       StratosConstants.KUBERNETES_CLUSTER_ID);
-               KubernetesClusterContext kubClusterContext = 
dataHolder.getKubernetesClusterContext(kubernetesClusterId);
+//             String kubernetesClusterId = 
CloudControllerUtil.getProperty(ctxt.getProperties(), 
+//                     StratosConstants.KUBERNETES_CLUSTER_ID);
+//             KubernetesClusterContext kubClusterContext = 
dataHolder.getKubernetesClusterContext(kubernetesClusterId);
                Port[] ports = new Port[cartridge.getPortMappings().size()];
                List<Port> portList = new ArrayList<Port>();
                
                for (PortMapping portMapping : cartridge.getPortMappings()) {
                        Port p = new Port();
                        
p.setContainerPort(Integer.parseInt(portMapping.getPort()));
-                       
p.setHostPort(kubClusterContext.getAnAvailableHostPort());
+//                     
p.setHostPort(kubClusterContext.getAnAvailableHostPort());
                        p.setProtocol(portMapping.getProtocol());
                        p.setName(p.getProtocol()+p.getContainerPort());
                        portList.add(p);
@@ -87,36 +93,31 @@ public class ClusterContextToKubernetesContainer implements 
Function<ClusterCont
                return portList.toArray(ports);
        }
        
-       private String generateMemberId(String clusterId) {
-        UUID memberId = UUID.randomUUID();
-         return clusterId + memberId.toString();
-    }
-       
-       private EnvironmentVariable[] getEnvironmentVars(ClusterContext ctxt, 
Cartridge cartridge) {
+       private EnvironmentVariable[] getEnvironmentVars(MemberContext 
memberCtxt, 
+                       ClusterContext ctxt) {
                
                String kubernetesClusterId = 
CloudControllerUtil.getProperty(ctxt.getProperties(), 
                        StratosConstants.KUBERNETES_CLUSTER_ID);
                
                List<EnvironmentVariable> envVars = new 
ArrayList<EnvironmentVariable>();
-               
-               addToEnvironment(envVars, StratosConstants.MEMBER_ID, 
generateMemberId(ctxt.getClusterId()));
-               addToEnvironment(envVars, StratosConstants.LB_CLUSTER_ID, 
generateMemberId(ctxt.getClusterId()));
-               addToEnvironment(envVars, StratosConstants.MEMBER_ID, 
generateMemberId(ctxt.getClusterId()));
-               addToEnvironment(envVars, StratosConstants.MEMBER_ID, 
generateMemberId(ctxt.getClusterId()));
-               // have to add memberID to the payload
-        StringBuilder payload = new StringBuilder(ctxt.getPayload());
-        addToPayload(payload, "MEMBER_ID", memberID);
-        addToPayload(payload, "LB_CLUSTER_ID", memberContext.getLbClusterId());
-        addToPayload(payload, "NETWORK_PARTITION_ID", 
memberContext.getNetworkPartitionId());
-        addToPayload(payload, StratosConstants.KUBERNETES_CLUSTER_ID, 
kubernetesClusterId);
-        if(memberContext.getProperties() != null) {
-               org.apache.stratos.cloud.controller.pojo.Properties props1 = 
memberContext.getProperties();
+               //FIXME member id, should it be unique for a container?
+               addToEnvironment(envVars, StratosConstants.MEMBER_ID, 
memberCtxt.getMemberId());
+               addToEnvironment(envVars, StratosConstants.LB_CLUSTER_ID, 
memberCtxt.getLbClusterId());
+               addToEnvironment(envVars, 
StratosConstants.NETWORK_PARTITION_ID, memberCtxt.getNetworkPartitionId());
+               addToEnvironment(envVars, 
StratosConstants.KUBERNETES_CLUSTER_ID, kubernetesClusterId);
+        if(memberCtxt.getProperties() != null) {
+               org.apache.stratos.cloud.controller.pojo.Properties props1 = 
memberCtxt.getProperties();
             if (props1 != null) {
                 for (Property prop : props1.getProperties()) {
-                    addToPayload(payload, prop.getName(), prop.getValue());
+                       addToEnvironment(envVars, prop.getName(), 
prop.getValue());
                 }
             }
         }
+        
+        EnvironmentVariable[] vars = new EnvironmentVariable[envVars.size()];
+        
+        return envVars.toArray(vars);
+        
        }
 
        private void addToEnvironment(List<EnvironmentVariable> envVars,

http://git-wip-us.apache.org/repos/asf/stratos/blob/bedaac71/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToReplicationController.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToReplicationController.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToReplicationController.java
index 36141f2..9bc1cf9 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToReplicationController.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/MemberContextToReplicationController.java
@@ -19,6 +19,10 @@
 package org.apache.stratos.cloud.controller.functions;
 
 import org.apache.stratos.cloud.controller.pojo.ClusterContext;
+import org.apache.stratos.cloud.controller.pojo.MemberContext;
+import org.apache.stratos.cloud.controller.runtime.FasterLookUpDataHolder;
+import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
+import org.apache.stratos.common.constants.StratosConstants;
 import org.apache.stratos.kubernetes.client.model.Container;
 import org.apache.stratos.kubernetes.client.model.Label;
 import org.apache.stratos.kubernetes.client.model.Manifest;
@@ -30,19 +34,27 @@ import org.apache.stratos.kubernetes.client.model.State;
 import com.google.common.base.Function;
 
 /**
- *     Is responsible for converting a {@link ClusterContext} object to a 
Kubernetes {@link ReplicationController}
+ *     Is responsible for converting a {@link MemberContext} object to a 
Kubernetes {@link ReplicationController}
  *     Object.
  */
-public class ClusterContextToReplicationController implements 
Function<ClusterContext, ReplicationController>{
+public class MemberContextToReplicationController implements 
Function<MemberContext, ReplicationController>{
 
+       private FasterLookUpDataHolder dataHolder = 
FasterLookUpDataHolder.getInstance();
+       
        @Override
-       public ReplicationController apply(ClusterContext clusterContext) {
+       public ReplicationController apply(MemberContext memberContext) {
+               
+               String clusterId = memberContext.getClusterId();
+        ClusterContext clusterContext = 
dataHolder.getClusterContext(clusterId);
+        
                ReplicationController contr = new ReplicationController();
                contr.setId(clusterContext.getClusterId());
                contr.setKind("ReplicationController");
                contr.setApiVersion("v1beta1");
                State desiredState = new State();
-               desiredState.setReplicas(3);
+               String minReplicas = 
CloudControllerUtil.getProperty(clusterContext.getProperties(), 
+                               StratosConstants.KUBERNETES_MIN_REPLICAS);
+               desiredState.setReplicas(Integer.parseInt(minReplicas));
                Selector selector = new Selector();
                selector.setName(clusterContext.getClusterId());
                desiredState.setReplicaSelector(selector);
@@ -53,8 +65,8 @@ public class ClusterContextToReplicationController implements 
Function<ClusterCo
                manifest.setVersion("v1beta1");
                manifest.setId(clusterContext.getClusterId());
 
-               ClusterContextToKubernetesContainer containerFunc = new 
ClusterContextToKubernetesContainer();
-               Container container = containerFunc.apply(clusterContext);
+               MemberContextToKubernetesContainer containerFunc = new 
MemberContextToKubernetesContainer();
+               Container container = containerFunc.apply(memberContext);
 
                manifest.setContainers(new Container[] { container });
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/bedaac71/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
index 118daf4..fc1f504 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/impl/CloudControllerServiceImpl.java
@@ -28,7 +28,8 @@ import 
org.apache.stratos.cloud.controller.concurrent.PartitionValidatorCallable
 import org.apache.stratos.cloud.controller.concurrent.ThreadExecutor;
 import org.apache.stratos.cloud.controller.deployment.partition.Partition;
 import org.apache.stratos.cloud.controller.exception.*;
-import 
org.apache.stratos.cloud.controller.functions.ClusterContextToReplicationController;
+import 
org.apache.stratos.cloud.controller.functions.MemberContextToKubernetesService;
+import 
org.apache.stratos.cloud.controller.functions.MemberContextToReplicationController;
 import org.apache.stratos.cloud.controller.interfaces.CloudControllerService;
 import org.apache.stratos.cloud.controller.interfaces.Iaas;
 import org.apache.stratos.cloud.controller.persist.Deserializer;
@@ -43,6 +44,8 @@ import 
org.apache.stratos.cloud.controller.util.CloudControllerUtil;
 import 
org.apache.stratos.cloud.controller.validate.interfaces.PartitionValidator;
 import org.apache.stratos.common.constants.StratosConstants;
 import org.apache.stratos.kubernetes.client.KubernetesApiClient;
+import org.apache.stratos.kubernetes.client.model.ReplicationController;
+import org.apache.stratos.kubernetes.client.model.Service;
 import org.apache.stratos.messaging.domain.topology.Member;
 import org.apache.stratos.messaging.domain.topology.MemberStatus;
 import org.apache.stratos.messaging.util.Constants;
@@ -1290,17 +1293,6 @@ public class CloudControllerServiceImpl implements 
CloudControllerService {
             throw new IllegalArgumentException(msg);
         }
         
-        String kubernetesClusterId = 
CloudControllerUtil.getProperty(ctxt.getProperties(), 
-                       StratosConstants.KUBERNETES_CLUSTER_ID);
-        
-        if (kubernetesClusterId == null) {
-                String msg = "Instance start-up failed. Cannot find '"+
-        StratosConstants.KUBERNETES_CLUSTER_ID+"'. " + 
memberContext.toString();
-             log.error(msg);
-             throw new IllegalArgumentException(msg);
-        }
-        
-        KubernetesClusterContext kubClusterContext = 
dataHolder.getKubernetesClusterContext(kubernetesClusterId);
         
         String cartridgeType = ctxt.getCartridgeType();
 
@@ -1320,35 +1312,117 @@ public class CloudControllerServiceImpl implements 
CloudControllerService {
             // generating the Unique member ID...
             String memberID = generateMemberId(clusterId);
             memberContext.setMemberId(memberID);
-            // have to add memberID to the payload
-            StringBuilder payload = new StringBuilder(ctxt.getPayload());
-            addToPayload(payload, "MEMBER_ID", memberID);
-            addToPayload(payload, "LB_CLUSTER_ID", 
memberContext.getLbClusterId());
-            addToPayload(payload, "NETWORK_PARTITION_ID", 
memberContext.getNetworkPartitionId());
-            addToPayload(payload, StratosConstants.KUBERNETES_CLUSTER_ID, 
kubernetesClusterId);
-            if(memberContext.getProperties() != null) {
-               org.apache.stratos.cloud.controller.pojo.Properties props1 = 
memberContext.getProperties();
-                if (props1 != null) {
-                    for (Property prop : props1.getProperties()) {
-                        addToPayload(payload, prop.getName(), prop.getValue());
-                    }
-                }
-            }
 
-            if (log.isDebugEnabled()) {
-                log.debug("Payload: " + payload.toString());
-            }
-            
+                       
+                       
+                       String kubernetesClusterId = 
CloudControllerUtil.getProperty(ctxt.getProperties(), 
+                                       StratosConstants.KUBERNETES_CLUSTER_ID);
+                       
+                       if (kubernetesClusterId == null) {
+                               String msg = "Instance start-up failed. Cannot 
find '"+
+                                               
StratosConstants.KUBERNETES_CLUSTER_ID+"'. " + ctxt;
+                               log.error(msg);
+                               throw new IllegalArgumentException(msg);
+                       }
+                       
+                       String kubernetesMasterIp = 
CloudControllerUtil.getProperty(memberContext.getProperties(), 
+                                       StratosConstants.KUBERNETES_MASTER_IP);
+                       
+                       if (kubernetesMasterIp == null) {
+                               String msg = "Instance start-up failed. Cannot 
find '"+
+                                               
StratosConstants.KUBERNETES_MASTER_IP+"'. " + memberContext;
+                               log.error(msg);
+                               throw new IllegalArgumentException(msg);
+                       }
+                       
+                       String kubernetesPortRange = 
CloudControllerUtil.getProperty(memberContext.getProperties(), 
+                                       StratosConstants.KUBERNETES_PORT_RANGE);
+                       
+                       if (kubernetesPortRange == null) {
+                               String msg = "Instance start-up failed. Cannot 
find '"+
+                                               
StratosConstants.KUBERNETES_PORT_RANGE+"'. " + memberContext;
+                               log.error(msg);
+                               throw new IllegalArgumentException(msg);
+                       }
+                       
+                       KubernetesClusterContext kubClusterContext = 
getKubernetesClusterContext(kubernetesClusterId, kubernetesMasterIp, 
kubernetesPortRange);
+                       
+                       if (kubClusterContext == null) {
+                               
+                       }
 
+                       KubernetesApiClient client = 
kubClusterContext.getKubernetesApiClient();
+                       
+                       
+                       // first let's create a replication controller.
+                       MemberContextToReplicationController controllerFunction 
= new MemberContextToReplicationController();
+                       ReplicationController controller = 
controllerFunction.apply(memberContext);
+                       
                        if (log.isDebugEnabled()) {
-                               log.debug("Cloud Controller is delegating 
request to start a container for "
-                                               + memberContext + " to 
Kubernetes layer.");
+                               log.debug("Cloud Controller is delegating 
request to start a replication controller "+controller+
+                                               " for "+ memberContext + " to 
Kubernetes layer.");
                        }
-
-            if (log.isDebugEnabled()) {
-                               log.debug("Cloud Controller received a response 
for the request to start "
-                                               + memberContext + " from 
Jclouds layer.");
+                       
+                       client.createReplicationController(controller);
+                       
+                       if (log.isDebugEnabled()) {
+                               log.debug("Cloud Controller successfully starte 
the controller "
+                                               + controller + " via Kubernetes 
layer.");
+                       }
+                       
+                       // secondly let's create a kubernetes service proxy to 
load balance these containers
+                       MemberContextToKubernetesService serviceFunction = new 
MemberContextToKubernetesService();
+                       Service service = serviceFunction.apply(memberContext);
+                       
+                       if (log.isDebugEnabled()) {
+                               log.debug("Cloud Controller is delegating 
request to start a service "+service+
+                                               " for "+ memberContext + " to 
Kubernetes layer.");
                        }
+                       
+                       client.createService(service);
+                       
+                       if (log.isDebugEnabled()) {
+                               log.debug("Cloud Controller successfully starte 
the controller "
+                                               + controller + " via Kubernetes 
layer.");
+                       }
+                       
+//                      try{
+//                                             
memberContext.setPublicIpAddress();
+//                         dataHolder.addMemberContext(memberContext);
+//
+//                         // persist in registry
+//                         persist();
+//
+//
+//                         // trigger topology
+//                         TopologyBuilder.handleMemberSpawned(cartridgeType, 
clusterId, 
+//                                     partition.getId(), ip, publicIp, 
memberContext);
+//                         
+//                         String memberID = memberContext.getMemberId();
+//
+//                         // update the topology with the newly spawned member
+//                         // publish data
+//                         CartridgeInstanceDataPublisher.publish(memberID,
+//                                                             
memberContext.getPartition().getId(),
+//                                                             
memberContext.getNetworkPartitionId(),
+//                                                             
memberContext.getClusterId(),
+//                                                             cartridgeType,
+//                                                             
MemberStatus.Created.toString(),
+//                                                             node);
+//                         if (log.isDebugEnabled()) {
+//                             log.debug("Node details: " + node.toString());
+//                         }
+//                         
+//                         if (log.isDebugEnabled()) {
+//                                             log.debug("IP allocation 
process ended for "+memberContext);
+//                                     }
+//
+//                 } catch (Exception e) {
+//                     String msg = "Error occurred while allocating an ip 
address. " + memberContext.toString();
+//                     log.error(msg, e);
+//                     throw new CloudControllerException(msg, e);
+//                 } 
+
             
             
 //            //Start allocating ip as a new job
@@ -1395,7 +1469,7 @@ public class CloudControllerServiceImpl implements 
CloudControllerService {
 //                             }
 //                     }
 
-            log.info("Instance is successfully starting up. 
"+memberContext.toString());
+            log.info("Kubernetes entities are successfully starting up. 
"+memberContext.toString());
 
             return memberContext;
 
@@ -1405,5 +1479,22 @@ public class CloudControllerServiceImpl implements 
CloudControllerService {
             throw new IllegalStateException(msg, e);
         }
        }
+
+       private KubernetesClusterContext getKubernetesClusterContext(
+                       String kubernetesClusterId, String kubernetesMasterIp,
+                       String kubernetesPortRange) {
+               
+               KubernetesClusterContext origCtxt = 
dataHolder.getKubernetesClusterContext(kubernetesClusterId);
+               KubernetesClusterContext newCtxt = new 
KubernetesClusterContext(kubernetesClusterId, kubernetesPortRange, 
kubernetesMasterIp);
+               
+               if (!origCtxt.equals(newCtxt)) {
+                       // if for some reason master IP etc. have changed
+                       
newCtxt.setAvailableHostPorts(origCtxt.getAvailableHostPorts());
+                       dataHolder.addKubernetesClusterContext(newCtxt);
+                       return newCtxt;
+               } else {
+                       return origCtxt;
+               }
+       }
 }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/bedaac71/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/KubernetesClusterContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/KubernetesClusterContext.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/KubernetesClusterContext.java
index e501e56..c67d61a 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/KubernetesClusterContext.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/pojo/KubernetesClusterContext.java
@@ -40,15 +40,25 @@ public class KubernetesClusterContext implements 
Serializable {
     private String kubernetesClusterId;
     // available host port range, delimited by a hyphen
     private String hostPortRange;
+    // kubernetes master ip
+    private String masterIp;
     // available list of ports
     private List<Integer> availableHostPorts;
     // kubernetes client API instance
     private KubernetesApiClient kubernetesApiClient;
     
-    public KubernetesClusterContext() {
+    public KubernetesClusterContext(String id, String portRange, String 
masterIp) {
        availableHostPorts = new ArrayList<Integer>();
+       this.kubernetesClusterId = id;
+       this.hostPortRange = portRange;
+       this.masterIp = masterIp;
+       kubernetesApiClient = new KubernetesApiClient(getEndpoint(masterIp));
        }
     
+       private String getEndpoint(String ip) {
+               return "http://"+ip+":8080/api/v1beta1/";;
+       }
+
        public String getKubernetesClusterId() {
                return kubernetesClusterId;
        }
@@ -113,5 +123,55 @@ public class KubernetesClusterContext implements 
Serializable {
        public void setKubernetesApiClient(KubernetesApiClient 
kubernetesApiClient) {
                this.kubernetesApiClient = kubernetesApiClient;
        }
+
+       public String getMasterIp() {
+               return masterIp;
+       }
+
+       public void setMasterIp(String masterIp) {
+               this.masterIp = masterIp;
+       }
+
+       @Override
+       public int hashCode() {
+               final int prime = 31;
+               int result = 1;
+               result = prime * result
+                               + ((hostPortRange == null) ? 0 : 
hostPortRange.hashCode());
+               result = prime
+                               * result
+                               + ((kubernetesClusterId == null) ? 0 : 
kubernetesClusterId
+                                               .hashCode());
+               result = prime * result
+                               + ((masterIp == null) ? 0 : 
masterIp.hashCode());
+               return result;
+       }
+
+       @Override
+       public boolean equals(Object obj) {
+               if (this == obj)
+                       return true;
+               if (obj == null)
+                       return false;
+               if (getClass() != obj.getClass())
+                       return false;
+               KubernetesClusterContext other = (KubernetesClusterContext) obj;
+               if (hostPortRange == null) {
+                       if (other.hostPortRange != null)
+                               return false;
+               } else if (!hostPortRange.equals(other.hostPortRange))
+                       return false;
+               if (kubernetesClusterId == null) {
+                       if (other.kubernetesClusterId != null)
+                               return false;
+               } else if 
(!kubernetesClusterId.equals(other.kubernetesClusterId))
+                       return false;
+               if (masterIp == null) {
+                       if (other.masterIp != null)
+                               return false;
+               } else if (!masterIp.equals(other.masterIp))
+                       return false;
+               return true;
+       }
     
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/bedaac71/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java
index 8aae06b..a8c47ce 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/runtime/FasterLookUpDataHolder.java
@@ -399,10 +399,14 @@ public class FasterLookUpDataHolder implements 
Serializable{
        public KubernetesClusterContext getKubernetesClusterContext(String 
kubClusterId) {
                return kubClusterIdToKubClusterContext.get(kubClusterId);
        }
+       
+       public void addKubernetesClusterContext(KubernetesClusterContext ctxt) {
+               
this.kubClusterIdToKubClusterContext.put(ctxt.getKubernetesClusterId(), ctxt);
+       }
 
        public void setKubClusterIdToKubClusterContext(
                        Map<String, KubernetesClusterContext> 
kubClusterIdToKubClusterContext) {
                this.kubClusterIdToKubClusterContext = 
kubClusterIdToKubClusterContext;
        }
-
+       
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/stratos/blob/bedaac71/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java
index 8895d3e..213fedb 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerUtil.java
@@ -303,6 +303,12 @@ public class CloudControllerUtil {
        return null;
     }
        
+       public static String 
getProperty(org.apache.stratos.cloud.controller.pojo.Properties properties, 
String key) {
+               Properties props = toJavaUtilProperties(properties);
+               
+               return getProperty(props, key);
+       }
+       
        /**
         * Converts org.apache.stratos.messaging.util.Properties to 
java.util.Properties
         * @param properties org.apache.stratos.messaging.util.Properties

Reply via email to