You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by ni...@apache.org on 2014/12/02 15:12:51 UTC

[2/3] stratos git commit: Moving Kubernetes Host registration to CC.

Moving Kubernetes Host registration to CC.


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

Branch: refs/heads/master
Commit: 98244f78717fb3502653f0ea5963beb75bbfdcff
Parents: e20df6f
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Tue Dec 2 19:35:31 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Tue Dec 2 19:39:19 2014 +0530

----------------------------------------------------------------------
 .../context/CloudControllerContext.java         | 156 ++++
 .../InvalidKubernetesGroupException.java        |  49 ++
 .../InvalidKubernetesHostException.java         |  49 ++
 .../InvalidKubernetesMasterException.java       |  27 +
 .../KubernetesEndpointValidationException.java  |  52 ++
 .../NonExistingKubernetesGroupException.java    |  49 ++
 .../NonExistingKubernetesHostException.java     |  48 ++
 .../NonExistingKubernetesMasterException.java   |  48 ++
 .../services/CloudControllerService.java        |  82 +-
 .../impl/CloudControllerServiceImpl.java        | 218 +++++
 .../util/CloudControllerConstants.java          |   6 +
 .../controller/util/CloudControllerUtil.java    | 112 +++
 .../org/apache/stratos/common/Properties.java   |  49 +-
 .../common/kubernetes/KubernetesGroup.java      |   1 +
 .../common/kubernetes/KubernetesHost.java       |   1 +
 .../common/kubernetes/KubernetesMaster.java     |   2 +
 .../stratos/common/kubernetes/PortRange.java    |   1 +
 .../client/CloudControllerServiceClient.java    |  58 +-
 .../rest/endpoint/api/StratosApiV41Utils.java   |  99 ++-
 .../bean/util/converter/PojoConverter.java      |  79 +-
 .../pom.xml                                     |   3 +-
 .../main/resources/CloudControllerService.wsdl  | 860 +++++++++++++++++--
 22 files changed, 1887 insertions(+), 162 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/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 eeee5d5..2a7dafb 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
@@ -20,10 +20,15 @@ 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.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.*;
+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;
@@ -31,8 +36,12 @@ import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
 import org.wso2.carbon.databridge.agent.thrift.AsyncDataPublisher;
 import org.wso2.carbon.registry.core.exceptions.RegistryException;
 
+import com.google.common.net.InetAddresses;
+
 import java.io.Serializable;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -49,6 +58,7 @@ public class CloudControllerContext implements Serializable {
     private static final long serialVersionUID = -2662307358852779897L;
     private static final Log log = LogFactory.getLog(CloudControllerContext.class);
 
+    public static final String KUB_GROUP_ID_TO_GROUP_MAP = "KUB_GROUP_ID_TO_GROUP_MAP";
     public static final String CC_CLUSTER_ID_TO_MEMBER_CTX = "CC_CLUSTER_ID_TO_MEMBER_CTX";
     public static final String CC_MEMBER_ID_TO_MEMBER_CTX = "CC_MEMBER_ID_TO_MEMBER_CTX";
     public static final String CC_MEMBER_ID_TO_SCH_TASK = "CC_MEMBER_ID_TO_SCH_TASK";
@@ -63,6 +73,13 @@ public class CloudControllerContext implements Serializable {
     private final DistributedObjectProvider distributedObjectProvider;
 
 	/* We keep following maps in order to make the look up time, small. */
+    
+    /** 
+     * KubernetesGroups against groupIds
+     * Key - Kubernetes group id
+     * Value - {@link KubernetesGroup}
+     */
+    private Map<String, KubernetesGroup> kubernetesGroupsMap;
 
     /**
      * Key - cluster id
@@ -134,6 +151,7 @@ public class CloudControllerContext implements Serializable {
         distributedObjectProvider = ServiceReferenceHolder.getInstance().getDistributedObjectProvider();
 
         // Initialize objects
+        kubernetesGroupsMap = distributedObjectProvider.getMap(KUB_GROUP_ID_TO_GROUP_MAP);
         clusterIdToMemberContextListMap = distributedObjectProvider.getMap(CC_CLUSTER_ID_TO_MEMBER_CTX);
         memberIdToMemberContextMap = distributedObjectProvider.getMap(CC_MEMBER_ID_TO_MEMBER_CTX);
         memberIdToScheduledTaskMap = distributedObjectProvider.getMap(CC_MEMBER_ID_TO_SCH_TASK);
@@ -364,6 +382,143 @@ public class CloudControllerContext implements Serializable {
                 kubernetesClusterContext.getKubernetesClusterId(),
                 kubernetesClusterContext);
     }
+    
+    /**
+     * Remove a registered Kubernetes group from registry
+     */
+    public synchronized void removeKubernetesGroup(String kubernetesGroupId) {
+        // Remove entry from information model
+        distributedObjectProvider.removeFromMap(kubernetesGroupsMap, kubernetesGroupId);
+    }
+
+    /**
+     * Remove a registered Kubernetes host from registry
+     */
+    public synchronized boolean removeKubernetesHost(String kubernetesHostId) throws NonExistingKubernetesHostException {
+        if (kubernetesHostId == null) {
+            throw new NonExistingKubernetesHostException("Kubernetes host id can not be null");
+        }
+        if (log.isInfoEnabled()) {
+            log.info("Removing Kubernetes Host: " + kubernetesHostId);
+        }
+        try {
+            KubernetesGroup kubernetesGroupStored = getKubernetesGroupContainingHost(kubernetesHostId);
+
+            // Kubernetes master can not be removed
+            if (kubernetesGroupStored.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()) {
+                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) {
+                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);
+
+            if (log.isInfoEnabled()) {
+                log.info(String.format("Kubernetes host removed successfully: [id] %s", kubernetesHostId));
+            }
+
+            return true;
+        } catch (Exception e) {
+            throw new NonExistingKubernetesHostException(e.getMessage(), e);
+        }
+    }
+
+    public void addKubernetesGroupToInformationModel(KubernetesGroup kubernetesGroup) {
+        distributedObjectProvider.putToMap(kubernetesGroupsMap, kubernetesGroup.getGroupId(), kubernetesGroup);
+    }
+    
+    public boolean kubernetesGroupExists(KubernetesGroup kubernetesGroup) {
+        return kubernetesGroupsMap.containsKey(kubernetesGroup);
+    }
+
+    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()) {
+                    if (kubernetesHost.getHostId().equals(hostId)) {
+                        return true;
+                    }
+                }
+            }
+            if (hostId.equals(kubernetesGroup.getKubernetesMaster().getHostId())) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+
+    public KubernetesHost[] getKubernetesHostsInGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException {
+        if (StringUtils.isEmpty(kubernetesGroupId)) {
+            throw new NonExistingKubernetesGroupException("Cannot find for empty group id");
+        }
+
+        KubernetesGroup kubernetesGroup = kubernetesGroupsMap.get(kubernetesGroupId);
+        if (kubernetesGroup != null) {
+            return kubernetesGroup.getKubernetesHosts();
+        }
+        throw new NonExistingKubernetesGroupException("Kubernetes group not found for group id: " + kubernetesGroupId);
+    }
+
+    public KubernetesMaster getKubernetesMasterInGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException {
+        if (StringUtils.isEmpty(kubernetesGroupId)) {
+            throw new NonExistingKubernetesGroupException("Cannot find for empty group id");
+        }
+        KubernetesGroup kubernetesGroup = kubernetesGroupsMap.get(kubernetesGroupId);
+        if (kubernetesGroup != null) {
+            return kubernetesGroup.getKubernetesMaster();
+        }
+        throw new NonExistingKubernetesGroupException("Kubernetes master not found for group id: " + kubernetesGroupId);
+    }
+
+    public KubernetesGroup getKubernetesGroup(String groupId) throws NonExistingKubernetesGroupException {
+        if (StringUtils.isEmpty(groupId)) {
+            throw new NonExistingKubernetesGroupException("Cannot find for empty group id");
+        }
+        KubernetesGroup kubernetesGroup = kubernetesGroupsMap.get(groupId);
+        if (kubernetesGroup != null) {
+            return kubernetesGroup;
+        }
+        throw new NonExistingKubernetesGroupException("Kubernetes group not found for id: " + groupId);
+    }
+
+    public KubernetesGroup getKubernetesGroupContainingHost(String hostId) throws NonExistingKubernetesGroupException {
+        if (StringUtils.isEmpty(hostId)) {
+            return null;
+        }
+        for (KubernetesGroup kubernetesGroup : kubernetesGroupsMap.values()) {
+            if (hostId.equals(kubernetesGroup.getKubernetesMaster().getHostId())) {
+                return kubernetesGroup;
+            }
+            if (kubernetesGroup.getKubernetesHosts() != null) {
+                for (KubernetesHost kubernetesHost : kubernetesGroup.getKubernetesHosts()) {
+                    if (kubernetesHost.getHostId().equals(hostId)) {
+                        return kubernetesGroup;
+                    }
+                }
+            }
+        }
+        throw new NonExistingKubernetesGroupException("Kubernetes group not found containing host id: " + hostId);
+    }
+
+    public KubernetesGroup[] getKubernetesGroups() {
+        return kubernetesGroupsMap.values().toArray(new KubernetesGroup[kubernetesGroupsMap.size()]);
+    }
 
     public boolean isClustered() {
         return clustered;
@@ -390,6 +545,7 @@ public class CloudControllerContext implements Serializable {
                     if (dataObj instanceof CloudControllerContext) {
                         CloudControllerContext serializedObj = (CloudControllerContext) dataObj;
 
+                        copyMap(kubernetesGroupsMap, serializedObj.kubernetesGroupsMap);
                         copyMap(clusterIdToMemberContextListMap, serializedObj.clusterIdToMemberContextListMap);
                         copyMap(memberIdToMemberContextMap, serializedObj.memberIdToMemberContextMap);
                         copyMap(memberIdToScheduledTaskMap, serializedObj.memberIdToScheduledTaskMap);

http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/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
new file mode 100644
index 0000000..db5fb30
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesGroupException.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 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/98244f78/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesHostException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesHostException.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesHostException.java
new file mode 100644
index 0000000..0aa789e
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesHostException.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 Host
+ */
+public class InvalidKubernetesHostException extends Exception {
+
+    private String message;
+
+    public InvalidKubernetesHostException(String message, Exception exception){
+        super(message, exception);
+        this.message = message;
+    }
+
+    public InvalidKubernetesHostException(Exception exception){
+        super(exception);
+    }
+
+    public InvalidKubernetesHostException(String msg){
+        super(msg);
+        this.message = msg;
+    }
+
+    @Override
+    public String getMessage() {
+        return this.message;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesMasterException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesMasterException.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesMasterException.java
new file mode 100644
index 0000000..da52e9a
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/InvalidKubernetesMasterException.java
@@ -0,0 +1,27 @@
+package org.apache.stratos.cloud.controller.exception;
+
+/**
+ * Exception class for handling invalid Kubernetes Master
+ */
+public class InvalidKubernetesMasterException extends Exception {
+    private String message;
+
+    public InvalidKubernetesMasterException(String message, Exception exception){
+        super(message, exception);
+        this.message = message;
+    }
+
+    public InvalidKubernetesMasterException(Exception exception){
+        super(exception);
+    }
+
+    public InvalidKubernetesMasterException(String msg){
+        super(msg);
+        this.message = msg;
+    }
+
+    @Override
+    public String getMessage() {
+        return this.message;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/KubernetesEndpointValidationException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/KubernetesEndpointValidationException.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/KubernetesEndpointValidationException.java
new file mode 100644
index 0000000..8394a62
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/KubernetesEndpointValidationException.java
@@ -0,0 +1,52 @@
+/*
+ *
+ * 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 Kubernetes endpoint validation
+ */
+public class KubernetesEndpointValidationException extends Exception {
+    private String message;
+
+    public KubernetesEndpointValidationException(String message, Exception exception){
+        super(message, exception);
+        this.setMessage(message);
+    }
+
+    public KubernetesEndpointValidationException(String msg) {
+        super(msg);
+        this.message = msg;
+    }
+    public KubernetesEndpointValidationException(Exception exception){
+        super(exception);
+    }
+
+
+    public String getMessage() {
+        return message;
+    }
+
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/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
new file mode 100644
index 0000000..ba48fbe
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesGroupException.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 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/98244f78/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesHostException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesHostException.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesHostException.java
new file mode 100644
index 0000000..afae051
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesHostException.java
@@ -0,0 +1,48 @@
+/*
+ *
+ * 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 Host
+ */
+public class NonExistingKubernetesHostException extends Exception {
+    private String message;
+
+    public NonExistingKubernetesHostException(String message, Exception exception){
+        super(message, exception);
+        this.message = message;
+    }
+
+    public NonExistingKubernetesHostException(Exception exception){
+        super(exception);
+    }
+
+    public NonExistingKubernetesHostException(String msg){
+        super(msg);
+        this.message = msg;
+    }
+
+    @Override
+    public String getMessage() {
+        return this.message;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesMasterException.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesMasterException.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesMasterException.java
new file mode 100644
index 0000000..8eb50c1
--- /dev/null
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/exception/NonExistingKubernetesMasterException.java
@@ -0,0 +1,48 @@
+/*
+ *
+ * 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 Master
+ */
+public class NonExistingKubernetesMasterException extends Exception {
+    private String message;
+
+    public NonExistingKubernetesMasterException(String message, Exception exception){
+        super(message, exception);
+        this.message = message;
+    }
+
+    public NonExistingKubernetesMasterException(Exception exception){
+        super(exception);
+    }
+
+    public NonExistingKubernetesMasterException(String msg){
+        super(msg);
+        this.message = msg;
+    }
+
+    @Override
+    public String getMessage() {
+        return this.message;
+    }
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/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 487abfd..87e8913 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
@@ -19,8 +19,10 @@
 package org.apache.stratos.cloud.controller.services;
 
 import org.apache.stratos.cloud.controller.domain.*;
-import org.apache.stratos.cloud.controller.domain.Partition;
 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.messaging.domain.topology.ClusterStatus;
 
 /**
@@ -228,4 +230,82 @@ public interface CloudControllerService {
      */
     public void createClusterInstance (String serviceType, String clusterId, String alias, String instanceId) throws
             ClusterInstanceCreationException;
+    
+    /**
+     * Retrieves registered Kubernetes Groups.
+     */
+    public KubernetesGroup[] getAllKubernetesGroups();
+
+    /**
+     * Retrieves Kubernetes Group for given Kubernetes Group ID.
+     *
+     * @param kubernetesGroupId
+     */
+    public KubernetesGroup getKubernetesGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException;
+
+    /**
+     * Retrieves Kubernetes Master for given Kubernetes Group ID.
+     *
+     * @param kubernetesGroupId
+     */
+    public KubernetesMaster getMasterForKubernetesGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException;
+
+    /**
+     * Retrieves Kubernetes Hosts for given Kubernetes Group ID.
+     *
+     * @param kubernetesGroupId
+     */
+    public KubernetesHost[] getHostsForKubernetesGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException;
+
+    /**
+     * Register a Kubernetes cluster.
+     *
+     * @param kubernetesGroup
+     * @throws org.apache.stratos.autoscaler.exception.kubernetes.InvalidKubernetesGroupException
+     */
+    public boolean addKubernetesGroup(KubernetesGroup kubernetesGroup) throws InvalidKubernetesGroupException;
+
+    /**
+     * Add a Kubernetes host to a Kubernetes Group.
+     *
+     * @param groupId
+     * @param kubernetesHost
+     * @throws org.apache.stratos.autoscaler.exception.kubernetes.InvalidKubernetesHostException
+     */
+    public boolean addKubernetesHost(String groupId, KubernetesHost kubernetesHost) throws
+            InvalidKubernetesHostException, NonExistingKubernetesGroupException;
+
+    /**
+     * Update a Kubernetes host.
+     *
+     * @param kubernetesHost
+     * @throws InvalidKubernetesHostException
+     */
+    public boolean updateKubernetesHost(KubernetesHost kubernetesHost) throws
+            InvalidKubernetesHostException, NonExistingKubernetesHostException;
+
+    /**
+     * Remove a Kubernetes host.
+     *
+     * @param groupId
+     * @throws NonExistingKubernetesGroupException
+     */
+    public boolean removeKubernetesGroup(String groupId) throws NonExistingKubernetesGroupException;
+
+    /**
+     * Update a Kubernetes host.
+     *
+     * @param hostId
+     * @throws InvalidKubernetesHostException
+     */
+    public boolean removeKubernetesHost(String hostId) throws NonExistingKubernetesHostException;
+
+    /**
+     * Update a Kubernetes Master in a Kubernetes Group.
+     *
+     * @param kubernetesMaster
+     * @throws NonExistingKubernetesMasterException
+     */
+    public boolean updateKubernetesMaster(KubernetesMaster kubernetesMaster)
+            throws InvalidKubernetesMasterException, NonExistingKubernetesMasterException;
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/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 f165a00..53f28fa 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
@@ -49,6 +49,9 @@ import org.apache.stratos.cloud.controller.iaases.Iaas;
 import org.apache.stratos.cloud.controller.iaases.validators.PartitionValidator;
 import org.apache.stratos.common.*;
 import org.apache.stratos.common.constants.StratosConstants;
+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.kubernetes.client.KubernetesApiClient;
 import org.apache.stratos.kubernetes.client.exceptions.KubernetesClientException;
 import org.apache.stratos.kubernetes.client.model.Label;
@@ -2049,6 +2052,221 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 
         persist();
     }
+    
+    @Override
+    public KubernetesGroup[] getAllKubernetesGroups() {
+        return cloudControllerContext.getKubernetesGroups();
+    }
+
+    @Override
+    public KubernetesGroup getKubernetesGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException {
+        return cloudControllerContext.getKubernetesGroup(kubernetesGroupId);
+    }
+
+    @Override
+    public KubernetesMaster getMasterForKubernetesGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException {
+        return cloudControllerContext.getKubernetesMasterInGroup(kubernetesGroupId);
+    }
+
+    @Override
+    public KubernetesHost[] getHostsForKubernetesGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException {
+        return cloudControllerContext.getKubernetesHostsInGroup(kubernetesGroupId);
+    }
+
+
+    @Override
+    public boolean addKubernetesGroup(KubernetesGroup kubernetesGroup) throws InvalidKubernetesGroupException {
+        if (kubernetesGroup == null) {
+            throw new InvalidKubernetesGroupException("Kubernetes Group can not be null");
+        }
+        if (LOG.isInfoEnabled()) {
+            LOG.info("Deploying new Kubernetes group: " + kubernetesGroup);
+        }
+        CloudControllerUtil.validateKubernetesGroup(kubernetesGroup);
+        try {
+            // Add to information model
+            cloudControllerContext.addKubernetesGroupToInformationModel(kubernetesGroup);
+
+            persist();
+            
+            if (LOG.isInfoEnabled()) {
+                LOG.info(String.format("Kubernetes group deployed successfully: [id] %s, [description] %s",
+                        kubernetesGroup.getGroupId(), kubernetesGroup.getDescription()));
+            }
+            
+            return true;
+        } catch (Exception e) {
+            throw new InvalidKubernetesGroupException(e.getMessage(), e);
+        }
+    }
+    
+    @Override
+    public boolean addKubernetesHost(String kubernetesGroupId, KubernetesHost kubernetesHost) throws
+            InvalidKubernetesHostException, NonExistingKubernetesGroupException {
+        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 (LOG.isInfoEnabled()) {
+            LOG.info("Deploying new Kubernetes Host: " + kubernetesHost + " for Kubernetes group id: " + kubernetesGroupId);
+        }
+        CloudControllerUtil.validateKubernetesHost(kubernetesHost);
+        try {
+            KubernetesGroup kubernetesGroupStored = getKubernetesGroup(kubernetesGroupId);
+            ArrayList<KubernetesHost> kubernetesHostArrayList;
+
+            if (kubernetesGroupStored.getKubernetesHosts() == null) {
+                kubernetesHostArrayList = new ArrayList<KubernetesHost>();
+            } else {
+                if (cloudControllerContext.kubernetesHostExists(kubernetesHost.getHostId())) {
+                    throw new InvalidKubernetesHostException("Kubernetes host already exists: [id] " + kubernetesHost.getHostId());
+                }
+                kubernetesHostArrayList = new
+                        ArrayList<KubernetesHost>(Arrays.asList(kubernetesGroupStored.getKubernetesHosts()));
+            }
+            kubernetesHostArrayList.add(kubernetesHost);
+
+            // Update information model
+            kubernetesGroupStored.setKubernetesHosts(kubernetesHostArrayList.toArray(new KubernetesHost[kubernetesHostArrayList.size()]));
+
+            persist();
+            
+            if (LOG.isInfoEnabled()) {
+                LOG.info(String.format("Kubernetes host deployed successfully: [id] %s", kubernetesGroupStored.getGroupId()));
+            }
+            
+            return true;
+        } catch (Exception e) {
+            throw new InvalidKubernetesHostException(e.getMessage(), e);
+        }
+    }
+
+    @Override
+    public boolean removeKubernetesGroup(String kubernetesGroupId) throws NonExistingKubernetesGroupException {
+        if (StringUtils.isEmpty(kubernetesGroupId)) {
+            throw new NonExistingKubernetesGroupException("Kubernetes group id can not be empty");
+        }
+        if (LOG.isInfoEnabled()) {
+            LOG.info("Removing Kubernetes group: " + kubernetesGroupId);
+        }
+        try {
+            // Remove entry from information model
+            cloudControllerContext.removeKubernetesGroup(kubernetesGroupId);
+
+            if (LOG.isInfoEnabled()) {
+                LOG.info(String.format("Kubernetes group removed successfully: [id] %s", kubernetesGroupId));
+            }
+            
+            persist();
+            
+            return true;
+        } catch (Exception e) {
+            throw new NonExistingKubernetesGroupException(e.getMessage(), e);
+        }
+    }
+
+    @Override
+    public boolean removeKubernetesHost(String kubernetesHostId) throws NonExistingKubernetesHostException {
+        if (kubernetesHostId == null) {
+            throw new NonExistingKubernetesHostException("Kubernetes host id can not be null");
+        }
+        if (LOG.isInfoEnabled()) {
+            LOG.info("Removing Kubernetes Host: " + kubernetesHostId);
+        }
+        try {
+            KubernetesGroup kubernetesGroupStored = cloudControllerContext.getKubernetesGroupContainingHost(kubernetesHostId);
+
+            // Kubernetes master can not be removed
+            if (kubernetesGroupStored.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()) {
+                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) {
+                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);
+
+            if (LOG.isInfoEnabled()) {
+                LOG.info(String.format("Kubernetes host removed successfully: [id] %s", kubernetesHostId));
+            }
+            
+            persist();
+
+            return true;
+        } catch (Exception e) {
+            throw new NonExistingKubernetesHostException(e.getMessage(), e);
+        }
+    }
+
+    @Override
+    public boolean updateKubernetesMaster(KubernetesMaster kubernetesMaster)
+            throws InvalidKubernetesMasterException, NonExistingKubernetesMasterException {
+        CloudControllerUtil.validateKubernetesMaster(kubernetesMaster);
+        if (LOG.isInfoEnabled()) {
+            LOG.info("Updating Kubernetes master: " + kubernetesMaster);
+        }
+        try {
+            KubernetesGroup kubernetesGroupStored = cloudControllerContext.getKubernetesGroupContainingHost(kubernetesMaster.getHostId());
+
+            // Update information model
+            kubernetesGroupStored.setKubernetesMaster(kubernetesMaster);
+            
+            persist();
+
+            if (LOG.isInfoEnabled()) {
+                LOG.info(String.format("Kubernetes master updated successfully: [id] %s", kubernetesMaster.getHostId()));
+            }
+            
+            return true;
+        } catch (Exception e) {
+            throw new InvalidKubernetesMasterException(e.getMessage(), e);
+        }
+    }
+
+    @Override
+    public boolean updateKubernetesHost(KubernetesHost kubernetesHost) throws
+            InvalidKubernetesHostException, NonExistingKubernetesHostException {
+        CloudControllerUtil.validateKubernetesHost(kubernetesHost);
+        if (LOG.isInfoEnabled()) {
+            LOG.info("Updating Kubernetes Host: " + kubernetesHost);
+        }
+
+        try {
+            KubernetesGroup kubernetesGroupStored = cloudControllerContext.getKubernetesGroupContainingHost(kubernetesHost.getHostId());
+
+            for (int i = 0; i < kubernetesGroupStored.getKubernetesHosts().length; i++) {
+                if (kubernetesGroupStored.getKubernetesHosts()[i].getHostId().equals(kubernetesHost.getHostId())) {
+
+                    // Update the information model
+                    kubernetesGroupStored.getKubernetesHosts()[i] = kubernetesHost;
+
+                    if (LOG.isInfoEnabled()) {
+                        LOG.info(String.format("Kubernetes host updated successfully: [id] %s", kubernetesHost.getHostId()));
+                    }
+                    
+                    persist();
+
+                    return true;
+                }
+            }
+        } catch (Exception e) {
+            throw new InvalidKubernetesHostException(e.getMessage(), e);
+        }
+        throw new NonExistingKubernetesHostException("Kubernetes host not found [id] " + kubernetesHost.getHostId());
+    }
 
 //    public void deployApplicationDefinition (ApplicationContext applicationContext) throws ApplicationDefinitionException {
 //

http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java
index ffebdf8..8e5e4d5 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java
@@ -285,4 +285,10 @@ public final class CloudControllerConstants {
     public static final String NETWORK_IDS= "networkIds";
     
     public static final String IS_LOAD_BALANCER = "load.balancer";
+    
+    /**
+     * PortRange min max
+     */
+    public static final int PORT_RANGE_MAX = 65535;
+    public static final int PORT_RANGE_MIN = 1;
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/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 89131e3..e6c8d6f 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
@@ -18,6 +18,7 @@
  */
 package org.apache.stratos.cloud.controller.util;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -26,13 +27,21 @@ import org.apache.stratos.cloud.controller.context.CloudControllerContext;
 import org.apache.stratos.cloud.controller.domain.*;
 import org.apache.stratos.cloud.controller.exception.CloudControllerException;
 import org.apache.stratos.cloud.controller.exception.InvalidIaasProviderException;
+import org.apache.stratos.cloud.controller.exception.InvalidKubernetesGroupException;
+import org.apache.stratos.cloud.controller.exception.InvalidKubernetesHostException;
+import org.apache.stratos.cloud.controller.exception.InvalidKubernetesMasterException;
 import org.apache.stratos.cloud.controller.iaases.Iaas;
 import org.apache.stratos.cloud.controller.registry.Deserializer;
 import org.apache.stratos.cloud.controller.registry.RegistryManager;
 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.messaging.domain.topology.Topology;
 import org.wso2.carbon.registry.core.exceptions.RegistryException;
 
+import com.google.common.net.InetAddresses;
+
 import java.lang.reflect.Constructor;
 import java.util.Arrays;
 import java.util.ArrayList;
@@ -395,4 +404,107 @@ public class CloudControllerUtil {
 		}
 		return clusterId;
 	}
+	
+	public static void validateKubernetesGroup(KubernetesGroup kubernetesGroup) throws InvalidKubernetesGroupException {
+        CloudControllerContext context = CloudControllerContext.getInstance();
+	    
+	    if (kubernetesGroup == null) {
+            throw new InvalidKubernetesGroupException("Kubernetes group can not be null");
+        }
+        if (StringUtils.isEmpty(kubernetesGroup.getGroupId())) {
+            throw new InvalidKubernetesGroupException("Kubernetes group groupId can not be empty");
+        }
+        if (context.kubernetesGroupExists(kubernetesGroup)) {
+            throw new InvalidKubernetesGroupException(String.format("Kubernetes group already exists " +
+                    "[id] %s", kubernetesGroup.getGroupId()));
+        }
+        if (kubernetesGroup.getKubernetesMaster() == null) {
+            throw new InvalidKubernetesGroupException("Mandatory field master has not been set " +
+                    "for the Kubernetes group [id] " + kubernetesGroup.getGroupId());
+        }
+        if (kubernetesGroup.getPortRange() == null) {
+            throw new InvalidKubernetesGroupException("Mandatory field portRange has not been set " +
+                    "for the Kubernetes group [id] " + kubernetesGroup.getGroupId());
+        }
+
+        // Port range validation
+        if (kubernetesGroup.getPortRange().getUpper() > CloudControllerConstants.PORT_RANGE_MAX ||
+                kubernetesGroup.getPortRange().getUpper() < CloudControllerConstants.PORT_RANGE_MIN ||
+                kubernetesGroup.getPortRange().getLower() > CloudControllerConstants.PORT_RANGE_MAX ||
+                kubernetesGroup.getPortRange().getLower() < CloudControllerConstants.PORT_RANGE_MIN ||
+                kubernetesGroup.getPortRange().getUpper() < kubernetesGroup.getPortRange().getLower()) {
+            throw new InvalidKubernetesGroupException("Port range is invalid " +
+                    "for the Kubernetes group [id]" + kubernetesGroup.getGroupId());
+        }
+        try {
+            validateKubernetesMaster(kubernetesGroup.getKubernetesMaster());
+            validateKubernetesHosts(kubernetesGroup.getKubernetesHosts());
+
+            // check whether master already exists
+            if (context.kubernetesHostExists(kubernetesGroup.getKubernetesMaster().getHostId())) {
+                throw new InvalidKubernetesGroupException("Kubernetes host already exists [id] " +
+                        kubernetesGroup.getKubernetesMaster().getHostId());
+            }
+
+            // Check for duplicate hostIds
+            if (kubernetesGroup.getKubernetesHosts() != null) {
+                List<String> hostIds = new ArrayList<String>();
+                hostIds.add(kubernetesGroup.getKubernetesMaster().getHostId());
+
+                for (KubernetesHost kubernetesHost : kubernetesGroup.getKubernetesHosts()) {
+                    if (hostIds.contains(kubernetesHost.getHostId())) {
+                        throw new InvalidKubernetesGroupException(
+                                String.format("Kubernetes host [id] %s already defined in the request", kubernetesHost.getHostId()));
+                    }
+
+                    // check whether host already exists
+                    if (context.kubernetesHostExists(kubernetesHost.getHostId())) {
+                        throw new InvalidKubernetesGroupException("Kubernetes host already exists [id] " +
+                                kubernetesHost.getHostId());
+                    }
+
+                    hostIds.add(kubernetesHost.getHostId());
+                }
+            }
+
+        } catch (InvalidKubernetesHostException e) {
+            throw new InvalidKubernetesGroupException(e.getMessage());
+        } catch (InvalidKubernetesMasterException e) {
+            throw new InvalidKubernetesGroupException(e.getMessage());
+        }
+    }
+	
+	private static void validateKubernetesHosts(KubernetesHost[] kubernetesHosts) throws InvalidKubernetesHostException {
+        if (kubernetesHosts == null || kubernetesHosts.length == 0) {
+            return;
+        }
+        for (KubernetesHost kubernetesHost : kubernetesHosts) {
+            validateKubernetesHost(kubernetesHost);
+        }
+    }
+
+    public static void validateKubernetesHost(KubernetesHost kubernetesHost) throws InvalidKubernetesHostException {
+        if (kubernetesHost == null) {
+            throw new InvalidKubernetesHostException("Kubernetes host can not be null");
+        }
+        if (StringUtils.isEmpty(kubernetesHost.getHostId())) {
+            throw new InvalidKubernetesHostException("Kubernetes host id can not be empty");
+        }
+        if (kubernetesHost.getHostIpAddress() == null) {
+            throw new InvalidKubernetesHostException("Mandatory field Kubernetes host IP address has not been set " +
+                    "for [hostId] " + kubernetesHost.getHostId());
+        }
+        if (!InetAddresses.isInetAddress(kubernetesHost.getHostIpAddress())) {
+            throw new InvalidKubernetesHostException("Kubernetes host ip address is invalid: " + kubernetesHost.getHostIpAddress());
+        }
+    }
+
+    public static void validateKubernetesMaster(KubernetesMaster kubernetesMaster) throws InvalidKubernetesMasterException {
+        try {
+            validateKubernetesHost(kubernetesMaster);
+        } catch (InvalidKubernetesHostException e) {
+            throw new InvalidKubernetesMasterException(e.getMessage());
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/Properties.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/Properties.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/Properties.java
index 1b8ef93..f842672 100644
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/Properties.java
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/Properties.java
@@ -65,21 +65,44 @@ public class Properties implements Serializable {
     }
 
     @Override
-    public boolean equals(Object object) {
-        if (object == null) {
-            return false;
-        }
-
-        if (!(object instanceof Properties)) {
-            return false;
-        }
-
-        Properties propertiesObject = (Properties) object;
-        return Arrays.equals(propertiesObject.getProperties(), this.getProperties());
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((properties == null) ? 0 : properties.hashCode());
+        return result;
     }
 
     @Override
-    public int hashCode() {
-        return this.hashCode();
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        Properties other = (Properties) obj;
+        if (properties == null) {
+            if (other.properties != null)
+                return false;
+        } else if (!Arrays.equals(other.getProperties(), this.getProperties()))
+            return false;
+        return true;
     }
+
+//    @Override
+//    public boolean equals(Object object) {
+//        if (object == null) {
+//            return false;
+//        }
+//
+//        if (!(object instanceof Properties)) {
+//            return false;
+//        }
+//
+//        Properties propertiesObject = (Properties) object;
+//        return Arrays.equals(propertiesObject.getProperties(), this.getProperties());
+//    }
+    
+    
+
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesGroup.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesGroup.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesGroup.java
index 1244ab4..d7f54be 100644
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesGroup.java
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesGroup.java
@@ -29,6 +29,7 @@ import java.util.Arrays;
  */
 public class KubernetesGroup implements Serializable {
 
+    private static final long serialVersionUID = 3210149484906093132L;
     private String groupId;
     private KubernetesHost[] kubernetesHosts;
     private KubernetesMaster kubernetesMaster;

http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesHost.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesHost.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesHost.java
index 60baa12..49ed025 100644
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesHost.java
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesHost.java
@@ -31,6 +31,7 @@ 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;

http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesMaster.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesMaster.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesMaster.java
index a8cbf8f..25badf2 100644
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesMaster.java
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/KubernetesMaster.java
@@ -30,6 +30,8 @@ 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;

http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/PortRange.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/PortRange.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/PortRange.java
index 8225127..538c46a 100644
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/PortRange.java
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/kubernetes/PortRange.java
@@ -25,6 +25,7 @@ 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;
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/CloudControllerServiceClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/CloudControllerServiceClient.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/CloudControllerServiceClient.java
index 86c8d01..78e5307 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/CloudControllerServiceClient.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/client/CloudControllerServiceClient.java
@@ -32,14 +32,15 @@ import org.apache.stratos.cloud.controller.stub.domain.CartridgeConfig;
 import org.apache.stratos.cloud.controller.stub.domain.Registrant;
 import org.apache.stratos.cloud.controller.stub.domain.ServiceGroup;
 import org.apache.stratos.cloud.controller.stub.domain.Dependencies;
+import org.apache.stratos.cloud.controller.stub.kubernetes.KubernetesGroup;
+import org.apache.stratos.cloud.controller.stub.kubernetes.KubernetesHost;
+import org.apache.stratos.cloud.controller.stub.kubernetes.KubernetesMaster;
 import org.apache.stratos.common.Properties;
-import org.apache.stratos.common.Property;
 import org.apache.stratos.manager.internal.DataHolder;
 import org.apache.stratos.manager.utils.ApplicationManagementUtil;
 import org.apache.stratos.manager.utils.CartridgeConstants;
 
 import java.rmi.RemoteException;
-import java.util.Iterator;
 
 public class CloudControllerServiceClient {
 
@@ -161,4 +162,57 @@ public class CloudControllerServiceClient {
 
         return stub.getClusterContext(clusterId);
     }
+    
+    public boolean deployKubernetesGroup(KubernetesGroup kubernetesGroup) throws RemoteException,
+            CloudControllerServiceInvalidKubernetesGroupExceptionException {
+        return stub.addKubernetesGroup(kubernetesGroup);
+    }
+
+    public boolean deployKubernetesHost(String kubernetesGroupId, KubernetesHost kubernetesHost)
+            throws RemoteException, CloudControllerServiceInvalidKubernetesHostExceptionException,
+            CloudControllerServiceNonExistingKubernetesGroupExceptionException {
+
+        return stub.addKubernetesHost(kubernetesGroupId, kubernetesHost);
+    }
+
+    public boolean updateKubernetesMaster(KubernetesMaster kubernetesMaster) throws RemoteException,
+            CloudControllerServiceInvalidKubernetesMasterExceptionException,
+            CloudControllerServiceNonExistingKubernetesMasterExceptionException {
+        return stub.updateKubernetesMaster(kubernetesMaster);
+    }
+
+    public KubernetesGroup[] getAvailableKubernetesGroups() throws RemoteException {
+        return stub.getAllKubernetesGroups();
+    }
+
+    public KubernetesGroup getKubernetesGroup(String kubernetesGroupId) throws RemoteException,
+            CloudControllerServiceNonExistingKubernetesGroupExceptionException {
+        return stub.getKubernetesGroup(kubernetesGroupId);
+    }
+
+    public boolean undeployKubernetesGroup(String kubernetesGroupId) throws RemoteException,
+            CloudControllerServiceNonExistingKubernetesGroupExceptionException {
+        return stub.removeKubernetesGroup(kubernetesGroupId);
+    }
+
+    public boolean undeployKubernetesHost(String kubernetesHostId) throws RemoteException,
+            CloudControllerServiceNonExistingKubernetesHostExceptionException {
+        return stub.removeKubernetesHost(kubernetesHostId);
+    }
+
+    public KubernetesHost[] getKubernetesHosts(String kubernetesGroupId) throws RemoteException,
+            CloudControllerServiceNonExistingKubernetesGroupExceptionException {
+        return stub.getHostsForKubernetesGroup(kubernetesGroupId);
+    }
+
+    public KubernetesMaster getKubernetesMaster(String kubernetesGroupId) throws RemoteException,
+            CloudControllerServiceNonExistingKubernetesGroupExceptionException {
+        return stub.getMasterForKubernetesGroup(kubernetesGroupId);
+    }
+
+    public boolean updateKubernetesHost(KubernetesHost kubernetesHost) throws RemoteException,
+            CloudControllerServiceInvalidKubernetesHostExceptionException,
+            CloudControllerServiceNonExistingKubernetesHostExceptionException {
+        return stub.updateKubernetesHost(kubernetesHost);
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/98244f78/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
index 5e0c7bf..401d701 100644
--- a/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
+++ b/components/org.apache.stratos.rest.endpoint/src/main/java/org/apache/stratos/rest/endpoint/api/StratosApiV41Utils.java
@@ -26,9 +26,16 @@ import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.autoscaler.stub.pojo.ApplicationContext;
 import org.apache.stratos.autoscaler.stub.*;
 import org.apache.stratos.autoscaler.stub.deployment.policy.DeploymentPolicy;
+import org.apache.stratos.autoscaler.stub.exception.InvalidKubernetesGroupException;
 import org.apache.stratos.cloud.controller.stub.domain.CartridgeConfig;
 import org.apache.stratos.cloud.controller.stub.domain.CartridgeInfo;
 import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidCartridgeTypeExceptionException;
+import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidKubernetesGroupExceptionException;
+import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidKubernetesHostExceptionException;
+import org.apache.stratos.cloud.controller.stub.CloudControllerServiceInvalidKubernetesMasterExceptionException;
+import org.apache.stratos.cloud.controller.stub.CloudControllerServiceNonExistingKubernetesGroupExceptionException;
+import org.apache.stratos.cloud.controller.stub.CloudControllerServiceNonExistingKubernetesHostExceptionException;
+import org.apache.stratos.cloud.controller.stub.CloudControllerServiceNonExistingKubernetesMasterExceptionException;
 import org.apache.stratos.cloud.controller.stub.CloudControllerServiceUnregisteredCartridgeExceptionException;
 import org.apache.stratos.common.Property;
 import org.apache.stratos.manager.client.AutoscalerServiceClient;
@@ -1618,17 +1625,17 @@ public class StratosApiV41Utils {
 
     public static boolean deployKubernetesGroup(KubernetesGroup kubernetesGroupBean) throws RestAPIException {
 
-        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
-        if (autoscalerServiceClient != null) {
-            org.apache.stratos.autoscaler.stub.kubernetes.KubernetesGroup kubernetesGroup =
-                    PojoConverter.convertToASKubernetesGroupPojo(kubernetesGroupBean);
+        CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient();
+        if (cloudControllerServiceClient != null) {
+            org.apache.stratos.cloud.controller.stub.kubernetes.KubernetesGroup kubernetesGroup =
+                    PojoConverter.convertToCCKubernetesGroupPojo(kubernetesGroupBean);
 
             try {
-                return autoscalerServiceClient.deployKubernetesGroup(kubernetesGroup);
+                return cloudControllerServiceClient.deployKubernetesGroup(kubernetesGroup);
             } catch (RemoteException e) {
                 log.error(e.getMessage(), e);
                 throw new RestAPIException(e.getMessage(), e);
-            } catch (AutoScalerServiceInvalidKubernetesGroupExceptionException e) {
+            } catch (CloudControllerServiceInvalidKubernetesGroupExceptionException e) {
                 String message = e.getFaultMessage().getInvalidKubernetesGroupException().getMessage();
                 log.error(message, e);
                 throw new RestAPIException(message, e);
@@ -1640,21 +1647,21 @@ public class StratosApiV41Utils {
     public static boolean deployKubernetesHost(String kubernetesGroupId, KubernetesHost kubernetesHostBean)
             throws RestAPIException {
 
-        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
-        if (autoscalerServiceClient != null) {
-            org.apache.stratos.autoscaler.stub.kubernetes.KubernetesHost kubernetesHost =
-                    PojoConverter.convertToASKubernetesHostPojo(kubernetesHostBean);
+        CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient();
+        if (cloudControllerServiceClient != null) {
+            org.apache.stratos.cloud.controller.stub.kubernetes.KubernetesHost kubernetesHost =
+                    PojoConverter.convertToCCKubernetesHostPojo(kubernetesHostBean);
 
             try {
-                return autoscalerServiceClient.deployKubernetesHost(kubernetesGroupId, kubernetesHost);
+                return cloudControllerServiceClient.deployKubernetesHost(kubernetesGroupId, kubernetesHost);
             } catch (RemoteException e) {
                 log.error(e.getMessage(), e);
                 throw new RestAPIException(e.getMessage(), e);
-            } catch (AutoScalerServiceInvalidKubernetesHostExceptionException e) {
+            } catch (CloudControllerServiceInvalidKubernetesHostExceptionException e) {
                 String message = e.getFaultMessage().getInvalidKubernetesHostException().getMessage();
                 log.error(message, e);
                 throw new RestAPIException(message, e);
-            } catch (AutoScalerServiceNonExistingKubernetesGroupExceptionException e) {
+            } catch (CloudControllerServiceNonExistingKubernetesGroupExceptionException e) {
                 String message = e.getFaultMessage().getNonExistingKubernetesGroupException().getMessage();
                 log.error(message, e);
                 throw new RestAPIException(message, e);
@@ -1665,21 +1672,21 @@ public class StratosApiV41Utils {
 
     public static boolean updateKubernetesMaster(KubernetesMaster kubernetesMasterBean) throws RestAPIException {
 
-        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
-        if (autoscalerServiceClient != null) {
-            org.apache.stratos.autoscaler.stub.kubernetes.KubernetesMaster kubernetesMaster =
-                    PojoConverter.convertToASKubernetesMasterPojo(kubernetesMasterBean);
+        CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient();
+        if (cloudControllerServiceClient != null) {
+            org.apache.stratos.cloud.controller.stub.kubernetes.KubernetesMaster kubernetesMaster =
+                    PojoConverter.convertToCCKubernetesMasterPojo(kubernetesMasterBean);
 
             try {
-                return autoscalerServiceClient.updateKubernetesMaster(kubernetesMaster);
+                return cloudControllerServiceClient.updateKubernetesMaster(kubernetesMaster);
             } catch (RemoteException e) {
                 log.error(e.getMessage(), e);
                 throw new RestAPIException(e.getMessage(), e);
-            } catch (AutoScalerServiceInvalidKubernetesMasterExceptionException e) {
+            } catch (CloudControllerServiceInvalidKubernetesMasterExceptionException e) {
                 String message = e.getFaultMessage().getInvalidKubernetesMasterException().getMessage();
                 log.error(message, e);
                 throw new RestAPIException(message, e);
-            } catch (AutoScalerServiceNonExistingKubernetesMasterExceptionException e) {
+            } catch (CloudControllerServiceNonExistingKubernetesMasterExceptionException e) {
                 String message = e.getFaultMessage().getNonExistingKubernetesMasterException().getMessage();
                 log.error(message, e);
                 throw new RestAPIException(message, e);
@@ -1690,11 +1697,11 @@ public class StratosApiV41Utils {
 
     public static KubernetesGroup[] getAvailableKubernetesGroups() throws RestAPIException {
 
-        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
-        if (autoscalerServiceClient != null) {
+        CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient();
+        if (cloudControllerServiceClient != null) {
             try {
-                org.apache.stratos.autoscaler.stub.kubernetes.KubernetesGroup[]
-                        kubernetesGroups = autoscalerServiceClient.getAvailableKubernetesGroups();
+                org.apache.stratos.cloud.controller.stub.kubernetes.KubernetesGroup[]
+                        kubernetesGroups = cloudControllerServiceClient.getAvailableKubernetesGroups();
                 return PojoConverter.populateKubernetesGroupsPojo(kubernetesGroups);
 
             } catch (RemoteException e) {
@@ -1707,17 +1714,17 @@ public class StratosApiV41Utils {
 
     public static KubernetesGroup getKubernetesGroup(String kubernetesGroupId) throws RestAPIException {
 
-        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
-        if (autoscalerServiceClient != null) {
+        CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient();
+        if (cloudControllerServiceClient != null) {
             try {
-                org.apache.stratos.autoscaler.stub.kubernetes.KubernetesGroup
-                        kubernetesGroup = autoscalerServiceClient.getKubernetesGroup(kubernetesGroupId);
+                org.apache.stratos.cloud.controller.stub.kubernetes.KubernetesGroup
+                        kubernetesGroup = cloudControllerServiceClient.getKubernetesGroup(kubernetesGroupId);
                 return PojoConverter.populateKubernetesGroupPojo(kubernetesGroup);
 
             } catch (RemoteException e) {
                 log.error(e.getMessage(), e);
                 throw new RestAPIException(e.getMessage(), e);
-            } catch (AutoScalerServiceNonExistingKubernetesGroupExceptionException e) {
+            } catch (CloudControllerServiceNonExistingKubernetesGroupExceptionException e) {
                 String message = e.getFaultMessage().getNonExistingKubernetesGroupException().getMessage();
                 log.error(message, e);
                 throw new RestAPIException(message, e);
@@ -1766,11 +1773,11 @@ public class StratosApiV41Utils {
 
     public static KubernetesHost[] getKubernetesHosts(String kubernetesGroupId) throws RestAPIException {
 
-        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
-        if (autoscalerServiceClient != null) {
+        CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient();
+        if (cloudControllerServiceClient != null) {
             try {
-                org.apache.stratos.autoscaler.stub.kubernetes.KubernetesHost[]
-                        kubernetesHosts = autoscalerServiceClient.getKubernetesHosts(kubernetesGroupId);
+                org.apache.stratos.cloud.controller.stub.kubernetes.KubernetesHost[]
+                        kubernetesHosts = cloudControllerServiceClient.getKubernetesHosts(kubernetesGroupId);
 
                 List<KubernetesHost> arrayList = PojoConverter.populateKubernetesHostsPojo(kubernetesHosts);
                 KubernetesHost[] array = new KubernetesHost[arrayList.size()];
@@ -1779,7 +1786,7 @@ public class StratosApiV41Utils {
             } catch (RemoteException e) {
                 log.error(e.getMessage(), e);
                 throw new RestAPIException(e.getMessage(), e);
-            } catch (AutoScalerServiceNonExistingKubernetesGroupExceptionException e) {
+            } catch (CloudControllerServiceNonExistingKubernetesGroupExceptionException e) {
                 String message = e.getFaultMessage().getNonExistingKubernetesGroupException().getMessage();
                 log.error(message, e);
                 throw new RestAPIException(message, e);
@@ -1789,17 +1796,17 @@ public class StratosApiV41Utils {
     }
 
     public static KubernetesMaster getKubernetesMaster(String kubernetesGroupId) throws RestAPIException {
-        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
-        if (autoscalerServiceClient != null) {
+        CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient();
+        if (cloudControllerServiceClient != null) {
             try {
-                org.apache.stratos.autoscaler.stub.kubernetes.KubernetesMaster
-                        kubernetesMaster = autoscalerServiceClient.getKubernetesMaster(kubernetesGroupId);
+                org.apache.stratos.cloud.controller.stub.kubernetes.KubernetesMaster
+                        kubernetesMaster = cloudControllerServiceClient.getKubernetesMaster(kubernetesGroupId);
                 return PojoConverter.populateKubernetesMasterPojo(kubernetesMaster);
 
             } catch (RemoteException e) {
                 log.error(e.getMessage(), e);
                 throw new RestAPIException(e.getMessage(), e);
-            } catch (AutoScalerServiceNonExistingKubernetesGroupExceptionException e) {
+            } catch (CloudControllerServiceNonExistingKubernetesGroupExceptionException e) {
                 String message = e.getFaultMessage().getNonExistingKubernetesGroupException().getMessage();
                 log.error(message, e);
                 throw new RestAPIException(message, e);
@@ -1809,20 +1816,20 @@ public class StratosApiV41Utils {
     }
 
     public static boolean updateKubernetesHost(KubernetesHost kubernetesHostBean) throws RestAPIException {
-        AutoscalerServiceClient autoscalerServiceClient = getAutoscalerServiceClient();
-        if (autoscalerServiceClient != null) {
-            org.apache.stratos.autoscaler.stub.kubernetes.KubernetesHost kubernetesHost =
-                    PojoConverter.convertToASKubernetesHostPojo(kubernetesHostBean);
+        CloudControllerServiceClient cloudControllerServiceClient = getCloudControllerServiceClient();
+        if (cloudControllerServiceClient != null) {
+            org.apache.stratos.cloud.controller.stub.kubernetes.KubernetesHost kubernetesHost =
+                    PojoConverter.convertToCCKubernetesHostPojo(kubernetesHostBean);
             try {
-                return autoscalerServiceClient.updateKubernetesHost(kubernetesHost);
+                return cloudControllerServiceClient.updateKubernetesHost(kubernetesHost);
             } catch (RemoteException e) {
                 log.error(e.getMessage(), e);
                 throw new RestAPIException(e.getMessage(), e);
-            } catch (AutoScalerServiceInvalidKubernetesHostExceptionException e) {
+            } catch (CloudControllerServiceInvalidKubernetesHostExceptionException e) {
                 String message = e.getFaultMessage().getInvalidKubernetesHostException().getMessage();
                 log.error(message, e);
                 throw new RestAPIException(message, e);
-            } catch (AutoScalerServiceNonExistingKubernetesHostExceptionException e) {
+            } catch (CloudControllerServiceNonExistingKubernetesHostExceptionException e) {
                 String message = e.getFaultMessage().getNonExistingKubernetesHostException().getMessage();
                 log.error(message, e);
                 throw new RestAPIException(message, e);