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 2014/12/22 04:18:54 UTC

[5/6] stratos git commit: Renaming kubernetes group to kubernetes cluster and moving kubernetes domain classes to cloud controller

http://git-wip-us.apache.org/repos/asf/stratos/blob/78e8011e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java
index 89e8bf8..01bd479 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java
@@ -18,19 +18,18 @@
  */
 package org.apache.stratos.cloud.controller.context;
 
-import org.apache.axis2.clustering.ClusteringAgent;
 import org.apache.axis2.engine.AxisConfiguration;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.cloud.controller.domain.kubernetes.KubernetesClusterContext;
 import org.apache.stratos.common.clustering.DistributedObjectProvider;
-import org.apache.stratos.common.kubernetes.KubernetesGroup;
-import org.apache.stratos.common.kubernetes.KubernetesHost;
-import org.apache.stratos.common.kubernetes.KubernetesMaster;
+import org.apache.stratos.cloud.controller.domain.kubernetes.KubernetesCluster;
+import org.apache.stratos.cloud.controller.domain.kubernetes.KubernetesHost;
+import org.apache.stratos.cloud.controller.domain.kubernetes.KubernetesMaster;
 import org.apache.stratos.cloud.controller.domain.*;
 import org.apache.stratos.cloud.controller.exception.*;
 import org.apache.stratos.cloud.controller.internal.ServiceReferenceHolder;
-import org.apache.stratos.cloud.controller.registry.Deserializer;
 import org.apache.stratos.cloud.controller.registry.RegistryManager;
 import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
 import org.wso2.carbon.databridge.agent.thrift.AsyncDataPublisher;
@@ -77,11 +76,11 @@ public class CloudControllerContext implements Serializable {
 	/* We keep following maps in order to make the look up time, small. */
     
     /** 
-     * KubernetesGroups against groupIds
-     * Key - Kubernetes group id
-     * Value - {@link KubernetesGroup}
+     * KubernetesClusters against clusterIds
+     * Key - Kubernetes cluster id
+     * Value - {@link org.apache.stratos.cloud.controller.domain.kubernetes.KubernetesCluster}
      */
-    private Map<String, KubernetesGroup> kubernetesGroupsMap;
+    private Map<String, KubernetesCluster> kubernetesClustersMap;
 
     /**
      * Key - cluster id
@@ -103,7 +102,7 @@ public class CloudControllerContext implements Serializable {
 
     /**
      * Key - Kubernetes cluster id
-     * Value - {@link org.apache.stratos.cloud.controller.domain.KubernetesClusterContext}
+     * Value - {@link org.apache.stratos.cloud.controller.domain.kubernetes.KubernetesClusterContext}
      */
     private Map<String, KubernetesClusterContext> kubClusterIdToKubClusterContextMap;
 
@@ -158,7 +157,7 @@ public class CloudControllerContext implements Serializable {
         distributedObjectProvider = ServiceReferenceHolder.getInstance().getDistributedObjectProvider();
 
         // Initialize objects
-        kubernetesGroupsMap = distributedObjectProvider.getMap(CC_KUB_GROUP_ID_TO_GROUP_MAP);
+        kubernetesClustersMap = distributedObjectProvider.getMap(CC_KUB_GROUP_ID_TO_GROUP_MAP);
         clusterIdToMemberContextListMap = distributedObjectProvider.getMap(CC_CLUSTER_ID_TO_MEMBER_CTX_MAP);
         memberIdToMemberContextMap = distributedObjectProvider.getMap(CC_MEMBER_ID_TO_MEMBER_CTX_MAP);
         memberIdToScheduledTaskMap = distributedObjectProvider.getMap(CC_MEMBER_ID_TO_SCH_TASK_MAP);
@@ -227,7 +226,7 @@ public class CloudControllerContext implements Serializable {
         return acquireWriteLock(CC_SCH_TASK_WRITE_LOCK);
     }
 
-    public Lock acquireKubernetesGroupWriteLock() {
+    public Lock acquireKubernetesClusterWriteLock() {
         return acquireWriteLock(CC_KUB_GROUP_WRITE_LOCK);
     }
 
@@ -446,8 +445,8 @@ public class CloudControllerContext implements Serializable {
         cartridgeTypeToPartitionIdsMap.remove(cartridgeType);
     }
 
-    public KubernetesClusterContext getKubernetesClusterContext(String kubClusterId) {
-        return kubClusterIdToKubClusterContextMap.get(kubClusterId);
+    public KubernetesClusterContext getKubernetesClusterContext(String kubernetesClusterId) {
+        return kubClusterIdToKubClusterContextMap.get(kubernetesClusterId);
     }
 
     public void addKubernetesClusterContext(KubernetesClusterContext kubernetesClusterContext) {
@@ -457,11 +456,11 @@ public class CloudControllerContext implements Serializable {
     }
     
     /**
-     * Remove a registered Kubernetes group from registry
+     * Remove a registered Kubernetes cluster from registry
      */
-    public synchronized void removeKubernetesGroup(String kubernetesGroupId) {
+    public synchronized void removeKubernetesCluster(String kubernetesClusterId) {
         // Remove entry from information model
-        kubernetesGroupsMap.remove(kubernetesGroupId);
+        kubernetesClustersMap.remove(kubernetesClusterId);
     }
 
     /**
@@ -475,28 +474,28 @@ public class CloudControllerContext implements Serializable {
             log.info("Removing Kubernetes Host: " + kubernetesHostId);
         }
         try {
-            KubernetesGroup kubernetesGroupStored = getKubernetesGroupContainingHost(kubernetesHostId);
+            KubernetesCluster kubernetesClusterStored = getKubernetesClusterContainingHost(kubernetesHostId);
 
             // Kubernetes master can not be removed
-            if (kubernetesGroupStored.getKubernetesMaster().getHostId().equals(kubernetesHostId)) {
+            if (kubernetesClusterStored.getKubernetesMaster().getHostId().equals(kubernetesHostId)) {
                 throw new NonExistingKubernetesHostException("Kubernetes master is not allowed to be removed [id] " + kubernetesHostId);
             }
 
             List<KubernetesHost> kubernetesHostList = new ArrayList<KubernetesHost>();
-            for (KubernetesHost kubernetesHost : kubernetesGroupStored.getKubernetesHosts()) {
+            for (KubernetesHost kubernetesHost : kubernetesClusterStored.getKubernetesHosts()) {
                 if (!kubernetesHost.getHostId().equals(kubernetesHostId)) {
                     kubernetesHostList.add(kubernetesHost);
                 }
             }
             // member count will be equal only when host object was not found
-            if (kubernetesHostList.size() == kubernetesGroupStored.getKubernetesHosts().length) {
+            if (kubernetesHostList.size() == kubernetesClusterStored.getKubernetesHosts().length) {
                 throw new NonExistingKubernetesHostException("Kubernetes host not found for [id] " + kubernetesHostId);
             }
             KubernetesHost[] kubernetesHostsArray = new KubernetesHost[kubernetesHostList.size()];
             kubernetesHostList.toArray(kubernetesHostsArray);
 
             // Update information model
-            kubernetesGroupStored.setKubernetesHosts(kubernetesHostsArray);
+            kubernetesClusterStored.setKubernetesHosts(kubernetesHostsArray);
 
             if (log.isInfoEnabled()) {
                 log.info(String.format("Kubernetes host removed successfully: [id] %s", kubernetesHostId));
@@ -508,31 +507,31 @@ public class CloudControllerContext implements Serializable {
         }
     }
 
-    public void addKubernetesGroup(KubernetesGroup kubernetesGroup) {
-        kubernetesGroupsMap.put(kubernetesGroup.getGroupId(), kubernetesGroup);
+    public void addKubernetesCluster(KubernetesCluster kubernetesCluster) {
+        kubernetesClustersMap.put(kubernetesCluster.getClusterId(), kubernetesCluster);
     }
 
-    public void updateKubernetesGroup(KubernetesGroup kubernetesGroup) {
-        kubernetesGroupsMap.put(kubernetesGroup.getGroupId(), kubernetesGroup);
+    public void updateKubernetesCluster(KubernetesCluster kubernetesCluster) {
+        kubernetesClustersMap.put(kubernetesCluster.getClusterId(), kubernetesCluster);
     }
     
-    public boolean kubernetesGroupExists(KubernetesGroup kubernetesGroup) {
-        return kubernetesGroupsMap.containsKey(kubernetesGroup);
+    public boolean kubernetesClusterExists(KubernetesCluster kubernetesCluster) {
+        return kubernetesClustersMap.containsKey(kubernetesCluster);
     }
 
     public boolean kubernetesHostExists(String hostId) {
         if (StringUtils.isEmpty(hostId)) {
             return false;
         }
-        for (KubernetesGroup kubernetesGroup : kubernetesGroupsMap.values()) {
-            if (kubernetesGroup.getKubernetesHosts() != null) {
-                for (KubernetesHost kubernetesHost : kubernetesGroup.getKubernetesHosts()) {
+        for (KubernetesCluster kubernetesCluster : kubernetesClustersMap.values()) {
+            if (kubernetesCluster.getKubernetesHosts() != null) {
+                for (KubernetesHost kubernetesHost : kubernetesCluster.getKubernetesHosts()) {
                     if (kubernetesHost.getHostId().equals(hostId)) {
                         return true;
                     }
                 }
             }
-            if (hostId.equals(kubernetesGroup.getKubernetesMaster().getHostId())) {
+            if (hostId.equals(kubernetesCluster.getKubernetesMaster().getHostId())) {
                 return true;
             }
         }
@@ -540,61 +539,65 @@ public class CloudControllerContext implements Serializable {
     }
 
 
-    public KubernetesHost[] getKubernetesHostsInGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException {
-        if (StringUtils.isEmpty(kubernetesGroupId)) {
-            throw new NonExistingKubernetesGroupException("Cannot find for empty group id");
+    public KubernetesHost[] getKubernetesHostsInGroup(String kubernetesClusterId) throws NonExistingKubernetesClusterException {
+        if (StringUtils.isEmpty(kubernetesClusterId)) {
+            throw new NonExistingKubernetesClusterException("Kubernetes cluster id is null");
         }
 
-        KubernetesGroup kubernetesGroup = kubernetesGroupsMap.get(kubernetesGroupId);
-        if (kubernetesGroup != null) {
-            return kubernetesGroup.getKubernetesHosts();
+        KubernetesCluster kubernetesCluster = kubernetesClustersMap.get(kubernetesClusterId);
+        if (kubernetesCluster != null) {
+            return kubernetesCluster.getKubernetesHosts();
         }
-        throw new NonExistingKubernetesGroupException("Kubernetes group not found for group id: " + kubernetesGroupId);
+        throw new NonExistingKubernetesClusterException("Kubernetes cluster not found: [kubernetes-cluster-id] "
+                + kubernetesClusterId);
     }
 
-    public KubernetesMaster getKubernetesMasterInGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException {
-        if (StringUtils.isEmpty(kubernetesGroupId)) {
-            throw new NonExistingKubernetesGroupException("Cannot find for empty group id");
+    public KubernetesMaster getKubernetesMasterInGroup(String kubernetesClusterId)
+            throws NonExistingKubernetesClusterException {
+        if (StringUtils.isEmpty(kubernetesClusterId)) {
+            throw new NonExistingKubernetesClusterException("Kubernetes cluster id is null");
         }
-        KubernetesGroup kubernetesGroup = kubernetesGroupsMap.get(kubernetesGroupId);
-        if (kubernetesGroup != null) {
-            return kubernetesGroup.getKubernetesMaster();
+        KubernetesCluster kubernetesCluster = kubernetesClustersMap.get(kubernetesClusterId);
+        if (kubernetesCluster != null) {
+            return kubernetesCluster.getKubernetesMaster();
         }
-        throw new NonExistingKubernetesGroupException("Kubernetes master not found for group id: " + kubernetesGroupId);
+        throw new NonExistingKubernetesClusterException("Kubernetes master not found: [kubernetes-cluster-id] "
+                + kubernetesClusterId);
     }
 
-    public KubernetesGroup getKubernetesGroup(String groupId) throws NonExistingKubernetesGroupException {
-        if (StringUtils.isEmpty(groupId)) {
-            throw new NonExistingKubernetesGroupException("Kubernetes group id is empty");
+    public KubernetesCluster getKubernetesCluster(String kubernetesClusterId)
+            throws NonExistingKubernetesClusterException {
+        if (StringUtils.isEmpty(kubernetesClusterId)) {
+            throw new NonExistingKubernetesClusterException("Kubernetes cluster id is empty");
         }
-        KubernetesGroup kubernetesGroup = kubernetesGroupsMap.get(groupId);
-        if (kubernetesGroup != null) {
-            return kubernetesGroup;
+        KubernetesCluster kubernetesCluster = kubernetesClustersMap.get(kubernetesClusterId);
+        if (kubernetesCluster != null) {
+            return kubernetesCluster;
         }
-        throw new NonExistingKubernetesGroupException("Kubernetes group not found: [group-id]: " + groupId);
+        throw new NonExistingKubernetesClusterException("Kubernetes cluster not found: [kubernetes-cluster-id] " + kubernetesClusterId);
     }
 
-    public KubernetesGroup getKubernetesGroupContainingHost(String hostId) throws NonExistingKubernetesGroupException {
+    public KubernetesCluster getKubernetesClusterContainingHost(String hostId) throws NonExistingKubernetesClusterException {
         if (StringUtils.isEmpty(hostId)) {
             return null;
         }
-        for (KubernetesGroup kubernetesGroup : kubernetesGroupsMap.values()) {
-            if (hostId.equals(kubernetesGroup.getKubernetesMaster().getHostId())) {
-                return kubernetesGroup;
+        for (KubernetesCluster kubernetesCluster : kubernetesClustersMap.values()) {
+            if (hostId.equals(kubernetesCluster.getKubernetesMaster().getHostId())) {
+                return kubernetesCluster;
             }
-            if (kubernetesGroup.getKubernetesHosts() != null) {
-                for (KubernetesHost kubernetesHost : kubernetesGroup.getKubernetesHosts()) {
+            if (kubernetesCluster.getKubernetesHosts() != null) {
+                for (KubernetesHost kubernetesHost : kubernetesCluster.getKubernetesHosts()) {
                     if (kubernetesHost.getHostId().equals(hostId)) {
-                        return kubernetesGroup;
+                        return kubernetesCluster;
                     }
                 }
             }
         }
-        throw new NonExistingKubernetesGroupException("Kubernetes group not found containing host id: " + hostId);
+        throw new NonExistingKubernetesClusterException("Kubernetes cluster not found containing host id: " + hostId);
     }
 
-    public KubernetesGroup[] getKubernetesGroups() {
-        return kubernetesGroupsMap.values().toArray(new KubernetesGroup[kubernetesGroupsMap.size()]);
+    public KubernetesCluster[] getKubernetesClusters() {
+        return kubernetesClustersMap.values().toArray(new KubernetesCluster[kubernetesClustersMap.size()]);
     }
 
     public boolean isClustered() {
@@ -627,7 +630,7 @@ public class CloudControllerContext implements Serializable {
                     if (dataObj instanceof CloudControllerContext) {
                         CloudControllerContext serializedObj = (CloudControllerContext) dataObj;
 
-                        copyMap(serializedObj.kubernetesGroupsMap, kubernetesGroupsMap);
+                        copyMap(serializedObj.kubernetesClustersMap, kubernetesClustersMap);
                         copyMap(serializedObj.clusterIdToMemberContextListMap, clusterIdToMemberContextListMap);
                         copyMap(serializedObj.memberIdToMemberContextMap, memberIdToMemberContextMap);
                         copyMap(serializedObj.kubClusterIdToKubClusterContextMap, kubClusterIdToKubClusterContextMap);

http://git-wip-us.apache.org/repos/asf/stratos/blob/78e8011e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/KubernetesClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/KubernetesClusterContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/KubernetesClusterContext.java
deleted file mode 100644
index 83feabd..0000000
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/KubernetesClusterContext.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one 
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- * 
- *  http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
- * KIND, either express or implied.  See the License for the 
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.stratos.cloud.controller.domain;
-
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.kubernetes.client.KubernetesApiClient;
-
-/**
- * Holds information about a Kubernetes Cluster.
- *
- *
- */
-public class KubernetesClusterContext implements Serializable {
-
-	private static final long serialVersionUID = -802025758806195791L;
-	private static final Log log = LogFactory.getLog(KubernetesClusterContext.class);
-	
-	// id of the Kubernetes cluster
-    private String kubernetesClusterId;
-    private int upperPort;
-    private int lowerPort;
-    // kubernetes master ip
-    private String masterIp;
-    private String masterPort;
-    // available list of ports
-    private List<Integer> servicePorts;
-    // kubernetes client API instance
-    private transient KubernetesApiClient kubApi;
-    
-    public KubernetesClusterContext(String id, String masterIp, String masterPort, int lowerPort, int upperPort) {
-    	servicePorts = new ArrayList<Integer>();
-        this.lowerPort = lowerPort;
-    	this.upperPort = upperPort;
-    	// Generate the ports
-        generateServicePorts(lowerPort, upperPort);
-    	this.kubernetesClusterId = id;
-    	this.masterIp = masterIp;
-    	this.masterPort = masterPort;
-    	this.setKubApi(new KubernetesApiClient(getEndpoint(masterIp, masterPort)));
-    	
-	}
-    
-	private String getEndpoint(String ip, String port) {
-		return "http://"+ip+":"+port+"/api/v1beta1/";
-	}
-
-	public String getKubernetesClusterId() {
-		return kubernetesClusterId;
-	}
-
-	public void setKubernetesClusterId(String kubernetesClusterId) {
-		this.kubernetesClusterId = kubernetesClusterId;
-	}
-
-	public List<Integer> getServicePorts() {
-		return servicePorts;
-	}
-
-	public void setServicePorts(List<Integer> servicePorts) {
-		this.servicePorts = servicePorts;
-	}
-	
-	public int getNextServicePort() {
-	    if (servicePorts.isEmpty()) {
-	        return -1;
-	    }
-		return servicePorts.remove(0);
-	}
-	
-	public void deallocatePort(int port) {
-		if (!servicePorts.contains(port)) {
-			servicePorts.add(port);
-            // TODO Sort elements
-		}
-	}
-
-	private void generateServicePorts(int lowerPort, int upperPort) {
-		for (int port = lowerPort; port <= upperPort; port++) {
-			servicePorts.add(port);
-		}
-	}
-
-	public String getMasterIp() {
-		return masterIp;
-	}
-
-	public void setMasterIp(String masterIp) {
-		this.masterIp = masterIp;
-	}
-
-	public KubernetesApiClient getKubApi() {
-		if (kubApi == null) {
-			kubApi = new KubernetesApiClient(getEndpoint(masterIp, masterPort));
-		}
-		return kubApi;
-	}
-
-	public void setKubApi(KubernetesApiClient kubApi) {
-		this.kubApi = kubApi;
-	}
-
-	public int getUpperPort() {
-        return upperPort;
-    }
-
-    public void setUpperPort(int upperPort) {
-        this.upperPort = upperPort;
-    }
-
-    public int getLowerPort() {
-        return lowerPort;
-    }
-
-    public void setLowerPort(int lowerPort) {
-        this.lowerPort = lowerPort;
-    }
-
-    @Override
-    public int hashCode() {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + ((servicePorts == null) ? 0 : servicePorts.hashCode());
-        result = prime * result + ((kubernetesClusterId == null) ? 0 : kubernetesClusterId.hashCode());
-        result = prime * result + lowerPort;
-        result = prime * result + ((masterIp == null) ? 0 : masterIp.hashCode());
-        result = prime * result + ((masterPort == null) ? 0 : masterPort.hashCode());
-        result = prime * result + upperPort;
-        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 (servicePorts == null) {
-            if (other.servicePorts != null)
-                return false;
-        } else if (!servicePorts.equals(other.servicePorts))
-            return false;
-        if (kubernetesClusterId == null) {
-            if (other.kubernetesClusterId != null)
-                return false;
-        } else if (!kubernetesClusterId.equals(other.kubernetesClusterId))
-            return false;
-        if (lowerPort != other.lowerPort)
-            return false;
-        if (masterIp == null) {
-            if (other.masterIp != null)
-                return false;
-        } else if (!masterIp.equals(other.masterIp))
-            return false;
-        if (masterPort == null) {
-            if (other.masterPort != null)
-                return false;
-        } else if (!masterPort.equals(other.masterPort))
-            return false;
-        if (upperPort != other.upperPort)
-            return false;
-        return true;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/78e8011e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/KubernetesCluster.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/KubernetesCluster.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/KubernetesCluster.java
new file mode 100644
index 0000000..1394cf6
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/KubernetesCluster.java
@@ -0,0 +1,171 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.cloud.controller.domain.kubernetes;
+
+import org.apache.stratos.common.Properties;
+
+import java.io.Serializable;
+import java.util.Arrays;
+
+/**
+ * The model class for KubernetesCluster definition.
+ */
+public class KubernetesCluster implements Serializable {
+
+    private static final long serialVersionUID = 3210149484906093132L;
+
+    private String clusterId;
+    private KubernetesHost[] kubernetesHosts;
+    private KubernetesMaster kubernetesMaster;
+    private PortRange portRange;
+    private String description;
+    private Properties properties = new Properties();
+
+    public String getClusterId() {
+        return clusterId;
+    }
+
+    public void setClusterId(String clusterId) {
+        this.clusterId = clusterId;
+    }
+
+    public KubernetesHost[] getKubernetesHosts() {
+        return kubernetesHosts;
+    }
+
+    public void setKubernetesHosts(KubernetesHost[] kubernetesHosts) {
+        if(kubernetesHosts == null) {
+            this.kubernetesHosts = new KubernetesHost[0];
+        } else {
+            this.kubernetesHosts = Arrays.copyOf(kubernetesHosts, kubernetesHosts.length);
+        }
+    }
+
+    public KubernetesMaster getKubernetesMaster() {
+        return kubernetesMaster;
+    }
+
+    public void setKubernetesMaster(KubernetesMaster kubernetesMaster) {
+        this.kubernetesMaster = kubernetesMaster;
+    }
+
+    public PortRange getPortRange() {
+        return portRange;
+    }
+
+    public void setPortRange(PortRange portRange) {
+        this.portRange = portRange;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public Properties getProperties() {
+        return properties;
+    }
+
+    public void setProperties(Properties properties) {
+        this.properties = properties;
+    }
+
+    public String toString() {
+        return "KubernetesCluster [groupId=" + clusterId +
+                " , kubernetesHosts=" + Arrays.toString(kubernetesHosts) +
+                " , kubernetesMaster=" + kubernetesMaster +
+                " , portRange=" + portRange +
+                " , description=" + description +
+                " , properties=" + properties + "]";
+    }
+
+    @Override
+    public boolean equals(Object anObject) {
+        if (anObject == null) {
+            return false;
+        }
+        if (this == anObject) {
+            return true;
+        }
+        if (!(anObject instanceof KubernetesCluster)) {
+            return false;
+        }
+        KubernetesCluster kubernetesClusterObj = (KubernetesCluster) anObject;
+        if (this.clusterId == null || kubernetesClusterObj.getClusterId() == null) {
+            return false;
+        } else if (!this.clusterId.equals(kubernetesClusterObj.getClusterId())) {
+            return false;
+        }
+
+        if (this.portRange == null || kubernetesClusterObj.getPortRange() == null) {
+            return false;
+        } else if (!this.portRange.equals(kubernetesClusterObj.getPortRange())) {
+            return false;
+        }
+
+        if (this.properties == null) {
+            if (kubernetesClusterObj.getProperties() != null) {
+                return false;
+            }
+        } else if (!this.properties.equals(kubernetesClusterObj.getProperties())) {
+            return false;
+        }
+
+        if (this.description == null) {
+            if (kubernetesClusterObj.description != null) {
+                return false;
+            }
+        } else if (!this.description.equals(kubernetesClusterObj.getDescription())) {
+            return false;
+        }
+
+        if (this.kubernetesMaster == null || kubernetesClusterObj.getKubernetesMaster() == null) {
+            return false;
+        } else if (!this.kubernetesMaster.equals(kubernetesClusterObj.getKubernetesMaster())) {
+            return false;
+        }
+
+        if (this.getKubernetesHosts() == null) {
+            if (kubernetesClusterObj.getKubernetesHosts() != null) {
+                return false;
+            }
+        } else if (!Arrays.equals(this.kubernetesHosts, kubernetesClusterObj.getKubernetesHosts())) {
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((this.portRange == null) ? 0 : this.portRange.hashCode());
+        result = prime * result + ((this.clusterId == null) ? 0 : this.clusterId.hashCode());
+        result = prime * result + ((this.description == null) ? 0 : this.description.hashCode());
+        result = prime * result + ((this.kubernetesMaster == null) ? 0 : this.kubernetesMaster.hashCode());
+        result = prime * result + ((this.kubernetesHosts == null) ? 0 : Arrays.hashCode(this.kubernetesHosts));
+        result = prime * result + ((this.properties == null) ? 0 : this.properties.hashCode());
+        return result;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/78e8011e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/KubernetesClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/KubernetesClusterContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/KubernetesClusterContext.java
new file mode 100644
index 0000000..0132475
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/KubernetesClusterContext.java
@@ -0,0 +1,188 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one 
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
+ * KIND, either express or implied.  See the License for the 
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.stratos.cloud.controller.domain.kubernetes;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.kubernetes.client.KubernetesApiClient;
+
+/**
+ * Holds information about a Kubernetes Cluster.
+ *
+ *
+ */
+public class KubernetesClusterContext implements Serializable {
+
+	private static final long serialVersionUID = -802025758806195791L;
+	private static final Log log = LogFactory.getLog(KubernetesClusterContext.class);
+	
+	// id of the Kubernetes cluster
+    private String kubernetesClusterId;
+    private int upperPort;
+    private int lowerPort;
+    // kubernetes master ip
+    private String masterIp;
+    private String masterPort;
+    // available list of ports
+    private List<Integer> servicePorts;
+    // kubernetes client API instance
+    private transient KubernetesApiClient kubApi;
+    
+    public KubernetesClusterContext(String id, String masterIp, String masterPort, int lowerPort, int upperPort) {
+    	servicePorts = new ArrayList<Integer>();
+        this.lowerPort = lowerPort;
+    	this.upperPort = upperPort;
+    	// Generate the ports
+        generateServicePorts(lowerPort, upperPort);
+    	this.kubernetesClusterId = id;
+    	this.masterIp = masterIp;
+    	this.masterPort = masterPort;
+    	this.setKubApi(new KubernetesApiClient(getEndpoint(masterIp, masterPort)));
+    	
+	}
+    
+	private String getEndpoint(String ip, String port) {
+		return "http://"+ip+":"+port+"/api/v1beta1/";
+	}
+
+	public String getKubernetesClusterId() {
+		return kubernetesClusterId;
+	}
+
+	public void setKubernetesClusterId(String kubernetesClusterId) {
+		this.kubernetesClusterId = kubernetesClusterId;
+	}
+
+	public List<Integer> getServicePorts() {
+		return servicePorts;
+	}
+
+	public void setServicePorts(List<Integer> servicePorts) {
+		this.servicePorts = servicePorts;
+	}
+	
+	public int getNextServicePort() {
+	    if (servicePorts.isEmpty()) {
+	        return -1;
+	    }
+		return servicePorts.remove(0);
+	}
+	
+	public void deallocatePort(int port) {
+		if (!servicePorts.contains(port)) {
+			servicePorts.add(port);
+            // TODO Sort elements
+		}
+	}
+
+	private void generateServicePorts(int lowerPort, int upperPort) {
+		for (int port = lowerPort; port <= upperPort; port++) {
+			servicePorts.add(port);
+		}
+	}
+
+	public String getMasterIp() {
+		return masterIp;
+	}
+
+	public void setMasterIp(String masterIp) {
+		this.masterIp = masterIp;
+	}
+
+	public KubernetesApiClient getKubApi() {
+		if (kubApi == null) {
+			kubApi = new KubernetesApiClient(getEndpoint(masterIp, masterPort));
+		}
+		return kubApi;
+	}
+
+	public void setKubApi(KubernetesApiClient kubApi) {
+		this.kubApi = kubApi;
+	}
+
+	public int getUpperPort() {
+        return upperPort;
+    }
+
+    public void setUpperPort(int upperPort) {
+        this.upperPort = upperPort;
+    }
+
+    public int getLowerPort() {
+        return lowerPort;
+    }
+
+    public void setLowerPort(int lowerPort) {
+        this.lowerPort = lowerPort;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((servicePorts == null) ? 0 : servicePorts.hashCode());
+        result = prime * result + ((kubernetesClusterId == null) ? 0 : kubernetesClusterId.hashCode());
+        result = prime * result + lowerPort;
+        result = prime * result + ((masterIp == null) ? 0 : masterIp.hashCode());
+        result = prime * result + ((masterPort == null) ? 0 : masterPort.hashCode());
+        result = prime * result + upperPort;
+        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 (servicePorts == null) {
+            if (other.servicePorts != null)
+                return false;
+        } else if (!servicePorts.equals(other.servicePorts))
+            return false;
+        if (kubernetesClusterId == null) {
+            if (other.kubernetesClusterId != null)
+                return false;
+        } else if (!kubernetesClusterId.equals(other.kubernetesClusterId))
+            return false;
+        if (lowerPort != other.lowerPort)
+            return false;
+        if (masterIp == null) {
+            if (other.masterIp != null)
+                return false;
+        } else if (!masterIp.equals(other.masterIp))
+            return false;
+        if (masterPort == null) {
+            if (other.masterPort != null)
+                return false;
+        } else if (!masterPort.equals(other.masterPort))
+            return false;
+        if (upperPort != other.upperPort)
+            return false;
+        return true;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/78e8011e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/KubernetesHost.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/KubernetesHost.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/KubernetesHost.java
new file mode 100644
index 0000000..4350809
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/KubernetesHost.java
@@ -0,0 +1,146 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+package org.apache.stratos.cloud.controller.domain.kubernetes;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.stratos.common.Properties;
+
+import java.io.Serializable;
+
+/**
+ * The model class for KubernetesHost beans. This represents a Kubernetes CoreOS host instance
+ */
+public class KubernetesHost implements Serializable {
+    private static final long serialVersionUID = 1798748592432690645L;
+    private static final Log log = LogFactory.getLog(KubernetesHost.class);
+    protected String hostId;
+    protected String hostname;
+    protected String hostIpAddress;
+    protected Properties properties = new Properties();
+
+    public KubernetesHost() {
+
+    }
+
+    public KubernetesHost(String hostId, String hostname, String hostIpAddress) {
+        this.hostId = hostId;
+        this.hostname = hostname;
+        this.hostIpAddress = hostIpAddress;
+    }
+
+    public String getHostId() {
+        return hostId;
+    }
+
+    public void setHostId(String hostId) {
+        this.hostId = hostId;
+    }
+
+    public String getHostname() {
+        return hostname;
+    }
+
+    public void setHostname(String hostname) {
+        this.hostname = hostname;
+    }
+
+    public String getHostIpAddress() {
+        return hostIpAddress;
+    }
+
+    public void setHostIpAddress(String hostIpAddress) {
+        this.hostIpAddress = hostIpAddress;
+    }
+
+    public Properties getProperties() {
+        return properties;
+    }
+
+    public void setProperties(Properties properties) {
+        this.properties = properties;
+    }
+
+    @Override
+    public String toString() {
+        return "KubernetesHost [hostId=" + hostId +
+                " hostname=" + hostname +
+                " hostIpAddress=" + hostIpAddress +
+                " properties=" + properties + "]";
+    }
+
+    @Override
+    public boolean equals(Object anObject) {
+        if (anObject == null) {
+            return false;
+        }
+        if (this == anObject) {
+            return true;
+        }
+
+        if (!(anObject instanceof KubernetesHost)) {
+            return false;
+        }
+        KubernetesHost kubernetesHostObj = (KubernetesHost) anObject;
+
+        if (this.hostId == null || kubernetesHostObj.getHostId() == null) {
+            return false;
+        } else if (!this.hostId.equals(kubernetesHostObj.getHostId())) {
+            return false;
+        }
+
+        if (this.hostIpAddress == null || kubernetesHostObj.getHostIpAddress() == null) {
+            return false;
+        } else if (!this.hostIpAddress.equals(kubernetesHostObj.getHostIpAddress())) {
+            return false;
+        }
+
+        if (this.hostname == null) {
+            if (kubernetesHostObj.getHostname() != null) {
+                return false;
+            }
+        } else if (!this.hostname.equals(kubernetesHostObj.getHostname())) {
+            return false;
+        }
+
+        if (this.properties == null) {
+            if (kubernetesHostObj.getProperties() != null) {
+                return false;
+            }
+        } else if (this.properties.equals(kubernetesHostObj.getProperties())) {
+            return false;
+        }
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((this.hostId == null) ? 0 : this.hostId.hashCode());
+        result = prime * result + ((this.hostname == null) ? 0 : this.hostname.hashCode());
+        result = prime * result + ((this.hostIpAddress == null) ? 0 : this.hostIpAddress.hashCode());
+        result = prime * result + ((this.properties == null) ? 0 : this.properties.hashCode());
+        return result;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/78e8011e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/KubernetesMaster.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/KubernetesMaster.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/KubernetesMaster.java
new file mode 100644
index 0000000..475f73a
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/KubernetesMaster.java
@@ -0,0 +1,90 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+package org.apache.stratos.cloud.controller.domain.kubernetes;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.Serializable;
+
+/**
+ * The model class for KubernetesMaster beans. This represents a Kubernetes CoreOS master host instance
+ */
+public class KubernetesMaster extends KubernetesHost implements Serializable {
+    private static final long serialVersionUID = -4369535909362724532L;
+
+    private static final Log log = LogFactory.getLog(KubernetesMaster.class);
+
+    private String endpoint;
+
+    public KubernetesMaster() {
+
+    }
+
+    public KubernetesMaster(String hostId, String hostname, String hostIpAddress, String endpoint) {
+        this.hostId = hostId;
+        this.hostname = hostname;
+        this.hostIpAddress = hostIpAddress;
+        this.endpoint = endpoint;
+    }
+
+    public String getEndpoint() {
+        return endpoint;
+    }
+
+    public void setEndpoint(String endpoint) {
+        this.endpoint = endpoint;
+    }
+
+    @Override
+    public String toString() {
+        return "KubernetesMaster [hostId=" + hostId +
+                " hostname=" + hostname +
+                " hostIpAddress=" + hostIpAddress +
+                " endpoint=" + endpoint +
+                " properties=" + properties + "]";
+    }
+
+    @Override
+    public boolean equals(Object anObject) {
+        if (anObject == null) {
+            return false;
+        }
+        if (this == anObject) {
+            return true;
+        }
+
+        if (!(anObject instanceof KubernetesMaster)) {
+            return false;
+        }
+
+        return super.equals(anObject);
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = super.hashCode();
+        result = prime * result + ((this.endpoint == null) ? 0 : this.endpoint.hashCode());
+        return result;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/78e8011e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/PortRange.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/PortRange.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/PortRange.java
new file mode 100644
index 0000000..86cd1b7
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/kubernetes/PortRange.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.stratos.cloud.controller.domain.kubernetes;
+
+import java.io.Serializable;
+
+/**
+ * The model class for PortRange definition.
+ */
+public class PortRange implements Serializable {
+    private static final long serialVersionUID = -8658155576745059779L;
+    int upper;
+    int lower;
+
+    public int getUpper() {
+        return upper;
+    }
+
+    public void setUpper(int upper) {
+        this.upper = upper;
+    }
+
+    public int getLower() {
+        return lower;
+    }
+
+    public void setLower(int lower) {
+        this.lower = lower;
+    }
+
+    public String toString() {
+        return "[ upper=" + upper + " , lower=" + lower + " ]";
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/78e8011e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesClusterException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesClusterException.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesClusterException.java
new file mode 100644
index 0000000..3b5b930
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesClusterException.java
@@ -0,0 +1,49 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+package org.apache.stratos.cloud.controller.exception;
+
+/**
+ * Exception class for handling invalid Kubernetes cluster
+ */
+public class InvalidKubernetesClusterException extends Exception {
+
+    private String message;
+
+    public InvalidKubernetesClusterException(String message, Exception exception){
+        super(message, exception);
+        this.message = message;
+    }
+
+    public InvalidKubernetesClusterException(Exception exception){
+        super(exception);
+    }
+
+    public InvalidKubernetesClusterException(String msg){
+        super(msg);
+        this.message = msg;
+    }
+
+    @Override
+    public String getMessage() {
+        return this.message;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/78e8011e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesGroupException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesGroupException.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesGroupException.java
deleted file mode 100644
index db5fb30..0000000
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesGroupException.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-package org.apache.stratos.cloud.controller.exception;
-
-/**
- * Exception class for handling invalid Kubernetes Group
- */
-public class InvalidKubernetesGroupException extends Exception {
-
-    private String message;
-
-    public InvalidKubernetesGroupException(String message, Exception exception){
-        super(message, exception);
-        this.message = message;
-    }
-
-    public InvalidKubernetesGroupException(Exception exception){
-        super(exception);
-    }
-
-    public InvalidKubernetesGroupException(String msg){
-        super(msg);
-        this.message = msg;
-    }
-
-    @Override
-    public String getMessage() {
-        return this.message;
-    }
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/78e8011e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesClusterException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesClusterException.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesClusterException.java
new file mode 100644
index 0000000..e425163
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesClusterException.java
@@ -0,0 +1,49 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+*/
+
+package org.apache.stratos.cloud.controller.exception;
+
+/**
+ * Exception class for handling non-existing Kubernetes cluster
+ */
+public class NonExistingKubernetesClusterException extends Exception {
+
+    private String message;
+
+    public NonExistingKubernetesClusterException(String message, Exception exception){
+        super(message, exception);
+        this.message = message;
+    }
+
+    public NonExistingKubernetesClusterException(Exception exception){
+        super(exception);
+    }
+
+    public NonExistingKubernetesClusterException(String msg){
+        super(msg);
+        this.message = msg;
+    }
+
+    @Override
+    public String getMessage() {
+        return this.message;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/78e8011e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesGroupException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesGroupException.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesGroupException.java
deleted file mode 100644
index ba48fbe..0000000
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesGroupException.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- *
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- *
-*/
-
-package org.apache.stratos.cloud.controller.exception;
-
-/**
- * Exception class for handling non-existing Kubernetes Group
- */
-public class NonExistingKubernetesGroupException extends Exception {
-
-    private String message;
-
-    public NonExistingKubernetesGroupException(String message, Exception exception){
-        super(message, exception);
-        this.message = message;
-    }
-
-    public NonExistingKubernetesGroupException(Exception exception){
-        super(exception);
-    }
-
-    public NonExistingKubernetesGroupException(String msg){
-        super(msg);
-        this.message = msg;
-    }
-
-    @Override
-    public String getMessage() {
-        return this.message;
-    }
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/78e8011e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/KubernetesIaas.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/KubernetesIaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/KubernetesIaas.java
index 8e57ba9..e9150bd 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/KubernetesIaas.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/KubernetesIaas.java
@@ -26,6 +26,7 @@ import org.apache.stratos.cloud.controller.concurrent.ScheduledThreadExecutor;
 import org.apache.stratos.cloud.controller.context.CloudControllerContext;
 import org.apache.stratos.cloud.controller.domain.*;
 import org.apache.stratos.cloud.controller.domain.Cartridge;
+import org.apache.stratos.cloud.controller.domain.kubernetes.KubernetesClusterContext;
 import org.apache.stratos.cloud.controller.exception.*;
 import org.apache.stratos.cloud.controller.functions.ContainerClusterContextToReplicationController;
 import org.apache.stratos.cloud.controller.iaases.validators.KubernetesPartitionValidator;
@@ -35,8 +36,8 @@ import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
 import org.apache.stratos.cloud.controller.util.PodActivationWatcher;
 import org.apache.stratos.common.beans.NameValuePair;
 import org.apache.stratos.common.constants.StratosConstants;
-import org.apache.stratos.common.kubernetes.KubernetesGroup;
-import org.apache.stratos.common.kubernetes.PortRange;
+import org.apache.stratos.cloud.controller.domain.kubernetes.KubernetesCluster;
+import org.apache.stratos.cloud.controller.domain.kubernetes.PortRange;
 import org.apache.stratos.kubernetes.client.KubernetesApiClient;
 import org.apache.stratos.kubernetes.client.exceptions.KubernetesClientException;
 import org.apache.stratos.kubernetes.client.model.*;
@@ -151,17 +152,17 @@ public class KubernetesIaas extends Iaas {
                         partition.getProperties(),
                         partition.toString());
 
-                KubernetesGroup kubernetesGroup = CloudControllerContext.getInstance().
-                        getKubernetesGroup(kubernetesClusterId);
-                handleNullObject(kubernetesGroup, "Could not start container, kubernetes group not found: " +
+                KubernetesCluster kubernetesCluster = CloudControllerContext.getInstance().
+                        getKubernetesCluster(kubernetesClusterId);
+                handleNullObject(kubernetesCluster, "Could not start container, kubernetes cluster not found: " +
                         "[kubernetes-cluster-id] " + kubernetesClusterId + " [cluster-id] " + clusterId +
                         " [member-id] " + memberId);
 
                 // Prepare kubernetes context
-                String kubernetesMasterIp = kubernetesGroup.getKubernetesMaster().getHostIpAddress();
-                PortRange kubernetesPortRange = kubernetesGroup.getPortRange();
+                String kubernetesMasterIp = kubernetesCluster.getKubernetesMaster().getHostIpAddress();
+                PortRange kubernetesPortRange = kubernetesCluster.getPortRange();
                 String kubernetesMasterPort = CloudControllerUtil.getProperty(
-                        kubernetesGroup.getKubernetesMaster().getProperties(), StratosConstants.KUBERNETES_MASTER_PORT,
+                        kubernetesCluster.getKubernetesMaster().getProperties(), StratosConstants.KUBERNETES_MASTER_PORT,
                         StratosConstants.KUBERNETES_MASTER_DEFAULT_PORT);
 
                 KubernetesClusterContext kubClusterContext = getKubernetesClusterContext(kubernetesClusterId,

http://git-wip-us.apache.org/repos/asf/stratos/blob/78e8011e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/KubernetesPartitionValidator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/KubernetesPartitionValidator.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/KubernetesPartitionValidator.java
index a95aa37..8ecb7d9 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/KubernetesPartitionValidator.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/KubernetesPartitionValidator.java
@@ -25,7 +25,7 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.context.CloudControllerContext;
 import org.apache.stratos.cloud.controller.domain.IaasProvider;
 import org.apache.stratos.cloud.controller.exception.InvalidPartitionException;
-import org.apache.stratos.cloud.controller.exception.NonExistingKubernetesGroupException;
+import org.apache.stratos.cloud.controller.exception.NonExistingKubernetesClusterException;
 import org.apache.stratos.common.constants.StratosConstants;
 
 /**
@@ -55,9 +55,9 @@ public class KubernetesPartitionValidator implements PartitionValidator {
         if (properties.containsKey(StratosConstants.KUBERNETES_CLUSTER_ID)) {
             String kubernetesClusterId = properties.getProperty(StratosConstants.KUBERNETES_CLUSTER_ID);
             try {
-                CloudControllerContext.getInstance().getKubernetesGroup(kubernetesClusterId);
+                CloudControllerContext.getInstance().getKubernetesCluster(kubernetesClusterId);
                 return iaasProvider;
-            } catch (NonExistingKubernetesGroupException e) {
+            } catch (NonExistingKubernetesClusterException e) {
                 String message = "Kubernetes partition is not valid: [partition-id] " + partitionId;
                 log.error(message, e);
                 throw new InvalidPartitionException(message, e);

http://git-wip-us.apache.org/repos/asf/stratos/blob/78e8011e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java
index 5f5124e..8ac170e 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/CloudControllerService.java
@@ -20,9 +20,9 @@ package org.apache.stratos.cloud.controller.services;
 
 import org.apache.stratos.cloud.controller.domain.*;
 import org.apache.stratos.cloud.controller.exception.*;
-import org.apache.stratos.common.kubernetes.KubernetesGroup;
-import org.apache.stratos.common.kubernetes.KubernetesHost;
-import org.apache.stratos.common.kubernetes.KubernetesMaster;
+import org.apache.stratos.cloud.controller.domain.kubernetes.KubernetesCluster;
+import org.apache.stratos.cloud.controller.domain.kubernetes.KubernetesHost;
+import org.apache.stratos.cloud.controller.domain.kubernetes.KubernetesMaster;
 import org.apache.stratos.messaging.domain.topology.ClusterStatus;
 
 /**
@@ -229,48 +229,48 @@ public interface CloudControllerService {
             ClusterInstanceCreationException;
     
     /**
-     * Retrieves registered Kubernetes Groups.
+     * Retrieves registered Kubernetes clusters.
      */
-    public KubernetesGroup[] getKubernetesGroups();
+    public KubernetesCluster[] getKubernetesClusters();
 
     /**
-     * Retrieves Kubernetes Group for given Kubernetes Group ID.
+     * Retrieves Kubernetes cluster for given Kubernetes cluster ID.
      *
-     * @param kubernetesGroupId
+     * @param kubernetesClusterId
      */
-    public KubernetesGroup getKubernetesGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException;
+    public KubernetesCluster getKubernetesCluster(String kubernetesClusterId) throws NonExistingKubernetesClusterException;
 
     /**
-     * Retrieves Kubernetes Master for given Kubernetes Group ID.
+     * Retrieves Kubernetes Master for given Kubernetes cluster ID.
      *
-     * @param kubernetesGroupId
+     * @param kubernetesClusterId
      */
-    public KubernetesMaster getMasterForKubernetesGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException;
+    public KubernetesMaster getMasterForKubernetesCluster(String kubernetesClusterId) throws NonExistingKubernetesClusterException;
 
     /**
-     * Retrieves Kubernetes Hosts for given Kubernetes Group ID.
+     * Retrieves Kubernetes Hosts for given Kubernetes cluster ID.
      *
-     * @param kubernetesGroupId
+     * @param kubernetesClusterId
      */
-    public KubernetesHost[] getHostsForKubernetesGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException;
+    public KubernetesHost[] getHostsForKubernetesCluster(String kubernetesClusterId) throws NonExistingKubernetesClusterException;
 
     /**
      * Register a Kubernetes cluster.
      *
-     * @param kubernetesGroup
-     * @throws org.apache.stratos.cloud.controller.exception.InvalidKubernetesGroupException
+     * @param kubernetesCluster
+     * @throws org.apache.stratos.cloud.controller.exception.InvalidKubernetesClusterException
      */
-    public boolean addKubernetesGroup(KubernetesGroup kubernetesGroup) throws InvalidKubernetesGroupException;
+    public boolean addKubernetesCluster(KubernetesCluster kubernetesCluster) throws InvalidKubernetesClusterException;
 
     /**
-     * Add a Kubernetes host to a Kubernetes Group.
+     * Add a Kubernetes host to a Kubernetes cluster.
      *
      * @param groupId
      * @param kubernetesHost
      * @throws org.apache.stratos.cloud.controller.exception.InvalidKubernetesHostException
      */
     public boolean addKubernetesHost(String groupId, KubernetesHost kubernetesHost) throws
-            InvalidKubernetesHostException, NonExistingKubernetesGroupException;
+            InvalidKubernetesHostException, NonExistingKubernetesClusterException;
 
     /**
      * Update a Kubernetes host.
@@ -285,9 +285,9 @@ public interface CloudControllerService {
      * Remove a Kubernetes host.
      *
      * @param groupId
-     * @throws NonExistingKubernetesGroupException
+     * @throws NonExistingKubernetesClusterException
      */
-    public boolean removeKubernetesGroup(String groupId) throws NonExistingKubernetesGroupException;
+    public boolean removeKubernetesCluster(String groupId) throws NonExistingKubernetesClusterException;
 
     /**
      * Update a Kubernetes host.
@@ -298,7 +298,7 @@ public interface CloudControllerService {
     public boolean removeKubernetesHost(String hostId) throws NonExistingKubernetesHostException;
 
     /**
-     * Update a Kubernetes Master in a Kubernetes Group.
+     * Update a Kubernetes Master in a Kubernetes cluster.
      *
      * @param kubernetesMaster
      * @throws NonExistingKubernetesMasterException

http://git-wip-us.apache.org/repos/asf/stratos/blob/78e8011e/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
index bc80291..8ec8595 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
@@ -38,9 +38,9 @@ import org.apache.stratos.cloud.controller.services.CloudControllerService;
 import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
 import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
 import org.apache.stratos.common.Property;
-import org.apache.stratos.common.kubernetes.KubernetesGroup;
-import org.apache.stratos.common.kubernetes.KubernetesHost;
-import org.apache.stratos.common.kubernetes.KubernetesMaster;
+import org.apache.stratos.cloud.controller.domain.kubernetes.KubernetesCluster;
+import org.apache.stratos.cloud.controller.domain.kubernetes.KubernetesHost;
+import org.apache.stratos.cloud.controller.domain.kubernetes.KubernetesMaster;
 import org.apache.stratos.messaging.domain.topology.*;
 import org.apache.stratos.messaging.event.topology.MemberReadyToShutdownEvent;
 
@@ -1076,52 +1076,52 @@ public class CloudControllerServiceImpl implements CloudControllerService {
     }
 
     @Override
-    public KubernetesGroup[] getKubernetesGroups() {
-        return CloudControllerContext.getInstance().getKubernetesGroups();
+    public KubernetesCluster[] getKubernetesClusters() {
+        return CloudControllerContext.getInstance().getKubernetesClusters();
     }
 
     @Override
-    public KubernetesGroup getKubernetesGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException {
-        return CloudControllerContext.getInstance().getKubernetesGroup(kubernetesGroupId);
+    public KubernetesCluster getKubernetesCluster(String kubernetesClusterId) throws NonExistingKubernetesClusterException {
+        return CloudControllerContext.getInstance().getKubernetesCluster(kubernetesClusterId);
     }
 
     @Override
-    public KubernetesMaster getMasterForKubernetesGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException {
-        return CloudControllerContext.getInstance().getKubernetesMasterInGroup(kubernetesGroupId);
+    public KubernetesMaster getMasterForKubernetesCluster(String kubernetesClusterId) throws NonExistingKubernetesClusterException {
+        return CloudControllerContext.getInstance().getKubernetesMasterInGroup(kubernetesClusterId);
     }
 
     @Override
-    public KubernetesHost[] getHostsForKubernetesGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException {
-        return CloudControllerContext.getInstance().getKubernetesHostsInGroup(kubernetesGroupId);
+    public KubernetesHost[] getHostsForKubernetesCluster(String kubernetesClusterId) throws NonExistingKubernetesClusterException {
+        return CloudControllerContext.getInstance().getKubernetesHostsInGroup(kubernetesClusterId);
     }
 
 
     @Override
-    public boolean addKubernetesGroup(KubernetesGroup kubernetesGroup) throws InvalidKubernetesGroupException {
-        if (kubernetesGroup == null) {
-            throw new InvalidKubernetesGroupException("Kubernetes Group can not be null");
+    public boolean addKubernetesCluster(KubernetesCluster kubernetesCluster) throws InvalidKubernetesClusterException {
+        if (kubernetesCluster == null) {
+            throw new InvalidKubernetesClusterException("Kubernetes cluster can not be null");
         }
 
         Lock lock = null;
         try {
-            lock = CloudControllerContext.getInstance().acquireKubernetesGroupWriteLock();
+            lock = CloudControllerContext.getInstance().acquireKubernetesClusterWriteLock();
 
             if (log.isInfoEnabled()) {
-                log.info("Deploying new Kubernetes group: " + kubernetesGroup);
+                log.info("Deploying new Kubernetes cluster: " + kubernetesCluster);
             }
-            CloudControllerUtil.validateKubernetesGroup(kubernetesGroup);
+            CloudControllerUtil.validateKubernetesCluster(kubernetesCluster);
 
             // Add to information model
-            CloudControllerContext.getInstance().addKubernetesGroup(kubernetesGroup);
+            CloudControllerContext.getInstance().addKubernetesCluster(kubernetesCluster);
             CloudControllerContext.getInstance().persist();
 
             if (log.isInfoEnabled()) {
-                log.info(String.format("Kubernetes group added successfully: [id] %s, [description] %s",
-                        kubernetesGroup.getGroupId(), kubernetesGroup.getDescription()));
+                log.info(String.format("Kubernetes cluster added successfully: [id] %s, [description] %s",
+                        kubernetesCluster.getClusterId(), kubernetesCluster.getDescription()));
             }
             return true;
         } catch (Exception e) {
-            throw new InvalidKubernetesGroupException(e.getMessage(), e);
+            throw new InvalidKubernetesClusterException(e.getMessage(), e);
         } finally {
             if (lock != null) {
                 CloudControllerContext.getInstance().releaseWriteLock(lock);
@@ -1130,45 +1130,45 @@ public class CloudControllerServiceImpl implements CloudControllerService {
     }
 
     @Override
-    public boolean addKubernetesHost(String kubernetesGroupId, KubernetesHost kubernetesHost) throws
-            InvalidKubernetesHostException, NonExistingKubernetesGroupException {
+    public boolean addKubernetesHost(String kubernetesClusterId, KubernetesHost kubernetesHost) throws
+            InvalidKubernetesHostException, NonExistingKubernetesClusterException {
         if (kubernetesHost == null) {
             throw new InvalidKubernetesHostException("Kubernetes host can not be null");
         }
-        if (StringUtils.isEmpty(kubernetesGroupId)) {
-            throw new NonExistingKubernetesGroupException("Kubernetes group id can not be null");
+        if (StringUtils.isEmpty(kubernetesClusterId)) {
+            throw new NonExistingKubernetesClusterException("Kubernetes cluster id can not be null");
         }
 
         Lock lock = null;
         try {
-            lock = CloudControllerContext.getInstance().acquireKubernetesGroupWriteLock();
+            lock = CloudControllerContext.getInstance().acquireKubernetesClusterWriteLock();
 
             if (log.isInfoEnabled()) {
-                log.info("Deploying new Kubernetes Host: " + kubernetesHost + " for Kubernetes group id: " + kubernetesGroupId);
+                log.info("Deploying new Kubernetes Host: " + kubernetesHost + " for Kubernetes cluster id: " + kubernetesClusterId);
             }
             CloudControllerUtil.validateKubernetesHost(kubernetesHost);
 
-            KubernetesGroup kubernetesGroupStored = getKubernetesGroup(kubernetesGroupId);
+            KubernetesCluster kubernetesClusterStored = getKubernetesCluster(kubernetesClusterId);
             ArrayList<KubernetesHost> kubernetesHostArrayList;
 
-            if (kubernetesGroupStored.getKubernetesHosts() == null) {
+            if (kubernetesClusterStored.getKubernetesHosts() == null) {
                 kubernetesHostArrayList = new ArrayList<KubernetesHost>();
             } else {
                 if (CloudControllerContext.getInstance().kubernetesHostExists(kubernetesHost.getHostId())) {
                     throw new InvalidKubernetesHostException("Kubernetes host already exists: [id] " + kubernetesHost.getHostId());
                 }
                 kubernetesHostArrayList = new
-                        ArrayList<KubernetesHost>(Arrays.asList(kubernetesGroupStored.getKubernetesHosts()));
+                        ArrayList<KubernetesHost>(Arrays.asList(kubernetesClusterStored.getKubernetesHosts()));
             }
             kubernetesHostArrayList.add(kubernetesHost);
 
             // Update information model
-            kubernetesGroupStored.setKubernetesHosts(kubernetesHostArrayList.toArray(new KubernetesHost[kubernetesHostArrayList.size()]));
-            CloudControllerContext.getInstance().updateKubernetesGroup(kubernetesGroupStored);
+            kubernetesClusterStored.setKubernetesHosts(kubernetesHostArrayList.toArray(new KubernetesHost[kubernetesHostArrayList.size()]));
+            CloudControllerContext.getInstance().updateKubernetesCluster(kubernetesClusterStored);
             CloudControllerContext.getInstance().persist();
 
             if (log.isInfoEnabled()) {
-                log.info(String.format("Kubernetes host added successfully: [id] %s", kubernetesGroupStored.getGroupId()));
+                log.info(String.format("Kubernetes host added successfully: [id] %s", kubernetesClusterStored.getClusterId()));
             }
 
             return true;
@@ -1182,31 +1182,31 @@ public class CloudControllerServiceImpl implements CloudControllerService {
     }
 
     @Override
-    public boolean removeKubernetesGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException {
-        if (StringUtils.isEmpty(kubernetesGroupId)) {
-            throw new NonExistingKubernetesGroupException("Kubernetes group id can not be empty");
+    public boolean removeKubernetesCluster(String kubernetesClusterId) throws NonExistingKubernetesClusterException {
+        if (StringUtils.isEmpty(kubernetesClusterId)) {
+            throw new NonExistingKubernetesClusterException("Kubernetes cluster id can not be empty");
         }
 
         Lock lock = null;
         try {
-            lock = CloudControllerContext.getInstance().acquireKubernetesGroupWriteLock();
+            lock = CloudControllerContext.getInstance().acquireKubernetesClusterWriteLock();
 
             if (log.isInfoEnabled()) {
-                log.info("Removing Kubernetes group: " + kubernetesGroupId);
+                log.info("Removing Kubernetes cluster: " + kubernetesClusterId);
             }
             try {
                 // Remove entry from information model
-                CloudControllerContext.getInstance().removeKubernetesGroup(kubernetesGroupId);
+                CloudControllerContext.getInstance().removeKubernetesCluster(kubernetesClusterId);
 
                 if (log.isInfoEnabled()) {
-                    log.info(String.format("Kubernetes group removed successfully: [id] %s", kubernetesGroupId));
+                    log.info(String.format("Kubernetes cluster removed successfully: [id] %s", kubernetesClusterId));
                 }
 
                 CloudControllerContext.getInstance().persist();
 
                 return true;
             } catch (Exception e) {
-                throw new NonExistingKubernetesGroupException(e.getMessage(), e);
+                throw new NonExistingKubernetesClusterException(e.getMessage(), e);
             }
         } finally {
             if (lock != null) {
@@ -1223,34 +1223,34 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 
         Lock lock = null;
         try {
-            lock = CloudControllerContext.getInstance().acquireKubernetesGroupWriteLock();
+            lock = CloudControllerContext.getInstance().acquireKubernetesClusterWriteLock();
 
             if (log.isInfoEnabled()) {
                 log.info("Removing Kubernetes Host: " + kubernetesHostId);
             }
             try {
-                KubernetesGroup kubernetesGroupStored = CloudControllerContext.getInstance().getKubernetesGroupContainingHost(kubernetesHostId);
+                KubernetesCluster kubernetesClusterStored = CloudControllerContext.getInstance().getKubernetesClusterContainingHost(kubernetesHostId);
 
                 // Kubernetes master can not be removed
-                if (kubernetesGroupStored.getKubernetesMaster().getHostId().equals(kubernetesHostId)) {
+                if (kubernetesClusterStored.getKubernetesMaster().getHostId().equals(kubernetesHostId)) {
                     throw new NonExistingKubernetesHostException("Kubernetes master is not allowed to be removed [id] " + kubernetesHostId);
                 }
 
                 List<KubernetesHost> kubernetesHostList = new ArrayList<KubernetesHost>();
-                for (KubernetesHost kubernetesHost : kubernetesGroupStored.getKubernetesHosts()) {
+                for (KubernetesHost kubernetesHost : kubernetesClusterStored.getKubernetesHosts()) {
                     if (!kubernetesHost.getHostId().equals(kubernetesHostId)) {
                         kubernetesHostList.add(kubernetesHost);
                     }
                 }
                 // member count will be equal only when host object was not found
-                if (kubernetesHostList.size() == kubernetesGroupStored.getKubernetesHosts().length) {
+                if (kubernetesHostList.size() == kubernetesClusterStored.getKubernetesHosts().length) {
                     throw new NonExistingKubernetesHostException("Kubernetes host not found for [id] " + kubernetesHostId);
                 }
                 KubernetesHost[] kubernetesHostsArray = new KubernetesHost[kubernetesHostList.size()];
                 kubernetesHostList.toArray(kubernetesHostsArray);
 
                 // Update information model
-                kubernetesGroupStored.setKubernetesHosts(kubernetesHostsArray);
+                kubernetesClusterStored.setKubernetesHosts(kubernetesHostsArray);
 
                 if (log.isInfoEnabled()) {
                     log.info(String.format("Kubernetes host removed successfully: [id] %s", kubernetesHostId));
@@ -1274,16 +1274,16 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             throws InvalidKubernetesMasterException, NonExistingKubernetesMasterException {
         Lock lock = null;
         try {
-            lock = CloudControllerContext.getInstance().acquireKubernetesGroupWriteLock();
+            lock = CloudControllerContext.getInstance().acquireKubernetesClusterWriteLock();
             CloudControllerUtil.validateKubernetesMaster(kubernetesMaster);
             if (log.isInfoEnabled()) {
                 log.info("Updating Kubernetes master: " + kubernetesMaster);
             }
             try {
-                KubernetesGroup kubernetesGroupStored = CloudControllerContext.getInstance().getKubernetesGroupContainingHost(kubernetesMaster.getHostId());
+                KubernetesCluster kubernetesClusterStored = CloudControllerContext.getInstance().getKubernetesClusterContainingHost(kubernetesMaster.getHostId());
 
                 // Update information model
-                kubernetesGroupStored.setKubernetesMaster(kubernetesMaster);
+                kubernetesClusterStored.setKubernetesMaster(kubernetesMaster);
 
                 CloudControllerContext.getInstance().persist();
 
@@ -1308,24 +1308,24 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 
         Lock lock = null;
         try {
-            lock = CloudControllerContext.getInstance().acquireKubernetesGroupWriteLock();
+            lock = CloudControllerContext.getInstance().acquireKubernetesClusterWriteLock();
             CloudControllerUtil.validateKubernetesHost(kubernetesHost);
             if (log.isInfoEnabled()) {
                 log.info("Updating Kubernetes Host: " + kubernetesHost);
             }
 
             try {
-                KubernetesGroup kubernetesGroupStored = CloudControllerContext.getInstance().getKubernetesGroupContainingHost(kubernetesHost.getHostId());
-                for (int i = 0; i < kubernetesGroupStored.getKubernetesHosts().length; i++) {
-                    if (kubernetesGroupStored.getKubernetesHosts()[i].getHostId().equals(kubernetesHost.getHostId())) {
+                KubernetesCluster kubernetesClusterStored = CloudControllerContext.getInstance().getKubernetesClusterContainingHost(kubernetesHost.getHostId());
+                for (int i = 0; i < kubernetesClusterStored.getKubernetesHosts().length; i++) {
+                    if (kubernetesClusterStored.getKubernetesHosts()[i].getHostId().equals(kubernetesHost.getHostId())) {
                         // Update the information model
-                        kubernetesGroupStored.getKubernetesHosts()[i] = kubernetesHost;
+                        kubernetesClusterStored.getKubernetesHosts()[i] = kubernetesHost;
 
                         if (log.isInfoEnabled()) {
                             log.info(String.format("Kubernetes host updated successfully: [id] %s", kubernetesHost.getHostId()));
                         }
 
-                        CloudControllerContext.getInstance().updateKubernetesGroup(kubernetesGroupStored);
+                        CloudControllerContext.getInstance().updateKubernetesCluster(kubernetesClusterStored);
                         CloudControllerContext.getInstance().persist();
                         return true;
                     }