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/20 22:56:42 UTC

[4/7] stratos git commit: Introducing KubernetesIaas class, MemberContext.clusterInstanceId, removing Cartridge.deployerType

http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/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 2d6875d..e67b26c 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
@@ -18,12 +18,10 @@
  */
 package org.apache.stratos.cloud.controller.services.impl;
 
-import org.apache.commons.collections.ListUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.concurrent.PartitionValidatorCallable;
-import org.apache.stratos.cloud.controller.concurrent.ScheduledThreadExecutor;
 import org.apache.stratos.cloud.controller.concurrent.ThreadExecutor;
 import org.apache.stratos.cloud.controller.config.CloudControllerConfig;
 import org.apache.stratos.cloud.controller.context.CloudControllerContext;
@@ -31,30 +29,18 @@ import org.apache.stratos.cloud.controller.domain.*;
 import org.apache.stratos.cloud.controller.domain.Cartridge;
 import org.apache.stratos.cloud.controller.domain.Dependencies;
 import org.apache.stratos.cloud.controller.exception.*;
-import org.apache.stratos.cloud.controller.functions.ContainerClusterContextToKubernetesService;
-import org.apache.stratos.cloud.controller.functions.ContainerClusterContextToReplicationController;
-import org.apache.stratos.cloud.controller.functions.PodToMemberContext;
 import org.apache.stratos.cloud.controller.iaases.Iaas;
 import org.apache.stratos.cloud.controller.messaging.publisher.StatisticsDataPublisher;
+import org.apache.stratos.cloud.controller.messaging.publisher.TopologyEventPublisher;
 import org.apache.stratos.cloud.controller.messaging.topology.TopologyBuilder;
-import org.apache.stratos.cloud.controller.messaging.topology.TopologyEventPublisher;
 import org.apache.stratos.cloud.controller.messaging.topology.TopologyManager;
 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.cloud.controller.util.PodActivationWatcher;
 import org.apache.stratos.common.Property;
-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.common.kubernetes.PortRange;
-import org.apache.stratos.kubernetes.client.KubernetesApiClient;
-import org.apache.stratos.kubernetes.client.exceptions.KubernetesClientException;
-import org.apache.stratos.kubernetes.client.model.Label;
-import org.apache.stratos.kubernetes.client.model.Pod;
-import org.apache.stratos.kubernetes.client.model.ReplicationController;
-import org.apache.stratos.kubernetes.client.model.Service;
 import org.apache.stratos.messaging.domain.topology.*;
 import org.apache.stratos.messaging.event.topology.MemberReadyToShutdownEvent;
 
@@ -73,6 +59,8 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 
     private static final Log log = LogFactory.getLog(CloudControllerServiceImpl.class);
 
+    private static final String PERSISTENCE_MAPPING = "PERSISTENCE_MAPPING";
+
     private CloudControllerContext cloudControllerContext = CloudControllerContext.getInstance();
 
     public CloudControllerServiceImpl() {
@@ -101,17 +89,18 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 
         List<IaasProvider> iaasProviders = cartridge.getIaases();
 
-        if (!StratosConstants.KUBERNETES_DEPLOYER_TYPE.equals(cartridge.getDeployerType())) {
-            if (iaasProviders == null || iaasProviders.isEmpty()) {
-                String msg = "Invalid cartridge definition, iaas providers not found: [cartridge-type] " + cartridgeConfig.getType();
-                log.error(msg);
-                throw new InvalidCartridgeDefinitionException(msg);
-            }
-
-            for (IaasProvider iaasProvider : iaasProviders) {
-                CloudControllerServiceUtil.buildIaas(iaasProvider);
-            }
-        }
+        // TODO: Fix kubernetes config
+//        if (!StratosConstants.KUBERNETES_DEPLOYER_TYPE.equals(cartridge.getDeployerType())) {
+//            if (iaasProviders == null || iaasProviders.isEmpty()) {
+//                String msg = "Invalid cartridge definition, iaas providers not found: [cartridge-type] " + cartridgeConfig.getType();
+//                log.error(msg);
+//                throw new InvalidCartridgeDefinitionException(msg);
+//            }
+//
+//            for (IaasProvider iaasProvider : iaasProviders) {
+//                CloudControllerServiceUtil.buildIaas(iaasProvider);
+//            }
+//        }
 
         // TODO transaction begins
         String cartridgeType = cartridge.getType();
@@ -319,76 +308,77 @@ public class CloudControllerServiceImpl implements CloudControllerService {
     }
 
     @Override
-    public MemberContext startInstance(MemberContext memberContext) throws
-            UnregisteredCartridgeException, InvalidIaasProviderException {
+    public MemberContext[] startInstances(InstanceContext[] instanceContexts) throws CartridgeNotFoundException, InvalidIaasProviderException {
 
-        if (log.isDebugEnabled()) {
-            log.debug("CloudControllerServiceImpl:startInstance");
-        }
+        handleNullObject(instanceContexts, "Instance start-up failed, member contexts is null");
 
-        handleNullObject(memberContext, "Instance start-up failed. Member is null.");
+        List<MemberContext> memberContextList = new ArrayList<MemberContext>();
+        for(InstanceContext instanceContext : instanceContexts) {
+            if(instanceContext != null) {
+                MemberContext memberContext = startInstance(instanceContext);
+                memberContextList.add(memberContext);
+            }
+        }
+        MemberContext[] memberContextsArray = memberContextList.toArray(new MemberContext[memberContextList.size()]);
+        return memberContextsArray;
+    }
 
-        String clusterId = memberContext.getClusterId();
-        Partition partition = memberContext.getPartition();
+    public MemberContext startInstance(InstanceContext instanceContext) throws
+            CartridgeNotFoundException, InvalidIaasProviderException {
 
+        // Validate instance context
+        handleNullObject(instanceContext, "Could not start instance, instance context is null");
         if (log.isDebugEnabled()) {
-            log.debug("Received an instance spawn request : " + memberContext);
+            log.debug("Starting up instance: " + instanceContext);
         }
 
-        handleNullObject(partition, "Instance start-up failed. Specified Partition is null. " +
-                memberContext);
+        // Validate partition
+        Partition partition = instanceContext.getPartition();
+        handleNullObject(partition, "Could not start instance, partition is null");
 
+        // Validate cluster
         String partitionId = partition.getId();
-        ClusterContext ctxt = CloudControllerContext.getInstance().getClusterContext(clusterId);
-
-        handleNullObject(ctxt, "Instance start-up failed. Invalid cluster id. " + memberContext);
-
-        String cartridgeType = ctxt.getCartridgeType();
+        String clusterId = instanceContext.getClusterId();
+        ClusterContext clusterContext = CloudControllerContext.getInstance().getClusterContext(clusterId);
+        handleNullObject(clusterContext, "Could not start instance, cluster context not found: [cluster-id] " + clusterId);
 
+        // Validate cartridge
+        String cartridgeType = clusterContext.getCartridgeType();
         Cartridge cartridge = CloudControllerContext.getInstance().getCartridge(cartridgeType);
-
         if (cartridge == null) {
-            String msg =
-                    "Instance start-up failed. No matching Cartridge found [cartridge-type] " + cartridgeType + ". " +
-                            memberContext.toString();
+            String msg = "Could not startup instance, cartridge not found: [cartridge-type] " + cartridgeType;
             log.error(msg);
-            throw new UnregisteredCartridgeException(msg);
+            throw new CartridgeNotFoundException(msg);
         }
 
-        memberContext.setCartridgeType(cartridgeType);
-
-
+        // Validate iaas provider
         IaasProvider iaasProvider = cartridge.getIaasProviderOfPartition(partitionId);
         if (iaasProvider == null) {
-            if (log.isDebugEnabled()) {
-                log.debug("IaasToPartitionMap " + cartridge.hashCode()
-                        + " for cartridge " + cartridgeType + " and for partition: " + partitionId);
-            }
-            String msg = "Instance start-up failed. "
-                    + "There's no IaaS provided for the partition: "
-                    + partitionId
-                    + " and for the Cartridge type: "
-                    + cartridgeType
-                    + ". Only following "
-                    + "partitions can be found in this Cartridge: "
-                    + cartridge.getPartitionToIaasProvider().keySet()
-                    .toString() + ". " + memberContext.toString()
-                    + ". ";
-            log.fatal(msg);
+            String msg = String.format("Could not start instance, " +
+                    "IaaS provider not found in cartridge %s for partition %s." +
+                    "Only following partitions are found: %s ", cartridgeType, partitionId,
+                    cartridge.getPartitionToIaasProvider().keySet().toString());
+            log.error(msg);
             throw new InvalidIaasProviderException(msg);
         }
-        String type = iaasProvider.getType();
+
         try {
-            // generating the Unique member ID...
+            // Generate member ID
             String memberID = generateMemberId(clusterId);
+
+            // Create member context
+            MemberContext memberContext = createMemberContext(instanceContext);
             memberContext.setMemberId(memberID);
-            // have to add memberID to the payload
-            StringBuilder payload = new StringBuilder(ctxt.getPayload());
+            memberContext.setCartridgeType(cartridgeType);
+
+            // Prepare payload
+            StringBuilder payload = new StringBuilder(clusterContext.getPayload());
             addToPayload(payload, "MEMBER_ID", memberID);
+            addToPayload(payload, "INSTANCE_ID", memberContext.getInstanceId());
+            addToPayload(payload, "CLUSTER_INSTANCE_ID", memberContext.getClusterInstanceId());
             addToPayload(payload, "LB_CLUSTER_ID", memberContext.getLbClusterId());
             addToPayload(payload, "NETWORK_PARTITION_ID", memberContext.getNetworkPartitionId());
             addToPayload(payload, "PARTITION_ID", partitionId);
-            addToPayload(payload, "INSTANCE_ID", memberContext.getInstanceId());
             if (memberContext.getProperties() != null) {
                 org.apache.stratos.common.Properties properties = memberContext.getProperties();
                 if (properties != null) {
@@ -399,61 +389,51 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             }
 
             Iaas iaas = iaasProvider.getIaas();
-
-            if (log.isDebugEnabled()) {
-                log.debug("Payload: " + payload.toString());
-            }
-
-            if (iaas == null) {
-                if (log.isDebugEnabled()) {
-                    log.debug("Iaas is null of Iaas Provider: " + type + ". Trying to build IaaS...");
-                }
-                try {
-                    iaas = CloudControllerServiceUtil.buildIaas(iaasProvider);
-                } catch (InvalidIaasProviderException e) {
-                    String msg = "Instance start up failed. " + memberContext.toString() +
-                            "Unable to build Iaas of this IaasProvider [Provider] : " + type + ". Cause: " + e.getMessage();
-                    log.error(msg, e);
-                    throw new InvalidIaasProviderException(msg, e);
-                }
-
-            }
-
-            if (ctxt.isVolumeRequired()) {
-                if (ctxt.getVolumes() != null) {
-                    for (Volume volume : ctxt.getVolumes()) {
-
+            if (clusterContext.isVolumeRequired()) {
+                if (clusterContext.getVolumes() != null) {
+                    for (Volume volume : clusterContext.getVolumes()) {
                         if (volume.getId() == null) {
-                            // create a new volume
+                            // Create a new volume
                             createVolumeAndSetInClusterContext(volume, iaasProvider);
                         }
                     }
                 }
             }
 
-            if (ctxt.isVolumeRequired()) {
-                addToPayload(payload, "PERSISTENCE_MAPPING", getPersistencePayload(ctxt, iaas).toString());
+            if (clusterContext.isVolumeRequired()) {
+                addToPayload(payload, PERSISTENCE_MAPPING, getPersistencePayload(clusterContext, iaas).toString());
+            }
+
+            if (log.isDebugEnabled()) {
+                log.debug("Payload: " + payload.toString());
             }
+
             iaasProvider.setPayload(payload.toString().getBytes());
             iaas.setDynamicPayload(iaasProvider.getPayload());
 
-            //Start instance start up in a new thread
+            // Start instance in a new thread
             ThreadExecutor exec = ThreadExecutor.getInstance();
             if (log.isDebugEnabled()) {
-                log.debug("Cloud Controller is starting the instance start up thread.");
+                log.debug("Cloud Controller is starting the instance creator thread...");
             }
-            exec.execute(new InstanceCreator(memberContext, iaasProvider, cartridgeType));
-
-            log.info("Instance is successfully starting up. " + memberContext.toString());
-
+            exec.execute(new InstanceCreator(memberContext, iaasProvider));
             return memberContext;
-
         } catch (Exception e) {
-            String msg = "Failed to start an instance. " + memberContext.toString() + " Cause: " + e.getMessage();
+            String msg = "Failed to start instance: " + instanceContext.toString();
             log.error(msg, e);
             throw new IllegalStateException(msg, e);
         }
+    }
 
+    private MemberContext createMemberContext(InstanceContext instanceContext) {
+        MemberContext memberContext = new MemberContext();
+        memberContext.setCartridgeType(instanceContext.getCartridgeType());
+        memberContext.setClusterId(instanceContext.getClusterId());
+        memberContext.setClusterInstanceId(instanceContext.getClusterInstanceId());
+        memberContext.setNetworkPartitionId(instanceContext.getNetworkPartitionId());
+        memberContext.setPartition(instanceContext.getPartition());
+        memberContext.setProperties(instanceContext.getProperties());
+        return memberContext;
     }
 
     private void createVolumeAndSetInClusterContext(Volume volume,
@@ -527,11 +507,11 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             throw new InvalidMemberException(msg);
         }
 
-        if ((memberContext.getNodeId() == null) && (memberContext.getInstanceId() == null)) {
+        if (StringUtils.isBlank(memberContext.getInstanceId())) {
             if (log.isErrorEnabled()) {
                 log.error(String.format(
-                        "Member termination failed, node id and instance id are null: [member-id] %s " +
-                                "Removing member from topology.",
+                        "Member termination failed, instance id is blank: [member-id] %s " +
+                                ", removing member from topology...",
                         memberContext.getMemberId()));
             }
             CloudControllerServiceUtil.executeMemberTerminationPostProcess(memberContext);
@@ -616,10 +596,10 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             MemberReadyToShutdownEvent memberReadyToShutdownEvent = new MemberReadyToShutdownEvent(
                     member.getServiceName(),
                     member.getClusterId(),
+                    member.getClusterInstanceId(), member.getMemberId(),
+                    member.getInstanceId(),
                     member.getNetworkPartitionId(),
-                    member.getPartitionId(),
-                    member.getMemberId(),
-                    member.getInstanceId());
+                    member.getPartitionId());
 
             member.setStatus(MemberStatus.ReadyToShutDown);
             log.info("Member Ready to shut down event adding status started");
@@ -667,45 +647,35 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 
     @Override
     public boolean registerService(Registrant registrant)
-            throws UnregisteredCartridgeException {
+            throws CartridgeNotFoundException {
 
         String cartridgeType = registrant.getCartridgeType();
-        handleNullObject(cartridgeType, "Service registration failed. Cartridge Type is null.");
+        handleNullObject(cartridgeType, "Service registration failed, cartridge Type is null.");
 
         String clusterId = registrant.getClusterId();
-        handleNullObject(clusterId, "Service registration failed. Cluster id is null.");
+        handleNullObject(clusterId, "Service registration failed, cluster id is null.");
 
         String payload = registrant.getPayload();
-        handleNullObject(payload, "Service registration failed. Payload is null.");
+        handleNullObject(payload, "Service registration failed, payload is null.");
 
         String hostName = registrant.getHostName();
-        handleNullObject(hostName, "Service registration failed. Hostname is null.");
+        handleNullObject(hostName, "Service registration failed, hostname is null.");
 
         Cartridge cartridge = null;
         if ((cartridge = CloudControllerContext.getInstance().getCartridge(cartridgeType)) == null) {
-
             String msg = "Registration of cluster: " + clusterId +
-                    " failed. - Unregistered cartridge type: " + cartridgeType;
+                    " failed, cartridge not found: [cartridge-type] " + cartridgeType;
             log.error(msg);
-            throw new UnregisteredCartridgeException(msg);
+            throw new CartridgeNotFoundException(msg);
         }
 
-        Properties props = CloudControllerUtil.toJavaUtilProperties(registrant.getProperties());
-        String property = props.getProperty(CloudControllerConstants.IS_LOAD_BALANCER);
+        Properties properties = CloudControllerUtil.toJavaUtilProperties(registrant.getProperties());
+        String property = properties.getProperty(CloudControllerConstants.IS_LOAD_BALANCER);
         boolean isLb = property != null ? Boolean.parseBoolean(property) : false;
-
-        //TODO fix the properties issue
-        /*ClusterContext ctxt = buildClusterContext(cartridge, clusterId,
-        payload, hostName, props, isLb, registrant.getPersistence());
-
-
-        CloudControllerContext.getInstance().addClusterContext(ctxt);*/
         TopologyBuilder.handleClusterCreated(registrant, isLb);
-
         CloudControllerContext.getInstance().persist();
 
-        log.info("Successfully registered: " + registrant);
-
+        log.info("Successfully registered service: " + registrant);
         return true;
     }
 
@@ -737,7 +707,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
     }
 
     @Override
-    public CartridgeInfo getCartridgeInfo(String cartridgeType) throws UnregisteredCartridgeException {
+    public CartridgeInfo getCartridgeInfo(String cartridgeType) throws CartridgeNotFoundException {
         Cartridge cartridge = CloudControllerContext.getInstance().getCartridge(cartridgeType);
         if (cartridge != null) {
             return CloudControllerUtil.toCartridgeInfo(cartridge);
@@ -745,7 +715,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 
         String msg = "Could not find cartridge: [type] " + cartridgeType;
         log.error(msg);
-        throw new UnregisteredCartridgeException(msg);
+        throw new CartridgeNotFoundException(msg);
     }
 
     @Override
@@ -765,10 +735,10 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             throw new UnregisteredClusterException(msg);
         }
 
-        // if it's a kubernetes cluster
-        if (StratosConstants.KUBERNETES_DEPLOYER_TYPE.equals(cartridge.getDeployerType())) {
-            unregisterDockerService(clusterId_);
-        } else {
+        // TODO: Fix kubernetes config
+//        if (StratosConstants.KUBERNETES_DEPLOYER_TYPE.equals(cartridge.getDeployerType())) {
+//            unregisterDockerService(clusterId_);
+//        } else {
             Runnable terminateInTimeout = new Runnable() {
                 @Override
                 public void run() {
@@ -877,30 +847,7 @@ public class CloudControllerServiceImpl implements CloudControllerService {
             };
             new Thread(terminateInTimeout).start();
             new Thread(unregister).start();
-        }
-    }
-
-    @Override
-    public void unregisterDockerService(String clusterId)
-            throws UnregisteredClusterException {
-        Lock lock = null;
-        try {
-            lock = CloudControllerContext.getInstance().acquireClusterContextWriteLock();
-            // terminate all kubernetes units
-            try {
-                terminateContainers(clusterId);
-            } catch (InvalidClusterException e) {
-                String msg = "Docker instance termination fails for cluster: " + clusterId;
-                log.error(msg, e);
-                throw new UnregisteredClusterException(msg, e);
-            }
-            // send cluster removal notifications and update the state
-            onClusterRemoval(clusterId);
-        } finally {
-            if (lock != null) {
-                CloudControllerContext.getInstance().releaseWriteLock(lock);
-            }
-        }
+   //     }
     }
 
     /**
@@ -1023,184 +970,6 @@ public class CloudControllerServiceImpl implements CloudControllerService {
         return CloudControllerContext.getInstance().getClusterContext(clusterId);
     }
 
-    @Override
-    public MemberContext[] startContainers(ContainerClusterContext containerClusterContext)
-            throws UnregisteredCartridgeException {
-        Lock lock = null;
-        try {
-            lock = CloudControllerContext.getInstance().acquireMemberContextWriteLock();
-
-            if (log.isDebugEnabled()) {
-                log.debug("CloudControllerServiceImpl:startContainers");
-            }
-
-            handleNullObject(containerClusterContext, "Container start-up failed. ContainerClusterContext is null.");
-
-            String clusterId = containerClusterContext.getClusterId();
-            handleNullObject(clusterId, "Container start-up failed. Cluster id is null.");
-
-            Partition partition = containerClusterContext.getPartition();
-            handleNullObject(partition, "Container start-up failed. Null partition found in ContainerClusterContext.");
-
-            if (log.isDebugEnabled()) {
-                log.debug("Received a container spawn request : " + containerClusterContext.toString());
-            }
-
-            ClusterContext ctxt = CloudControllerContext.getInstance().getClusterContext(clusterId);
-            handleNullObject(ctxt, "Container start-up failed. Invalid cluster id. " + containerClusterContext.toString());
-
-            String cartridgeType = ctxt.getCartridgeType();
-
-            Cartridge cartridge = CloudControllerContext.getInstance().getCartridge(cartridgeType);
-
-            if (cartridge == null) {
-                String msg = "Instance start-up failed. No matching Cartridge found [type] " + cartridgeType + ". " +
-                        containerClusterContext.toString();
-                log.error(msg);
-                throw new UnregisteredCartridgeException(msg);
-            }
-
-            try {
-                String minReplicas =
-                        validateProperty(StratosConstants.MIN_COUNT, containerClusterContext.getProperties(),
-                                containerClusterContext.toString());
-                String kubernetesClusterId =
-                        validateProperty(StratosConstants.KUBERNETES_CLUSTER_ID, partition.getProperties(),
-                                partition.toString());
-
-                KubernetesGroup kubernetesGroup =
-                        CloudControllerContext.getInstance().getKubernetesGroup(kubernetesClusterId);
-                handleNullObject(kubernetesGroup, "Container start-up failed. Kubernetes group not found for id: "
-                        + kubernetesClusterId);
-
-                String kubernetesMasterIp = kubernetesGroup.getKubernetesMaster().getHostIpAddress();
-                PortRange kubernetesPortRange = kubernetesGroup.getPortRange();
-                // optional
-                String kubernetesMasterPort =
-                        CloudControllerUtil.getProperty(kubernetesGroup.getKubernetesMaster().getProperties(),
-                                StratosConstants.KUBERNETES_MASTER_PORT,
-                                StratosConstants.KUBERNETES_MASTER_DEFAULT_PORT);
-
-                KubernetesClusterContext kubClusterContext = getKubernetesClusterContext(kubernetesClusterId,
-                        kubernetesMasterIp, kubernetesMasterPort, kubernetesPortRange.getLower(), kubernetesPortRange.getUpper());
-                KubernetesApiClient kubApi = kubClusterContext.getKubApi();
-
-                // first let's create a replication controller.
-                ContainerClusterContextToReplicationController controllerFunction = new ContainerClusterContextToReplicationController();
-                ReplicationController controller = controllerFunction.apply(containerClusterContext);
-
-                if (log.isDebugEnabled()) {
-                    log.debug("Cloud Controller is delegating request to start a replication controller " + controller +
-                            " for " + containerClusterContext + " to Kubernetes layer.");
-                }
-
-                kubApi.createReplicationController(controller);
-
-                if (log.isDebugEnabled()) {
-                    log.debug("Cloud Controller successfully started the controller "
-                            + controller + " via Kubernetes layer.");
-                }
-
-                // secondly let's create a kubernetes service proxy to load balance these containers
-                ContainerClusterContextToKubernetesService serviceFunction = new ContainerClusterContextToKubernetesService();
-                Service service = serviceFunction.apply(containerClusterContext);
-
-                if (log.isDebugEnabled()) {
-                    log.debug("Cloud Controller is delegating request to start a service " + service +
-                            " for " + containerClusterContext + " to Kubernetes layer.");
-                }
-
-                kubApi.createService(service);
-
-                // set host port and update
-                Property allocatedServiceHostPortProp = new Property();
-                allocatedServiceHostPortProp.setName(StratosConstants.ALLOCATED_SERVICE_HOST_PORT);
-                allocatedServiceHostPortProp.setValue(String.valueOf(service.getPort()));
-                ctxt.getProperties().addProperty(allocatedServiceHostPortProp);
-                CloudControllerContext.getInstance().addClusterContext(ctxt);
-
-                if (log.isDebugEnabled()) {
-                    log.debug("Cloud Controller successfully started the service "
-                            + controller + " via Kubernetes layer.");
-                }
-
-                // create a label query
-                Label l = new Label();
-                l.setName(clusterId);
-                // execute the label query
-                Pod[] newlyCreatedPods = new Pod[0];
-                int expectedCount = Integer.parseInt(minReplicas);
-
-                for (int i = 0; i < expectedCount; i++) {
-                    newlyCreatedPods = kubApi.getSelectedPods(new Label[]{l});
-
-                    if (log.isDebugEnabled()) {
-
-                        log.debug("Pods Count: " + newlyCreatedPods.length + " for cluster: " + clusterId);
-                    }
-                    if (newlyCreatedPods.length == expectedCount) {
-                        break;
-                    }
-                    Thread.sleep(10000);
-                }
-
-                if (newlyCreatedPods.length == 0) {
-                    if (log.isDebugEnabled()) {
-                        log.debug(String.format("Pods are not created for cluster : %s, hence deleting the service", clusterId));
-                    }
-                    terminateContainers(clusterId);
-                    return new MemberContext[0];
-                }
-
-                if (log.isDebugEnabled()) {
-
-                    log.debug(String.format("Pods created : %s for cluster : %s", newlyCreatedPods.length, clusterId));
-                }
-
-                List<MemberContext> memberContexts = new ArrayList<MemberContext>();
-
-                PodToMemberContext podToMemberContextFunc = new PodToMemberContext();
-                // generate Member Contexts
-                for (Pod pod : newlyCreatedPods) {
-                    MemberContext context = podToMemberContextFunc.apply(pod);
-                    context.setCartridgeType(cartridgeType);
-                    context.setClusterId(clusterId);
-
-                    context.setProperties(CloudControllerUtil.addProperty(context
-                                    .getProperties(), StratosConstants.ALLOCATED_SERVICE_HOST_PORT,
-                            String.valueOf(service.getPort())));
-
-                    CloudControllerContext.getInstance().addMemberContext(context);
-
-                    // wait till Pod status turns to running and send member spawned.
-                    ScheduledThreadExecutor exec = ScheduledThreadExecutor.getInstance();
-                    if (log.isDebugEnabled()) {
-                        log.debug("Cloud Controller is starting the instance start up thread.");
-                    }
-                    CloudControllerContext.getInstance().addScheduledFutureJob(context.getMemberId(), exec.schedule(new PodActivationWatcher(pod.getId(), context, kubApi), 5000));
-
-                    memberContexts.add(context);
-                }
-
-                // persist in registry
-                CloudControllerContext.getInstance().persist();
-
-                log.info("Kubernetes entities are successfully starting up: " + memberContexts);
-
-                return memberContexts.toArray(new MemberContext[0]);
-
-            } catch (Exception e) {
-                String msg = "Failed to start an instance. " + containerClusterContext.toString() + " Cause: " + e.getMessage();
-                log.error(msg, e);
-                throw new IllegalStateException(msg, e);
-            }
-        } finally {
-            if (lock != null) {
-                CloudControllerContext.getInstance().releaseWriteLock(lock);
-            }
-        }
-    }
-
 //    private String validateProperty(String property, ClusterContext ctxt) {
 //
 //        String propVal = CloudControllerUtil.getProperty(ctxt.getProperties(), property);
@@ -1224,330 +993,12 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 //
 //    }
 
-    private String validateProperty(String property, org.apache.stratos.common.Properties properties, String object) {
-
-        String propVal = CloudControllerUtil.getProperty(properties, property);
-        handleNullObject(propVal, "Property validation failed. Cannot find property: '" + property + " in " + object);
-        return propVal;
-
-    }
-
-    private KubernetesClusterContext getKubernetesClusterContext(String kubernetesClusterId, String kubernetesMasterIp,
-                                                                 String kubernetesMasterPort, int upperPort, int lowerPort) {
-
-        KubernetesClusterContext origCtxt =
-                CloudControllerContext.getInstance().getKubernetesClusterContext(kubernetesClusterId);
-        KubernetesClusterContext newCtxt =
-                new KubernetesClusterContext(kubernetesClusterId, kubernetesMasterIp,
-                        kubernetesMasterPort, upperPort, lowerPort);
-
-        if (origCtxt == null) {
-            CloudControllerContext.getInstance().addKubernetesClusterContext(newCtxt);
-            return newCtxt;
-        }
-
-        if (!origCtxt.equals(newCtxt)) {
-            // if for some reason master IP etc. have changed
-            newCtxt.setAvailableHostPorts(origCtxt.getAvailableHostPorts());
-            CloudControllerContext.getInstance().addKubernetesClusterContext(newCtxt);
-            return newCtxt;
-        } else {
-            return origCtxt;
-        }
-    }
-
-    @Override
-    public MemberContext[] terminateContainers(String clusterId)
-            throws InvalidClusterException {
-        Lock lock = null;
-        try {
-            lock = CloudControllerContext.getInstance().acquireMemberContextWriteLock();
-
-            ClusterContext ctxt = CloudControllerContext.getInstance().getClusterContext(clusterId);
-            handleNullObject(ctxt, "Kubernetes units temrination failed. Invalid cluster id. " + clusterId);
-
-            String kubernetesClusterId = CloudControllerUtil.getProperty(ctxt.getProperties(),
-                    StratosConstants.KUBERNETES_CLUSTER_ID);
-            handleNullObject(kubernetesClusterId, "Kubernetes units termination failed. Cannot find '" +
-                    StratosConstants.KUBERNETES_CLUSTER_ID + "'. " + ctxt);
-
-            KubernetesClusterContext kubClusterContext = CloudControllerContext.getInstance().getKubernetesClusterContext(kubernetesClusterId);
-            handleNullObject(kubClusterContext, "Kubernetes units termination failed. Cannot find a matching Kubernetes Cluster for cluster id: "
-                    + kubernetesClusterId);
-
-            KubernetesApiClient kubApi = kubClusterContext.getKubApi();
-            // delete the service
-            try {
-                kubApi.deleteService(CloudControllerUtil.getCompatibleId(clusterId));
-            } catch (KubernetesClientException e) {
-                // we're not going to throw this error, but proceed with other deletions
-                log.error("Failed to delete Kubernetes service with id: " + clusterId, e);
-            }
-
-            // set replicas=0 for the replication controller
-            try {
-                kubApi.updateReplicationController(clusterId, 0);
-            } catch (KubernetesClientException e) {
-                // we're not going to throw this error, but proceed with other deletions
-                log.error("Failed to update Kubernetes Controller with id: " + clusterId, e);
-            }
-
-            // delete pods forcefully
-            try {
-                // create a label query
-                Label l = new Label();
-                l.setName(clusterId);
-                // execute the label query
-                Pod[] pods = kubApi.getSelectedPods(new Label[]{l});
-
-                for (Pod pod : pods) {
-                    try {
-                        // delete pods forcefully
-                        kubApi.deletePod(pod.getId());
-                    } catch (KubernetesClientException ignore) {
-                        // we can't do nothing here
-                        log.warn(String.format("Failed to delete Pod [%s] forcefully!", pod.getId()));
-                    }
-                }
-            } catch (KubernetesClientException e) {
-                // we're not going to throw this error, but proceed with other deletions
-                log.error("Failed to delete pods forcefully for cluster: " + clusterId, e);
-            }
-
-            // delete the replication controller.
-            try {
-                kubApi.deleteReplicationController(clusterId);
-            } catch (KubernetesClientException e) {
-                String msg = "Failed to delete Kubernetes Controller with id: " + clusterId;
-                log.error(msg, e);
-                throw new InvalidClusterException(msg, e);
-            }
-
-            String allocatedPort = CloudControllerUtil.getProperty(ctxt.getProperties(),
-                    StratosConstants.ALLOCATED_SERVICE_HOST_PORT);
-
-            if (allocatedPort != null) {
-                kubClusterContext.deallocateHostPort(Integer
-                        .parseInt(allocatedPort));
-            } else {
-                log.warn("Host port dealloacation failed due to a missing property: "
-                        + StratosConstants.ALLOCATED_SERVICE_HOST_PORT);
-            }
-
-            List<MemberContext> membersToBeRemoved = CloudControllerContext.getInstance().getMemberContextsOfClusterId(clusterId);
-
-            for (MemberContext memberContext : membersToBeRemoved) {
-                CloudControllerServiceUtil.executeMemberTerminationPostProcess(memberContext);
-            }
-
-            // persist
-            CloudControllerContext.getInstance().persist();
-            return membersToBeRemoved.toArray(new MemberContext[0]);
-        } finally {
-            if (lock != null) {
-                CloudControllerContext.getInstance().releaseWriteLock(lock);
-            }
-        }
-    }
-
-    @Override
-    public MemberContext[] updateContainers(String clusterId, int replicas)
-            throws UnregisteredCartridgeException {
-        Lock lock = null;
-        try {
-            lock = CloudControllerContext.getInstance().acquireMemberContextWriteLock();
-
-            if (log.isDebugEnabled()) {
-                log.debug("CloudControllerServiceImpl:updateContainers for cluster : " + clusterId);
-            }
-
-            ClusterContext ctxt = CloudControllerContext.getInstance().getClusterContext(clusterId);
-            handleNullObject(ctxt, "Container update failed. Invalid cluster id. " + clusterId);
-
-            String cartridgeType = ctxt.getCartridgeType();
-
-            Cartridge cartridge = CloudControllerContext.getInstance().getCartridge(cartridgeType);
-
-            if (cartridge == null) {
-                String msg =
-                        "Container update failed. No matching Cartridge found [type] " + cartridgeType
-                                + ". [cluster id] " + clusterId;
-                log.error(msg);
-                throw new UnregisteredCartridgeException(msg);
-            }
-
-            try {
-                String kubernetesClusterId = validateProperty(StratosConstants.KUBERNETES_CLUSTER_ID, ctxt.getProperties(), ctxt.toString());
-
-                KubernetesClusterContext kubClusterContext = CloudControllerContext.getInstance().getKubernetesClusterContext(kubernetesClusterId);
-
-                if (kubClusterContext == null) {
-                    String msg =
-                            "Instance start-up failed. No matching Kubernetes Context Found for [id] " + kubernetesClusterId
-                                    + ". [cluster id] " + clusterId;
-                    log.error(msg);
-                    throw new UnregisteredCartridgeException(msg);
-                }
-
-                KubernetesApiClient kubApi = kubClusterContext.getKubApi();
-                // create a label query
-                Label l = new Label();
-                l.setName(clusterId);
-
-                // get the current pods - useful when scale down
-                Pod[] previousStatePods = kubApi.getSelectedPods(new Label[]{l});
-
-                // update the replication controller - cluster id = replication controller id
-                if (log.isDebugEnabled()) {
-                    log.debug("Cloud Controller is delegating request to update a replication controller " + clusterId +
-                            " to Kubernetes layer.");
-                }
-
-                kubApi.updateReplicationController(clusterId, replicas);
-
-                if (log.isDebugEnabled()) {
-                    log.debug("Cloud Controller successfully updated the controller "
-                            + clusterId + " via Kubernetes layer.");
-                }
-
-                // execute the label query
-                Pod[] allPods = new Pod[0];
-
-                // wait replicas*5s time in the worst case ; best case = 0s
-                for (int i = 0; i < (replicas * previousStatePods.length + 1); i++) {
-                    allPods = kubApi.getSelectedPods(new Label[]{l});
-
-                    if (log.isDebugEnabled()) {
-
-                        log.debug("Pods Count: " + allPods.length + " for cluster: " + clusterId);
-                    }
-                    if (allPods.length == replicas) {
-                        break;
-                    }
-                    Thread.sleep(10000);
-                }
-
-                if (log.isDebugEnabled()) {
-
-                    log.debug(String.format("Pods created : %s for cluster : %s", allPods.length, clusterId));
-                }
-
-                List<MemberContext> memberContexts = new ArrayList<MemberContext>();
-
-                PodToMemberContext podToMemberContextFunc = new PodToMemberContext();
-                // generate Member Contexts
-                for (Pod pod : allPods) {
-                    MemberContext context;
-                    // if member context does not exist -> a new member (scale up)
-                    if ((context = CloudControllerContext.getInstance().getMemberContextOfMemberId(pod.getId())) == null) {
-
-                        context = podToMemberContextFunc.apply(pod);
-                        context.setCartridgeType(cartridgeType);
-                        context.setClusterId(clusterId);
-
-                        context.setProperties(CloudControllerUtil.addProperty(context
-                                        .getProperties(), StratosConstants.ALLOCATED_SERVICE_HOST_PORT,
-                                CloudControllerUtil.getProperty(ctxt.getProperties(),
-                                        StratosConstants.ALLOCATED_SERVICE_HOST_PORT)));
-
-                        // wait till Pod status turns to running and send member spawned.
-                        ScheduledThreadExecutor exec = ScheduledThreadExecutor.getInstance();
-                        if (log.isDebugEnabled()) {
-                            log.debug("Cloud Controller is starting the instance start up thread.");
-                        }
-                        CloudControllerContext.getInstance().addScheduledFutureJob(context.getMemberId(), exec.schedule(new PodActivationWatcher(pod.getId(), context, kubApi), 5000));
-
-                        memberContexts.add(context);
-
-                    }
-                    // publish data
-                    // TODO
-//                CartridgeInstanceDataPublisher.publish(context.getMemberId(), null, null, context.getClusterId(), cartridgeType, MemberStatus.Created.toString(), node);
-
-                }
-
-                if (memberContexts.isEmpty()) {
-                    // terminated members
-                    @SuppressWarnings("unchecked")
-                    List<Pod> difference = ListUtils.subtract(Arrays.asList(previousStatePods), Arrays.asList(allPods));
-                    for (Pod pod : difference) {
-                        if (pod != null) {
-                            MemberContext context = CloudControllerContext.getInstance().getMemberContextOfMemberId(pod.getId());
-                            CloudControllerServiceUtil.executeMemberTerminationPostProcess(context);
-                            memberContexts.add(context);
-                        }
-                    }
-                }
-
-
-                // persist in registry
-                CloudControllerContext.getInstance().persist();
-
-                log.info("Kubernetes entities are successfully starting up. " + memberContexts);
-                return memberContexts.toArray(new MemberContext[0]);
-
-            } catch (Exception e) {
-                String msg = "Failed to update containers belong to cluster " + clusterId + ". Cause: " + e.getMessage();
-                log.error(msg, e);
-                throw new IllegalStateException(msg, e);
-            }
-        } finally {
-            if (lock != null) {
-                CloudControllerContext.getInstance().releaseWriteLock(lock);
-            }
-        }
-    }
 
     @Override
     public void updateClusterStatus(String serviceName, String clusterId, String instanceId, ClusterStatus status) {
         //TODO
     }
 
-    @Override
-    public MemberContext terminateContainer(String memberId) throws MemberTerminationFailedException {
-        Lock lock = null;
-        try {
-            lock = CloudControllerContext.getInstance().acquireMemberContextWriteLock();
-            handleNullObject(memberId, "Failed to terminate member. Invalid Member id. [member-id] " + memberId);
-            MemberContext memberContext = CloudControllerContext.getInstance().getMemberContextOfMemberId(memberId);
-            handleNullObject(memberContext, "Failed to terminate member. Member id not found. [member-id] " + memberId);
-
-            String clusterId = memberContext.getClusterId();
-            handleNullObject(clusterId, "Failed to terminate member. Cluster id is null. [member-id] " + memberId);
-
-            ClusterContext ctxt = CloudControllerContext.getInstance().getClusterContext(clusterId);
-            handleNullObject(ctxt, String.format("Failed to terminate member [member-id] %s. Invalid cluster id %s ", memberId, clusterId));
-
-            String kubernetesClusterId = CloudControllerUtil.getProperty(ctxt.getProperties(),
-                    StratosConstants.KUBERNETES_CLUSTER_ID);
-
-            handleNullObject(kubernetesClusterId, String.format("Failed to terminate member [member-id] %s. Cannot find '" +
-                    StratosConstants.KUBERNETES_CLUSTER_ID + "' in [cluster context] %s ", memberId, ctxt));
-
-            KubernetesClusterContext kubClusterContext = CloudControllerContext.getInstance().getKubernetesClusterContext(kubernetesClusterId);
-            handleNullObject(kubClusterContext, String.format("Failed to terminate member [member-id] %s. Cannot find a matching Kubernetes Cluster in [cluster context] %s ", memberId, ctxt));
-            KubernetesApiClient kubApi = kubClusterContext.getKubApi();
-            // delete the Pod
-            try {
-                // member id = pod id
-                kubApi.deletePod(memberId);
-                MemberContext memberToBeRemoved = CloudControllerContext.getInstance().getMemberContextOfMemberId(memberId);
-                CloudControllerServiceUtil.executeMemberTerminationPostProcess(memberToBeRemoved);
-
-                return memberToBeRemoved;
-
-            } catch (KubernetesClientException e) {
-                String msg = String.format("Failed to terminate member: [member-id] %s", memberId);
-                log.error(msg, e);
-                throw new MemberTerminationFailedException(msg, e);
-            }
-        } finally {
-            if (lock != null) {
-                CloudControllerContext.getInstance().releaseWriteLock(lock);
-            }
-        }
-    }
-
     private void handleNullObject(Object obj, String errorMsg) {
         if (obj == null) {
             log.error(errorMsg);
@@ -1583,10 +1034,11 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                 //newCluster.setStatus(ClusterStatus.Created, null);
                 newCluster.setHostNames(Arrays.asList(appClusterCtxt.getHostName()));
                 Cartridge cartridge = CloudControllerContext.getInstance().getCartridge(appClusterCtxt.getCartridgeType());
-                if (cartridge.getDeployerType() != null &&
-                        cartridge.getDeployerType().equals(StratosConstants.KUBERNETES_DEPLOYER_TYPE)) {
-                    newCluster.setKubernetesCluster(true);
-                }
+                // TODO: Fix kubernetes config
+//                if (cartridge.getDeployerType() != null &&
+//                        cartridge.getDeployerType().equals(StratosConstants.KUBERNETES_DEPLOYER_TYPE)) {
+//                    newCluster.setKubernetesCluster(true);
+//                }
                 if (appClusterCtxt.getProperties() != null) {
                     Properties properties = CloudControllerUtil.toJavaUtilProperties(appClusterCtxt.getProperties());
                     newCluster.setProperties(properties);

http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceUtil.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceUtil.java
index 6285d00..cc84cec 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceUtil.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceUtil.java
@@ -32,8 +32,8 @@ import org.apache.stratos.cloud.controller.domain.Partition;
 import org.apache.stratos.cloud.controller.exception.InvalidIaasProviderException;
 import org.apache.stratos.cloud.controller.exception.InvalidPartitionException;
 import org.apache.stratos.cloud.controller.iaases.Iaas;
-import org.apache.stratos.cloud.controller.iaases.validators.IaasBasedPartitionValidator;
-import org.apache.stratos.cloud.controller.iaases.validators.KubernetesBasedPartitionValidator;
+import org.apache.stratos.cloud.controller.iaases.validators.PartitionValidator;
+import org.apache.stratos.cloud.controller.iaases.validators.KubernetesPartitionValidator;
 import org.apache.stratos.cloud.controller.messaging.publisher.StatisticsDataPublisher;
 import org.apache.stratos.cloud.controller.messaging.topology.TopologyBuilder;
 import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
@@ -98,14 +98,14 @@ public class CloudControllerServiceUtil {
             // if this is a IaaS based partition
             Iaas iaas = iaasProvider.getIaas();
 
-            IaasBasedPartitionValidator validator = (IaasBasedPartitionValidator) iaas.getPartitionValidator();
+            PartitionValidator validator = iaas.getPartitionValidator();
             validator.setIaasProvider(iaasProvider);
             iaasProvider = validator.validate(partitionId, partitionProperties);
             return iaasProvider;
 
         } else if (CloudControllerConstants.DOCKER_PARTITION_PROVIDER.equals(provider)) {
             // if this is a docker based Partition
-            KubernetesBasedPartitionValidator validator = new KubernetesBasedPartitionValidator();
+            KubernetesPartitionValidator validator = new KubernetesPartitionValidator();
             validator.validate(partitionId, partitionProperties);
             return null;
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/InstanceCreator.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/InstanceCreator.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/InstanceCreator.java
index b666c1c..01059ec 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/InstanceCreator.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/InstanceCreator.java
@@ -19,10 +19,12 @@
 
 package org.apache.stratos.cloud.controller.services.impl;
 
+import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.context.CloudControllerContext;
 import org.apache.stratos.cloud.controller.domain.*;
+import org.apache.stratos.cloud.controller.exception.CartridgeNotFoundException;
 import org.apache.stratos.cloud.controller.iaases.Iaas;
 import org.apache.stratos.cloud.controller.messaging.publisher.StatisticsDataPublisher;
 import org.apache.stratos.cloud.controller.messaging.topology.TopologyBuilder;
@@ -40,13 +42,10 @@ public class InstanceCreator implements Runnable {
 
     private MemberContext memberContext;
     private IaasProvider iaasProvider;
-    private String cartridgeType;
 
-    public InstanceCreator(MemberContext memberContext, IaasProvider iaasProvider,
-                           String cartridgeType) {
+    public InstanceCreator(MemberContext memberContext, IaasProvider iaasProvider) {
         this.memberContext = memberContext;
         this.iaasProvider = iaasProvider;
-        this.cartridgeType = cartridgeType;
     }
 
     @Override
@@ -61,28 +60,36 @@ public class InstanceCreator implements Runnable {
             Iaas iaas = iaasProvider.getIaas();
 
             // Create instance
-            NodeMetadata node = createInstance(iaas, clusterContext, memberContext);
+            memberContext = createInstance(iaas, memberContext);
+
+            if(log.isInfoEnabled()) {
+                log.info(String.format("Instance is starting up: [cartridge-type] %s [cluster-id] %s [instance-id] %s"
+                        , memberContext.getCartridgeType(), memberContext.getClusterId(), memberContext.getInstanceId()));
+            }
 
             // Attach volumes
             attachVolumes(iaas, clusterContext, memberContext);
 
             // Allocate IP address
-            iaas.allocateIpAddress(clusterId, memberContext, partition, cartridgeType, node);
+            iaas.allocateIpAddress(clusterId, memberContext, partition);
 
 
             // Update topology
-            TopologyBuilder.handleMemberSpawned(cartridgeType, clusterId,
-                    partition.getId(), memberContext.getPrivateIpAddress(), memberContext.getPublicIpAddress(),
-                    memberContext);
+            TopologyBuilder.handleMemberSpawned(memberContext);
 
             // Publish instance creation statistics to BAM
-            StatisticsDataPublisher.publish(memberContext.getMemberId(),
+            StatisticsDataPublisher.publish(
+                    memberContext.getMemberId(),
                     memberContext.getPartition().getId(),
                     memberContext.getNetworkPartitionId(),
                     memberContext.getClusterId(),
-                    cartridgeType,
+                    memberContext.getCartridgeType(),
                     MemberStatus.Created.toString(),
-                    node);
+                    memberContext.getInstanceMetadata());
+        } catch (Exception e) {
+            String message = String.format("Could not start instance: [cartridge-type] %s [cluster-id] %s",
+                    memberContext.getCartridgeType(), memberContext.getClusterId());
+            log.error(message, e);
         } finally {
             if(lock != null) {
                 CloudControllerContext.getInstance().releaseWriteLock(lock);
@@ -90,45 +97,40 @@ public class InstanceCreator implements Runnable {
         }
     }
 
-    private NodeMetadata createInstance(Iaas iaas, ClusterContext clusterContext, MemberContext memberContext) {
-        NodeMetadata node = iaas.createInstance(clusterContext, memberContext);
+    private MemberContext createInstance(Iaas iaas, MemberContext memberContext) throws CartridgeNotFoundException {
+        memberContext = iaas.createInstance(memberContext);
 
-        // node id
-        String nodeId = node.getId();
-        if (nodeId == null) {
-            String msg = "Node id of the starting instance is null\n" + memberContext.toString();
+        // Validate node id
+        String instanceId = memberContext.getInstanceId();
+        if (StringUtils.isBlank(instanceId)) {
+            String msg = "Instance id of the starting instance is null\n" + memberContext.toString();
             log.error(msg);
             throw new IllegalStateException(msg);
         }
 
-        memberContext.setNodeId(nodeId);
+        // Update member context and persist changes
         CloudControllerContext.getInstance().updateMemberContext(memberContext);
         CloudControllerContext.getInstance().persist();
 
         if (log.isDebugEnabled()) {
-            log.debug("Instance created: [node-metadata] " + node.toString());
+            log.debug("Instance created: [member-context] " + memberContext.toString());
         }
-        return node;
+        return memberContext;
     }
 
     public void attachVolumes(Iaas iaas, ClusterContext clusterContext, MemberContext memberContext) {
         // attach volumes
         if (clusterContext.isVolumeRequired()) {
             // remove region prefix
-            String nodeId = memberContext.getNodeId();
-            String instanceId = nodeId.indexOf('/') != -1 ? nodeId
-                    .substring(nodeId.indexOf('/') + 1, nodeId.length())
-                    : nodeId;
-            memberContext.setInstanceId(instanceId);
             if (clusterContext.getVolumes() != null) {
                 for (Volume volume : clusterContext.getVolumes()) {
                     try {
-                        iaas.attachVolume(instanceId, volume.getId(), volume.getDevice());
+                        iaas.attachVolume(memberContext.getInstanceId(), volume.getId(), volume.getDevice());
                     } catch (Exception e) {
                         // continue without throwing an exception, since
                         // there is an instance already running
                         log.error("Attaching volume to instance [ "
-                                + instanceId + " ] failed!", e);
+                                + memberContext.getInstanceId() + " ] failed!", e);
                     }
                 }
             }

http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/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 dbf36bc..8dc6164 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
@@ -108,7 +108,6 @@ public class CloudControllerUtil {
         cartridge.setDefaultAutoscalingPolicy(config.getDefaultAutoscalingPolicy());
         cartridge.setDefaultDeploymentPolicy(config.getDefaultDeploymentPolicy());
         cartridge.setServiceGroup(config.getServiceGroup());
-        cartridge.setDeployerType(config.getDeployerType());
         org.apache.stratos.common.Properties props = config.getProperties();
         if (props != null) {
             for (Property prop : props.getProperties()) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/PodActivationWatcher.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/PodActivationWatcher.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/PodActivationWatcher.java
index d03f0d9..465f0e8 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/PodActivationWatcher.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/PodActivationWatcher.java
@@ -23,25 +23,27 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.context.CloudControllerContext;
 import org.apache.stratos.cloud.controller.domain.MemberContext;
-import org.apache.stratos.cloud.controller.registry.RegistryManager;
 import org.apache.stratos.cloud.controller.messaging.topology.TopologyBuilder;
 import org.apache.stratos.kubernetes.client.KubernetesApiClient;
 import org.apache.stratos.kubernetes.client.model.Pod;
 
 /**
- * Checks whether a container is active and update the {@link org.apache.stratos.cloud.controller.context.CloudControllerContext}.
+ * Checks whether a container is active and update the
+ * {@link org.apache.stratos.cloud.controller.context.CloudControllerContext}.
  */
 public class PodActivationWatcher implements Runnable {
 
-    private static final Log LOG = LogFactory
-            .getLog(PodActivationWatcher.class);
+    private static final Log log = LogFactory.getLog(PodActivationWatcher.class);
+
+    private static final String POD_STATE_RUNNING = "Running";
+
     private String podId;
-    private MemberContext ctxt;
+    private MemberContext memberContext;
     private KubernetesApiClient kubApi;
     
-    public PodActivationWatcher(String podId, MemberContext ctxt, KubernetesApiClient kubApi) {
+    public PodActivationWatcher(String podId, MemberContext memberContext, KubernetesApiClient kubApi) {
         this.podId = podId;
-        this.ctxt = ctxt;
+        this.memberContext = memberContext;
         this.kubApi = kubApi;
     }
 
@@ -50,30 +52,27 @@ public class PodActivationWatcher implements Runnable {
         try {
             CloudControllerContext cloudControllerContext = CloudControllerContext.getInstance();
             Pod pod = kubApi.getPod(podId);
-            if (LOG.isDebugEnabled()) {
-                LOG.debug("PodActivationWatcher running : "+pod.getCurrentState().getStatus());
+            if (log.isDebugEnabled()) {
+                log.debug("Pod activation watcher running: [status] " + pod.getCurrentState().getStatus());
             }
-            if ("Running".equals(pod.getCurrentState().getStatus()) && ctxt.getPublicIpAddress() == null) {
+            if (POD_STATE_RUNNING.equals(pod.getCurrentState().getStatus()) && memberContext.getPublicIpAddress() == null) {
                 String hostIP = pod.getCurrentState().getHost();
-                ctxt.setPublicIpAddress(hostIP);
-                ctxt.setPrivateIpAddress(hostIP);
-                cloudControllerContext.addMemberContext(ctxt);
+                memberContext.setPublicIpAddress(hostIP);
+                memberContext.setPrivateIpAddress(hostIP);
+                cloudControllerContext.addMemberContext(memberContext);
+
                 // trigger topology
-                TopologyBuilder.handleMemberSpawned(ctxt.getCartridgeType(), ctxt.getClusterId(), 
-                        null, hostIP, hostIP, ctxt);
-                
+                TopologyBuilder.handleMemberSpawned(memberContext);
                 cloudControllerContext.persist();
             }
             
         } catch (Exception e) {
             // not logging exception intentionally
-            LOG.error("Container Activation Watcher Failed.. Cause: "+e.getMessage());
+            log.error("Container activation watcher failed: " + e.getMessage());
             
-            if (LOG.isDebugEnabled()) {
-                LOG.debug(e);
+            if (log.isDebugEnabled()) {
+                log.debug(e);
             }
         }
-        
     }
-    
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/cartridge/definition/CartridgeDefinitionBean.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/cartridge/definition/CartridgeDefinitionBean.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/cartridge/definition/CartridgeDefinitionBean.java
index 530f45a..4fe0ede 100644
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/cartridge/definition/CartridgeDefinitionBean.java
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/cartridge/definition/CartridgeDefinitionBean.java
@@ -20,7 +20,6 @@
 package org.apache.stratos.common.beans.cartridge.definition;
 
 import javax.xml.bind.annotation.XmlRootElement;
-
 import java.util.List;
 
 @XmlRootElement(name = "cartridgeDefinitionBean")
@@ -46,7 +45,6 @@ public class CartridgeDefinitionBean {
     private String defaultDeploymentPolicy;
     private String serviceGroup;
     private ContainerBean container;
-    private String deployerType;
     private List<PropertyBean> property;
     private List<String> exportingProperties;
 
@@ -252,12 +250,4 @@ public class CartridgeDefinitionBean {
     public void setContainer(ContainerBean container) {
         this.container = container;
     }
-
-    public String getDeployerType() {
-        return deployerType;
-    }
-
-    public void setDeployerType(String deployerType) {
-        this.deployerType = deployerType;
-    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/topology/Member.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/topology/Member.java b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/topology/Member.java
index 7697a06..98f3052 100644
--- a/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/topology/Member.java
+++ b/components/org.apache.stratos.common/src/main/java/org/apache/stratos/common/beans/topology/Member.java
@@ -27,6 +27,8 @@ public class Member {
 
     private String serviceName;
     private String clusterId;
+    private String instanceId;
+    private String clusterInstanceId;
     private String networkPartitionId;
     private String partitionId;
     private String memberId;
@@ -35,15 +37,6 @@ public class Member {
     private String lbClusterId;
     private String memberPublicIp;
     private List<PropertyBean> property;
-    
-    @Override
-    public String toString() {
-        return "Member [serviceName=" + getServiceName() + ", clusterId=" + getClusterId() + ", networkPartitionId="
-                + getNetworkPartitionId() + ", partitionId=" + getPartitionId() + ", memberId=" + getMemberId() + ", status=" + getStatus()
-                + ", memberIp=" + getMemberIp() + ", lbClusterId=" + getLbClusterId() + ", memberPublicIp=" + getMemberPublicIp()
-                + ", property=" + getProperty() + "]";
-    }
-
 
     public String getServiceName() {
         return serviceName;
@@ -124,4 +117,36 @@ public class Member {
     public void setProperty(List<PropertyBean> property) {
         this.property = property;
     }
+
+    public String getInstanceId() {
+        return instanceId;
+    }
+
+    public void setInstanceId(String instanceId) {
+        this.instanceId = instanceId;
+    }
+
+    public String getClusterInstanceId() {
+        return clusterInstanceId;
+    }
+
+    public void setClusterInstanceId(String clusterInstanceId) {
+        this.clusterInstanceId = clusterInstanceId;
+    }
+
+    @Override
+    public String toString() {
+        return "Member [serviceName=" + getServiceName()
+                + ", clusterId=" + getClusterId()
+                + ", memberId=" + getMemberId()
+                + ", instanceId=" + getInstanceId()
+                + ", clusterInstanceId=" + getClusterInstanceId()
+                + ", networkPartitionId=" + getNetworkPartitionId()
+                + ", partitionId=" + getPartitionId()
+                + ", status=" + getStatus()
+                + ", memberIp=" + getMemberIp()
+                + ", memberPublicIp=" + getMemberPublicIp()
+                + ", lbClusterId=" + getLbClusterId()
+                + ", property=" + getProperty() + "]";
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
index 2859adf..f075b8e 100644
--- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
+++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/KubernetesApiClient.java
@@ -230,7 +230,6 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
 			throws KubernetesClientException {
 
 		try {
-			
 			GsonBuilder gsonBuilder = new GsonBuilder();
 			Gson gson = gsonBuilder.create();
 			String content = gson.toJson(controller);
@@ -264,7 +263,6 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
 					+ controller;
 			log.error(msg, e);
 			throw new KubernetesClientException(msg, e);
-
 		}
 	}
 
@@ -471,21 +469,20 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
 	}
 
     @Override
-    public Pod[] getSelectedPods(Label[] label) throws KubernetesClientException {
+    public Pod[] queryPods(Label[] label) throws KubernetesClientException {
         
         try {
             String labelQuery = getLabelQuery(label);
             URI uri = new URIBuilder(baseURL + "pods").addParameter("labels", labelQuery).build();
-            KubernetesResponse res = restClient.doGet(uri);
+            KubernetesResponse response = restClient.doGet(uri);
             
-            handleNullResponse("Pod retrieval failed.", res);
+            handleNullResponse("Pod retrieval failed, kubernetes api response is null", response);
             
-            if (res.getStatusCode() == HttpStatus.SC_NOT_FOUND) {
+            if (response.getStatusCode() == HttpStatus.SC_NOT_FOUND) {
                 return new Pod[0];
             }
             
-            String content = res.getContent();
-            
+            String content = response.getContent();
             GsonBuilder gsonBuilder = new GsonBuilder();
             Gson gson = gsonBuilder.create();
             PodList podList = gson.fromJson(content, PodList.class);
@@ -493,7 +490,6 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
                 return new Pod[0];
             }
             return podList.getItems();
-            
         } catch (Exception e) {
             String msg = "Error while retrieving Pods.";
             log.error(msg, e);
@@ -512,9 +508,8 @@ public class KubernetesApiClient implements KubernetesAPIClientInterface {
     private void handleNullResponse(String message, KubernetesResponse res)
             throws KubernetesClientException {
         if (res == null) {
-            log.error(message+ " Null response received.");
+            log.error(message+ " Null response received");
             throw new KubernetesClientException(message);
         }
     }
-	
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java
index d27fb98..aab4f52 100644
--- a/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java
+++ b/components/org.apache.stratos.kubernetes.client/src/main/java/org/apache/stratos/kubernetes/client/interfaces/KubernetesAPIClientInterface.java
@@ -49,7 +49,7 @@ public interface KubernetesAPIClientInterface {
 	 * @return Pods selected Pods by executing the label query.
 	 * @throws KubernetesClientException
 	 */
-	public Pod[] getSelectedPods(Label[] label) throws KubernetesClientException;
+	public Pod[] queryPods(Label[] label) throws KubernetesClientException;
 	
 	/**
 	 * Create a new Pod

http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java b/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java
index 7f74f40..03dc7d8 100644
--- a/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java
+++ b/components/org.apache.stratos.kubernetes.client/src/test/java/org/apache/stratos/kubernetes/client/live/KubernetesApiClientLiveTest.java
@@ -134,7 +134,7 @@ public class KubernetesApiClientLiveTest extends TestCase{
         }
 	    assertEquals(true, match);
 	    
-	    Pod[] selectedPods = client.getSelectedPods(new Label[]{l});
+	    Pod[] selectedPods = client.queryPods(new Label[]{l});
 	    assertEquals(1, selectedPods.length);
 	    
 	    if (log.isDebugEnabled()) {
@@ -154,15 +154,15 @@ public class KubernetesApiClientLiveTest extends TestCase{
 	        assertEquals(true, e instanceof KubernetesClientException);
 	    }
 	    
-	    selectedPods = client.getSelectedPods(new Label[]{l});
+	    selectedPods = client.queryPods(new Label[]{l});
         assertEquals(0, selectedPods.length);
         
         Label ll = new Label();
         ll.setName("nirmal2");
-        selectedPods = client.getSelectedPods(new Label[]{l, ll});
+        selectedPods = client.queryPods(new Label[]{l, ll});
         assertEquals(0, selectedPods.length);
         
-        selectedPods = client.getSelectedPods(new Label[]{});
+        selectedPods = client.queryPods(new Label[]{});
         assertEquals(0, selectedPods.length);
 	}
 	
@@ -219,7 +219,7 @@ public class KubernetesApiClientLiveTest extends TestCase{
         
         assertEquals(1, client.getAllReplicationControllers().length);
         
-        Pod[] pods = client.getSelectedPods(new Label[]{l1});
+        Pod[] pods = client.queryPods(new Label[]{l1});
         assertEquals(replicas, pods.length);
         
         // test incorrect replica count
@@ -236,7 +236,7 @@ public class KubernetesApiClientLiveTest extends TestCase{
         
         Thread.sleep(10000);
         
-        pods = client.getSelectedPods(new Label[]{l1});
+        pods = client.queryPods(new Label[]{l1});
         assertEquals(replicas, pods.length);
         
         client.deleteReplicationController(id);

http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/conf/LoadBalancerConfiguration.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/conf/LoadBalancerConfiguration.java b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/conf/LoadBalancerConfiguration.java
index b62c3e1..9859864 100644
--- a/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/conf/LoadBalancerConfiguration.java
+++ b/components/org.apache.stratos.load.balancer/src/main/java/org/apache/stratos/load/balancer/conf/LoadBalancerConfiguration.java
@@ -473,7 +473,8 @@ public class LoadBalancerConfiguration {
                             String memberId = memberNode.getName();
                             // we are making it as 1 because we are not using this for static loadbalancer configuration
                             long initTime = -1;
-                            Member member = new Member(cluster.getServiceName(), cluster.getClusterId(), Constants.STATIC_NETWORK_PARTITION, Constants.STATIC_PARTITION, memberId, initTime);
+                            Member member = new Member(cluster.getServiceName(), cluster.getClusterId(), memberId,
+                                    memberId, "1", Constants.STATIC_NETWORK_PARTITION, Constants.STATIC_PARTITION, initTime);
                             String ip = memberNode.getProperty(Constants.CONF_PROPERTY_IP);
                             validateRequiredPropertyInNode(Constants.CONF_PROPERTY_IP, ip, String.format("member %s", memberId));
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/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 7ab1837..4446267 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
@@ -108,7 +108,7 @@ public class CloudControllerServiceClient {
                             String payload, String tenantRange,
                             String hostName, Properties properties,
                             String autoscalorPolicyName, String deploymentPolicyName, Persistence persistence) throws RemoteException,
-                            CloudControllerServiceUnregisteredCartridgeExceptionException {		
+                            CloudControllerServiceCartridgeNotFoundExceptionException {
 	    Registrant registrant = new Registrant();
 	    registrant.setClusterId(clusterId);
 	    registrant.setCartridgeType(cartridgeType);
@@ -133,7 +133,7 @@ public class CloudControllerServiceClient {
 	}
 
 	public CartridgeInfo getCartridgeInfo(String cartridgeType) throws RemoteException, 
-	CloudControllerServiceUnregisteredCartridgeExceptionException {
+	CloudControllerServiceCartridgeNotFoundExceptionException {
 		return stub.getCartridgeInfo(cartridgeType);
 	}
 	

http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/cartridge/CartridgeDeploymentManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/cartridge/CartridgeDeploymentManager.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/cartridge/CartridgeDeploymentManager.java
index 3056a75..915755e 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/cartridge/CartridgeDeploymentManager.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/cartridge/CartridgeDeploymentManager.java
@@ -18,16 +18,9 @@
  */
 package org.apache.stratos.manager.deploy.cartridge;
 
-import org.apache.stratos.common.constants.StratosConstants;
-
-
 public class CartridgeDeploymentManager {
 
-	public static CartridgeDeployer getDeploymentManager(String deployerType){
-		if(deployerType != null && StratosConstants.KUBERNETES_DEPLOYER_TYPE.equals(deployerType)) {
-			return new DockerCartridgeDeployer();
-		} else {
-			return new DefaultCartridgeDeployer();
-		} 
-	}
+    public static CartridgeDeployer getDeploymentManager() {
+        return new DefaultCartridgeDeployer();
+    }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/ServiceDeploymentManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/ServiceDeploymentManager.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/ServiceDeploymentManager.java
index a56dcdf..1ceff80 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/ServiceDeploymentManager.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/deploy/service/ServiceDeploymentManager.java
@@ -21,7 +21,7 @@ package org.apache.stratos.manager.deploy.service;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.stratos.cloud.controller.stub.CloudControllerServiceUnregisteredCartridgeExceptionException;
+import org.apache.stratos.cloud.controller.stub.CloudControllerServiceCartridgeNotFoundExceptionException;
 import org.apache.stratos.cloud.controller.stub.domain.CartridgeInfo;
 import org.apache.stratos.cloud.controller.stub.domain.LoadbalancerConfig;
 import org.apache.stratos.common.Properties;
@@ -74,7 +74,7 @@ public class ServiceDeploymentManager {
         try {
             cartridgeInfo = CloudControllerServiceClient.getServiceClient().getCartridgeInfo(type);
 
-        } catch (CloudControllerServiceUnregisteredCartridgeExceptionException e) {
+        } catch (CloudControllerServiceCartridgeNotFoundExceptionException e) {
             String message = type + " is not a valid cartridgeSubscription type. Please try again with a valid cartridgeSubscription type.";
             log.error(message);
             throw new ADCException(message, e);

http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/deployer/DefaultServiceGroupDeployer.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/deployer/DefaultServiceGroupDeployer.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/deployer/DefaultServiceGroupDeployer.java
index 125d226..e737d23 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/deployer/DefaultServiceGroupDeployer.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/deployer/DefaultServiceGroupDeployer.java
@@ -26,7 +26,7 @@ import org.apache.stratos.autoscaler.stub.AutoScalerServiceAutoScalerExceptionEx
 import org.apache.stratos.autoscaler.stub.AutoScalerServiceInvalidServiceGroupExceptionException;
 import org.apache.stratos.autoscaler.stub.pojo.Dependencies;
 import org.apache.stratos.autoscaler.stub.pojo.ServiceGroup;
-import org.apache.stratos.cloud.controller.stub.CloudControllerServiceUnregisteredCartridgeExceptionException;
+import org.apache.stratos.cloud.controller.stub.CloudControllerServiceCartridgeNotFoundExceptionException;
 import org.apache.stratos.manager.client.AutoscalerServiceClient;
 import org.apache.stratos.manager.client.CloudControllerServiceClient;
 import org.apache.stratos.manager.exception.ADCException;
@@ -113,7 +113,7 @@ public class DefaultServiceGroupDeployer implements ServiceGroupDeployer {
                     }
                 } catch (RemoteException e) {
                     throw new ADCException(e);
-                } catch (CloudControllerServiceUnregisteredCartridgeExceptionException e) {
+                } catch (CloudControllerServiceCartridgeNotFoundExceptionException e) {
                     throw new ADCException(e);
                 }
             }

http://git-wip-us.apache.org/repos/asf/stratos/blob/b575c7d6/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/deployer/ServiceGroupDeployer.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/deployer/ServiceGroupDeployer.java b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/deployer/ServiceGroupDeployer.java
index 342d5cc..8d5653f 100644
--- a/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/deployer/ServiceGroupDeployer.java
+++ b/components/org.apache.stratos.manager/src/main/java/org/apache/stratos/manager/grouping/deployer/ServiceGroupDeployer.java
@@ -19,7 +19,7 @@
 
 package org.apache.stratos.manager.grouping.deployer;
 
-import org.apache.stratos.cloud.controller.stub.CloudControllerServiceUnregisteredCartridgeExceptionException;
+import org.apache.stratos.cloud.controller.stub.CloudControllerServiceCartridgeNotFoundExceptionException;
 import org.apache.stratos.manager.exception.ADCException;
 import org.apache.stratos.manager.exception.InvalidServiceGroupException;
 import org.apache.stratos.manager.exception.ServiceGroupDefinitioException;
@@ -28,7 +28,7 @@ import org.apache.stratos.manager.grouping.definitions.ServiceGroupDefinition;
 public interface ServiceGroupDeployer {
 
     public void deployServiceGroupDefinition(Object serviceGroupObj) throws InvalidServiceGroupException, ServiceGroupDefinitioException,
-            ADCException, CloudControllerServiceUnregisteredCartridgeExceptionException;
+            ADCException, CloudControllerServiceCartridgeNotFoundExceptionException;
 
     public ServiceGroupDefinition getServiceGroupDefinition(String serviceGroupDefinitionName) throws ServiceGroupDefinitioException, ADCException;