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/21 17:10:45 UTC

[3/3] stratos git commit: Initial implementation of kubernetes iaas createInstance(), terminateInstance() methods

Initial implementation of kubernetes iaas createInstance(), terminateInstance() methods


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

Branch: refs/heads/master
Commit: 405ff36de8c79cd1b786272cb7ebeb1c1644c8f4
Parents: 9a355d9
Author: Imesh Gunaratne <im...@apache.org>
Authored: Sun Dec 21 21:38:51 2014 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Sun Dec 21 21:40:19 2014 +0530

----------------------------------------------------------------------
 .../autoscaler/api/AutoScalerServiceImpl.java   |   3 +-
 .../applications/ApplicationUtils.java          |   4 +-
 .../partition/ClusterLevelPartitionContext.java |   4 +-
 .../partition/GroupLevelPartitionContext.java   |   2 +-
 .../internal/AutoscalerServerComponent.java     |   4 +-
 .../kubernetes/KubernetesManager.java           |   4 +-
 .../monitor/cluster/ClusterMonitor.java         |   2 +-
 .../autoscaler/registry/RegistryManager.java    |   2 +-
 .../stratos/autoscaler/util/AutoscalerUtil.java |   2 +-
 .../publisher/CartridgeAgentEventPublisher.java |   1 +
 .../domain/ApplicationClusterContext.java       |   3 -
 .../cloud/controller/domain/Cartridge.java      |   2 +-
 .../cloud/controller/domain/ClusterContext.java |   7 +
 .../domain/KubernetesClusterContext.java        |  48 +-
 ...inerClusterContextToKubernetesContainer.java |  25 +-
 ...tainerClusterContextToKubernetesService.java |  79 +--
 ...erClusterContextToReplicationController.java |  54 +-
 .../functions/PodToMemberContext.java           |  36 +-
 .../stratos/cloud/controller/iaases/Iaas.java   |   4 +-
 .../cloud/controller/iaases/JcloudsEC2Iaas.java |   6 +-
 .../cloud/controller/iaases/JcloudsIaas.java    |   5 +-
 .../controller/iaases/JcloudsOpenstackIaas.java |   2 +-
 .../cloud/controller/iaases/KubernetesIaas.java | 617 ++++++++-----------
 .../cloud/controller/iaases/MockIaas.java       |   2 +-
 .../messaging/topology/TopologyBuilder.java     |   9 +-
 .../impl/CloudControllerServiceImpl.java        |   2 +-
 .../services/impl/InstanceCreator.java          |   3 +-
 .../controller/util/CloudControllerUtil.java    |   6 +-
 .../org/apache/stratos/common/Properties.java   |   9 +
 .../org/apache/stratos/common/Property.java     |   6 +-
 .../common/constants/StratosConstants.java      |   2 +-
 .../kubernetes/client/KubernetesApiClient.java  |  80 +--
 .../KubernetesAPIClientInterface.java           |  17 +-
 .../kubernetes/client/model/Container.java      |  16 +-
 .../client/model/EnvironmentVariable.java       |   2 -
 .../stratos/kubernetes/client/model/Label.java  |  40 --
 .../stratos/kubernetes/client/model/Labels.java |  42 ++
 .../kubernetes/client/model/Manifest.java       |  37 +-
 .../stratos/kubernetes/client/model/Pod.java    |  34 +-
 .../client/model/ReplicationController.java     |  25 +-
 .../kubernetes/client/model/Service.java        |  31 +-
 .../live/KubernetesApiClientLiveTest.java       |  61 +-
 .../kubernetes/client/unit/PodUnitTest.java     |   8 +-
 .../behaviour/CartridgeMgtBehaviour.java        |   2 +-
 .../manager/CartridgeSubscriptionManager.java   |   5 +-
 .../utils/ApplicationManagementUtil.java        |   4 +-
 46 files changed, 651 insertions(+), 708 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
index 43e881d..4499f17 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/api/AutoScalerServiceImpl.java
@@ -413,7 +413,8 @@ public class AutoScalerServiceImpl implements AutoScalerServiceInterface {
                 Properties properties = entry.getValue();
                 if (properties != null) {
                     for (Property property : properties.getProperties()) {
-                        metaDataServiceClien.addPropertyToCluster(appId, alias, property.getName(), property.getValue());
+                        metaDataServiceClien.addPropertyToCluster(appId, alias, property.getName(),
+                                String.valueOf(property.getValue()));
                     }
                 }
             }

http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationUtils.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationUtils.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationUtils.java
index d0918e6..f48b8a9 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationUtils.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/applications/ApplicationUtils.java
@@ -227,7 +227,7 @@ public class ApplicationUtils {
                         if ("DEPLOYMENT".equals(payloadParamSubstring)) {
                             isDeploymentParam = true;
                         }
-                        payloadData.add(payloadParamSubstring, propertyEntry.getValue());
+                        payloadData.add(payloadParamSubstring, String.valueOf(propertyEntry.getValue()));
                     }
                 }
             }
@@ -239,7 +239,7 @@ public class ApplicationUtils {
 				if (property.getName().startsWith("payload_parameter.")) {
                     String payloadParamName = property.getName();
                     String payloadParamSubstring = payloadParamName.substring(payloadParamName.indexOf(".") + 1);
-                    payloadData.add(payloadParamSubstring, property.getValue());
+                    payloadData.add(payloadParamSubstring, String.valueOf(property.getValue()));
 				}
 			}
 		}

http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
index 547aca7..5724e71 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/ClusterLevelPartitionContext.java
@@ -145,7 +145,7 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
         }
         synchronized (pendingMembers) {
             for (Iterator<MemberContext> iterator = pendingMembers.iterator(); iterator.hasNext(); ) {
-                MemberContext pendingMember = (MemberContext) iterator.next();
+                MemberContext pendingMember = iterator.next();
                 if (id.equals(pendingMember.getMemberId())) {
                     iterator.remove();
                     return true;
@@ -653,7 +653,7 @@ public class ClusterLevelPartitionContext extends PartitionContext implements Se
                 Iterator<Entry<String, MemberContext>> iterator = obsoletedMembers.entrySet().iterator();
                 while (iterator.hasNext()) {
                     Map.Entry<String, MemberContext> pairs = iterator.next();
-                    MemberContext obsoleteMember = (MemberContext) pairs.getValue();
+                    MemberContext obsoleteMember = pairs.getValue();
                     if (obsoleteMember == null) {
                         continue;
                     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java
index ccb8cfe..6a6b93f 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/context/partition/GroupLevelPartitionContext.java
@@ -177,7 +177,7 @@ public class GroupLevelPartitionContext extends PartitionContext implements Seri
         }
         synchronized (pendingInstances) {
             for (Iterator<Instance> iterator = pendingInstances.iterator(); iterator.hasNext(); ) {
-                Instance pendingInstance = (Instance) iterator.next();
+                Instance pendingInstance = iterator.next();
                 if (id.equals(pendingInstance.getInstanceId())) {
                     iterator.remove();
                     return true;

http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java
index 5fc6f89..9de9587 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/internal/AutoscalerServerComponent.java
@@ -39,7 +39,6 @@ import org.apache.stratos.autoscaler.util.ServiceReferenceHolder;
 import org.apache.stratos.cloud.controller.stub.domain.Partition;
 import org.apache.stratos.common.kubernetes.KubernetesGroup;
 import org.apache.stratos.common.threading.StratosThreadPool;
-import org.drools.reteoo.PartitionManager;
 import org.osgi.service.component.ComponentContext;
 import org.wso2.carbon.ntask.core.service.TaskService;
 import org.wso2.carbon.registry.api.RegistryException;
@@ -50,7 +49,6 @@ import java.io.File;
 import java.util.Iterator;
 import java.util.List;
 import java.util.concurrent.ExecutorService;
-import java.util.logging.FileHandler;
 
 /**
  * @scr.component name=org.apache.stratos.autoscaler.internal.AutoscalerServerComponent"
@@ -136,7 +134,7 @@ public class AutoscalerServerComponent {
 			Iterator<KubernetesGroup> kubernetesGroupIterator = kubernetesGroupList.iterator();
 			while (kubernetesGroupIterator.hasNext()) {
 				KubernetesGroup kubernetesGroup = kubernetesGroupIterator.next();
-				KubernetesManager.getInstance().addNewKubernetesGroup(kubernetesGroup);
+				KubernetesManager.getInstance().addKubernetesGroup(kubernetesGroup);
 			}
 
 			//starting the processor chain

http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/kubernetes/KubernetesManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/kubernetes/KubernetesManager.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/kubernetes/KubernetesManager.java
index 4eb420a..e67fd8d 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/kubernetes/KubernetesManager.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/kubernetes/KubernetesManager.java
@@ -158,9 +158,9 @@ public class KubernetesManager {
 
 
     /**
-     * Register a new KubernetesGroup in AutoScaler.
+     * Register a KubernetesGroup in AutoScaler.
      */
-    public synchronized boolean addNewKubernetesGroup(KubernetesGroup kubernetesGroup)
+    public synchronized boolean addKubernetesGroup(KubernetesGroup kubernetesGroup)
             throws InvalidKubernetesGroupException {
 
         if (kubernetesGroup == null) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
index 27cad51..2211775 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/monitor/cluster/ClusterMonitor.java
@@ -176,7 +176,7 @@ public class ClusterMonitor extends AbstractClusterMonitor {
         if (props != null && props.getProperties() != null) {
             for (Property prop : props.getProperties()) {
                 if (prop.getName().equals("PRIMARY")) {
-                    if (Boolean.parseBoolean(prop.getValue())) {
+                    if (Boolean.parseBoolean(String.valueOf(prop.getValue()))) {
                         log.debug("Adding member id [" + memberContext.getMemberId() + "] " +
                                 "member instance id [" + memberContext.getInstanceId() + "] as a primary member");
                         return true;

http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
index 28e107c..5cb8bda 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/registry/RegistryManager.java
@@ -275,7 +275,7 @@ public class RegistryManager {
 
             String applicationResourcePath = AutoScalerConstants.AUTOSCALER_RESOURCE +
                     AutoScalerConstants.APPLICATION_CONTEXTS_RESOURCE + "/" + applicationId;
-            return (ApplicationContext) getApplicationContextByResourcePath(applicationResourcePath);
+            return getApplicationContextByResourcePath(applicationResourcePath);
         } finally {
             PrivilegedCarbonContext.endTenantFlow();
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
index 144d062..ebf5908 100644
--- a/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
+++ b/components/org.apache.stratos.autoscaler/src/main/java/org/apache/stratos/autoscaler/util/AutoscalerUtil.java
@@ -327,7 +327,7 @@ public class AutoscalerUtil {
                 if ((property != null) && (property.getValue() != null)) {
                     org.apache.stratos.cloud.controller.stub.Property newProperty = new org.apache.stratos.cloud.controller.stub.Property();
                     newProperty.setName(property.getName());
-                    newProperty.setValue(property.getValue());
+                    newProperty.setValue(String.valueOf(property.getValue()));
                     stubProps.addProperties(newProperty);
                 }
             }

http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/event/publisher/CartridgeAgentEventPublisher.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/event/publisher/CartridgeAgentEventPublisher.java b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/event/publisher/CartridgeAgentEventPublisher.java
index 5b01a4f..269cb47 100644
--- a/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/event/publisher/CartridgeAgentEventPublisher.java
+++ b/components/org.apache.stratos.cartridge.agent/src/main/java/org/apache/stratos/cartridge/agent/event/publisher/CartridgeAgentEventPublisher.java
@@ -56,6 +56,7 @@ public class CartridgeAgentEventPublisher {
 					CartridgeAgentConfiguration.getInstance().getClusterInstanceId(),
 					CartridgeAgentConfiguration.getInstance().getNetworkPartitionId(),
 					CartridgeAgentConfiguration.getInstance().getPartitionId());
+
 			String topic = Util.getMessageTopicName(event);
 			EventPublisher eventPublisher = EventPublisherPool
 					.getPublisher(topic);

http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ApplicationClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ApplicationClusterContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ApplicationClusterContext.java
index ca3457d..cdd8cf3 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ApplicationClusterContext.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ApplicationClusterContext.java
@@ -43,11 +43,9 @@ public class ApplicationClusterContext {
     // properties
     private Properties properties;
 
-
     public ApplicationClusterContext() {
     }
 
-
     public String getClusterId() {
         return clusterId;
     }
@@ -139,5 +137,4 @@ public class ApplicationClusterContext {
     public void setProperties(Properties properties) {
         this.properties = properties;
     }
-
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Cartridge.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Cartridge.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Cartridge.java
index c3d5d03..6cce42b 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Cartridge.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/Cartridge.java
@@ -127,7 +127,7 @@ public class Cartridge implements Serializable{
     
     public void addIaasProviders(Map<String, IaasProvider> map) {
         for (Iterator<String> iterator = map.keySet().iterator(); iterator.hasNext();) {
-            String key = (String) iterator.next();
+            String key = iterator.next();
             IaasProvider value = map.get(key);
             
             partitionToIaasProvider.put(key, value);

http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ClusterContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ClusterContext.java
index 06e48cc..1652997 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ClusterContext.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ClusterContext.java
@@ -78,6 +78,13 @@ public class ClusterContext implements Serializable{
         return hostName;
     }
 
+    public String findContainerHostName() {
+        if (hostName.indexOf('.') != -1) {
+            hostName = hostName.replace('.', '-');
+        }
+        return hostName;
+    }
+
     public void setHostName(String hostName) {
         this.hostName = hostName;
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/KubernetesClusterContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/KubernetesClusterContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/KubernetesClusterContext.java
index aecd614..83feabd 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/KubernetesClusterContext.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/KubernetesClusterContext.java
@@ -22,6 +22,7 @@ import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.kubernetes.client.KubernetesApiClient;
@@ -44,16 +45,16 @@ public class KubernetesClusterContext implements Serializable {
     private String masterIp;
     private String masterPort;
     // available list of ports
-    private List<Integer> availableHostPorts;
+    private List<Integer> servicePorts;
     // kubernetes client API instance
     private transient KubernetesApiClient kubApi;
     
     public KubernetesClusterContext(String id, String masterIp, String masterPort, int lowerPort, int upperPort) {
-    	availableHostPorts = new ArrayList<Integer>();
+    	servicePorts = new ArrayList<Integer>();
+        this.lowerPort = lowerPort;
     	this.upperPort = upperPort;
-    	this.lowerPort = lowerPort;
-    	// populate the ports
-        populatePorts(lowerPort, upperPort);
+    	// Generate the ports
+        generateServicePorts(lowerPort, upperPort);
     	this.kubernetesClusterId = id;
     	this.masterIp = masterIp;
     	this.masterPort = masterPort;
@@ -68,35 +69,36 @@ public class KubernetesClusterContext implements Serializable {
 	public String getKubernetesClusterId() {
 		return kubernetesClusterId;
 	}
+
 	public void setKubernetesClusterId(String kubernetesClusterId) {
 		this.kubernetesClusterId = kubernetesClusterId;
 	}
 
-	public List<Integer> getAvailableHostPorts() {
-		return availableHostPorts;
+	public List<Integer> getServicePorts() {
+		return servicePorts;
 	}
 
-	public void setAvailableHostPorts(List<Integer> availableHostPorts) {
-		this.availableHostPorts = availableHostPorts;
+	public void setServicePorts(List<Integer> servicePorts) {
+		this.servicePorts = servicePorts;
 	}
 	
-	public int getAnAvailableHostPort() {
-	    if (availableHostPorts.isEmpty()) {
+	public int getNextServicePort() {
+	    if (servicePorts.isEmpty()) {
 	        return -1;
 	    }
-		return availableHostPorts.remove(0);
+		return servicePorts.remove(0);
 	}
 	
-	public void deallocateHostPort (int port) {
-		if (!availableHostPorts.contains(port)) {
-			availableHostPorts.add(port);
+	public void deallocatePort(int port) {
+		if (!servicePorts.contains(port)) {
+			servicePorts.add(port);
+            // TODO Sort elements
 		}
 	}
 
-	private void populatePorts(int i, int j) {
-
-		for (int x = i; x < j; x++) {
-			availableHostPorts.add(x);
+	private void generateServicePorts(int lowerPort, int upperPort) {
+		for (int port = lowerPort; port <= upperPort; port++) {
+			servicePorts.add(port);
 		}
 	}
 
@@ -139,7 +141,7 @@ public class KubernetesClusterContext implements Serializable {
     public int hashCode() {
         final int prime = 31;
         int result = 1;
-        result = prime * result + ((availableHostPorts == null) ? 0 : availableHostPorts.hashCode());
+        result = prime * result + ((servicePorts == null) ? 0 : servicePorts.hashCode());
         result = prime * result + ((kubernetesClusterId == null) ? 0 : kubernetesClusterId.hashCode());
         result = prime * result + lowerPort;
         result = prime * result + ((masterIp == null) ? 0 : masterIp.hashCode());
@@ -157,10 +159,10 @@ public class KubernetesClusterContext implements Serializable {
         if (getClass() != obj.getClass())
             return false;
         KubernetesClusterContext other = (KubernetesClusterContext) obj;
-        if (availableHostPorts == null) {
-            if (other.availableHostPorts != null)
+        if (servicePorts == null) {
+            if (other.servicePorts != null)
                 return false;
-        } else if (!availableHostPorts.equals(other.availableHostPorts))
+        } else if (!servicePorts.equals(other.servicePorts))
             return false;
         if (kubernetesClusterId == null) {
             if (other.kubernetesClusterId != null)

http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesContainer.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesContainer.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesContainer.java
index 2a9137a..4b0916b 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesContainer.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesContainer.java
@@ -49,31 +49,22 @@ public class ContainerClusterContextToKubernetesContainer implements Function<Me
         ClusterContext clusterContext = CloudControllerContext.getInstance().getClusterContext(clusterId);
 
         Container container = new Container();
-        container.setName(getCompatibleName(clusterContext.getHostName()));
+        container.setName(clusterContext.findContainerHostName());
 
         Cartridge cartridge = CloudControllerContext.getInstance().getCartridge(clusterContext.getCartridgeType());
-
         if (cartridge == null) {
-            log.error("Cannot find a Cartridge of type : " + clusterContext.getCartridgeType());
-            return null;
+            String message = "Could not find cartridge: [cartridge-type] " + clusterContext.getCartridgeType();
+            log.error(message);
+            throw new RuntimeException(message);
         }
 
         container.setImage(cartridge.getContainer().getImageName());
-
         container.setPorts(getPorts(clusterContext, cartridge));
-
         container.setEnv(getEnvironmentVars(memberContext, clusterContext));
 
         return container;
     }
 
-    private String getCompatibleName(String hostName) {
-        if (hostName.indexOf('.') != -1) {
-            hostName = hostName.replace('.', '-');
-        }
-        return hostName;
-    }
-
     private Port[] getPorts(ClusterContext ctxt, Cartridge cartridge) {
         Port[] ports = new Port[cartridge.getPortMappings().size()];
         List<Port> portList = new ArrayList<Port>();
@@ -91,7 +82,6 @@ public class ContainerClusterContextToKubernetesContainer implements Function<Me
     }
 
     private EnvironmentVariable[] getEnvironmentVars(MemberContext memberCtxt, ClusterContext ctxt) {
-
         String kubernetesClusterId = CloudControllerUtil.getProperty(ctxt.getProperties(),
                 StratosConstants.KUBERNETES_CLUSTER_ID);
 
@@ -102,19 +92,16 @@ public class ContainerClusterContextToKubernetesContainer implements Function<Me
             Properties props1 = memberCtxt.getProperties();
             if (props1 != null) {
                 for (Property prop : props1.getProperties()) {
-                    addToEnvironment(envVars, prop.getName(), prop.getValue());
+                    addToEnvironment(envVars, prop.getName(), String.valueOf(prop.getValue()));
                 }
             }
         }
 
         EnvironmentVariable[] vars = new EnvironmentVariable[envVars.size()];
-
         return envVars.toArray(vars);
-
     }
 
     private void addToEnvironment(List<EnvironmentVariable> envVars, String payload) {
-
         if (payload != null) {
             String[] entries = payload.split(",");
             for (String entry : entries) {
@@ -128,11 +115,9 @@ public class ContainerClusterContextToKubernetesContainer implements Function<Me
     }
 
     private void addToEnvironment(List<EnvironmentVariable> envVars, String name, String value) {
-
         EnvironmentVariable var = new EnvironmentVariable();
         var.setName(name);
         var.setValue(value);
         envVars.add(var);
     }
-
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesService.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesService.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesService.java
index d6f0a0f..4adba07 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesService.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToKubernetesService.java
@@ -16,48 +16,37 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.stratos.cloud.controller.functions;
-
-import org.apache.stratos.cloud.controller.context.CloudControllerContext;
-import org.apache.stratos.cloud.controller.domain.ClusterContext;
-import org.apache.stratos.cloud.controller.domain.ContainerClusterContext;
-import org.apache.stratos.cloud.controller.domain.KubernetesClusterContext;
-import org.apache.stratos.cloud.controller.domain.MemberContext;
-import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
-import org.apache.stratos.common.constants.StratosConstants;
-import org.apache.stratos.kubernetes.client.model.Selector;
-import org.apache.stratos.kubernetes.client.model.Service;
-
-import com.google.common.base.Function;
-
-/**
- * Is responsible for converting a {@link ContainerClusterContext} object to a Kubernetes
- * {@link Service} Object.
- */
-public class ContainerClusterContextToKubernetesService implements Function<MemberContext, Service> {
-
-    @Override
-    public Service apply(MemberContext memberContext) {
-
-        String clusterId = memberContext.getClusterId();
-        ClusterContext clusterContext = CloudControllerContext.getInstance().getClusterContext(clusterId);
-
-        String kubernetesClusterId = CloudControllerUtil.getProperty(
-                clusterContext.getProperties(), StratosConstants.KUBERNETES_CLUSTER_ID);
-        KubernetesClusterContext kubClusterContext = CloudControllerContext.getInstance()
-                .getKubernetesClusterContext(kubernetesClusterId);
-
-        Service service = new Service();
-        service.setApiVersion("v1beta1");
-        service.setId(CloudControllerUtil.getCompatibleId(clusterId));
-        service.setKind("Service");
-        int hostPort = kubClusterContext.getAnAvailableHostPort();
-        service.setPort(hostPort);
-        Selector selector = new Selector();
-        selector.setName(clusterId);
-        service.setSelector(selector);
-
-        return service;
-    }
-
-}
+//package org.apache.stratos.cloud.controller.functions;
+//
+//import org.apache.stratos.cloud.controller.context.CloudControllerContext;
+//import org.apache.stratos.cloud.controller.domain.ClusterContext;
+//import org.apache.stratos.cloud.controller.domain.ContainerClusterContext;
+//import org.apache.stratos.cloud.controller.domain.KubernetesClusterContext;
+//import org.apache.stratos.cloud.controller.domain.MemberContext;
+//import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
+//import org.apache.stratos.common.constants.StratosConstants;
+//import org.apache.stratos.kubernetes.client.model.Selector;
+//import org.apache.stratos.kubernetes.client.model.Service;
+//
+//import com.google.common.base.Function;
+//
+///**
+// * Is responsible for converting a {@link ContainerClusterContext} object to a Kubernetes
+// * {@link Service} Object.
+// */
+//public class ContainerClusterContextToKubernetesService implements Function<ClusterContext, Service> {
+//
+//    @Override
+//    public Service apply(ClusterContext clusterContext) {
+//
+//        String clusterId = clusterContext.getClusterId();
+//        String kubernetesClusterId = CloudControllerUtil.getProperty(
+//                clusterContext.getProperties(), StratosConstants.KUBERNETES_CLUSTER_ID);
+//        KubernetesClusterContext kubClusterContext = CloudControllerContext.getInstance()
+//                .getKubernetesClusterContext(kubernetesClusterId);
+//
+//
+//
+//        return service;
+//    }
+//}

http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToReplicationController.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToReplicationController.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToReplicationController.java
index af63a3f..7aeaa3e 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToReplicationController.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/ContainerClusterContextToReplicationController.java
@@ -22,10 +22,8 @@ import org.apache.stratos.cloud.controller.context.CloudControllerContext;
 import org.apache.stratos.cloud.controller.domain.ClusterContext;
 import org.apache.stratos.cloud.controller.domain.ContainerClusterContext;
 import org.apache.stratos.cloud.controller.domain.MemberContext;
-import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
-import org.apache.stratos.common.constants.StratosConstants;
 import org.apache.stratos.kubernetes.client.model.Container;
-import org.apache.stratos.kubernetes.client.model.Label;
+import org.apache.stratos.kubernetes.client.model.Labels;
 import org.apache.stratos.kubernetes.client.model.Manifest;
 import org.apache.stratos.kubernetes.client.model.Pod;
 import org.apache.stratos.kubernetes.client.model.ReplicationController;
@@ -35,8 +33,10 @@ import org.apache.stratos.kubernetes.client.model.State;
 import com.google.common.base.Function;
 
 /**
- * Is responsible for converting a {@link ContainerClusterContext} object to a Kubernetes
- * {@link ReplicationController} Object.
+ * Is responsible for converting a {@link org.apache.stratos.cloud.controller.domain.MemberContext} object to a Kubernetes
+ * {@link ReplicationController} object:
+ * - A replication controller is created for each cluster but uses the same environment variables
+ * generated by the member context, hence using member context.
  */
 public class ContainerClusterContextToReplicationController implements
         Function<MemberContext, ReplicationController> {
@@ -44,44 +44,42 @@ public class ContainerClusterContextToReplicationController implements
     @Override
     public ReplicationController apply(MemberContext memberContext) {
 
-        String clusterId = memberContext.getClusterId();
-        ClusterContext clusterContext = CloudControllerContext.getInstance().getClusterContext(clusterId);
-
         ReplicationController replicationController = new ReplicationController();
-        replicationController.setId(clusterContext.getClusterId());
+        replicationController.setId(memberContext.getClusterId());
         replicationController.setKind("ReplicationController");
         replicationController.setApiVersion("v1beta1");
-        State desiredState = new State();
-        String minReplicas = CloudControllerUtil.getProperty(clusterContext.getProperties(),
-                StratosConstants.KUBERNETES_MIN_REPLICAS);
-        desiredState.setReplicas(Integer.parseInt(minReplicas));
+
+        State state = new State();
+        state.setReplicas(1);
         Selector selector = new Selector();
-        selector.setName(clusterContext.getClusterId());
-        desiredState.setReplicaSelector(selector);
+        selector.setName(memberContext.getClusterId());
+        state.setReplicaSelector(selector);
 
         Pod podTemplate = new Pod();
         State podState = new State();
         Manifest manifest = new Manifest();
         manifest.setVersion("v1beta1");
-        manifest.setId(clusterContext.getClusterId());
+        manifest.setId(memberContext.getClusterId());
+        podTemplate.setState(podState);
 
+        // Add container to the manifest
         ContainerClusterContextToKubernetesContainer containerFunc = new ContainerClusterContextToKubernetesContainer();
         Container container = containerFunc.apply(memberContext);
-
-        manifest.setContainers(new Container[] { container });
-
+        manifest.addContainer(container);
         podState.setManifest(manifest);
-        podTemplate.setDesiredState(podState);
-        Label l1 = new Label();
-        l1.setName(clusterContext.getClusterId());
-        podTemplate.setLabels(l1);
 
-        desiredState.setPodTemplate(podTemplate);
-        replicationController.setDesiredState(desiredState);
+        // Set pod labels
+        Labels podLabels = new Labels();
+        podLabels.setName(memberContext.getClusterId());
+        podTemplate.setLabels(podLabels);
+
+        state.setPodTemplate(podTemplate);
+        replicationController.setDesiredState(state);
 
-        Label l2 = new Label();
-        l2.setName(clusterContext.getClusterId());
-        replicationController.setLabels(l2);
+        // Set replication controller labels
+        Labels replicatoionControllerLabels = new Labels();
+        replicatoionControllerLabels.setName(memberContext.getClusterId());
+        replicationController.setLabels(replicatoionControllerLabels);
 
         return replicationController;
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/PodToMemberContext.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/PodToMemberContext.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/PodToMemberContext.java
index a744eb1..c8d05d2 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/PodToMemberContext.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/functions/PodToMemberContext.java
@@ -26,23 +26,19 @@ import com.google.common.base.Function;
  * Is responsible for converting a {@link Pod} object to a
  * {@link MemberContext} Object.
  */
-public class PodToMemberContext implements Function<Pod, MemberContext> {
-
-    @Override
-    public MemberContext apply(Pod pod) {
-
-        if (pod == null) {
-            return null;
-        }
-        MemberContext memberContext = new MemberContext();
-        memberContext.setMemberId(pod.getId());
-        memberContext.setDefaultPrivateIP(pod.getCurrentState().getHostIP());
-        memberContext.setPrivateIPs(new String[]{pod.getCurrentState().getHostIP()});
-        memberContext.setDefaultPublicIP(pod.getCurrentState().getHostIP());
-        memberContext.setPublicIPs(new String[]{pod.getCurrentState().getHostIP()});
-        memberContext.setInitTime(System.currentTimeMillis());
-        
-        return memberContext;
-    }
-
-}
+//public class PodToMemberContext implements Function<Pod, MemberContext> {
+//
+//    @Override
+//    public MemberContext apply(Pod pod) {
+//        if (pod == null) {
+//            return null;
+//        }
+//        MemberContext memberContext = new MemberContext();
+//        memberContext.setInstanceId(pod.getId());
+//        memberContext.setPrivateIpAddress(pod.getCurrentState().getHostIP());
+//        memberContext.setPublicIpAddress(pod.getCurrentState().getHostIP());
+//        memberContext.setInitTime(System.currentTimeMillis());
+//
+//        return memberContext;
+//    }
+//}

http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/Iaas.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/Iaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/Iaas.java
index 4270f19..2224a56 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/Iaas.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/Iaas.java
@@ -54,7 +54,7 @@ public abstract class Iaas {
      * @param memberContext
      * @return updated memberContext
      */
-    public abstract MemberContext createInstance(MemberContext memberContext) throws CartridgeNotFoundException;
+    public abstract MemberContext startInstance(MemberContext memberContext) throws CartridgeNotFoundException;
 
     /**
      * This will deallocate/release the given IP address back to pool.
@@ -155,5 +155,5 @@ public abstract class Iaas {
      * @throws InvalidCartridgeTypeException
      * @throws InvalidMemberException
      */
-    public abstract void terminateInstance(MemberContext memberContext) throws InvalidCartridgeTypeException, InvalidMemberException;
+    public abstract void terminateInstance(MemberContext memberContext) throws InvalidCartridgeTypeException, InvalidMemberException, MemberTerminationFailedException;
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsEC2Iaas.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsEC2Iaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsEC2Iaas.java
index 23c62d0..3133cad 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsEC2Iaas.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsEC2Iaas.java
@@ -276,7 +276,7 @@ public class JcloudsEC2Iaas extends JcloudsIaas {
 
 		// first try to find an unassigned IP.
 		ArrayList<PublicIpInstanceIdPair> unassignedIps = Lists
-				.newArrayList(Iterables.filter(elasticIPAddressApi.describeAddressesInRegion(region, new String[0]),
+				.newArrayList(Iterables.filter(elasticIPAddressApi.describeAddressesInRegion(region),
 						new Predicate<PublicIpInstanceIdPair>() {
 
 							@Override
@@ -419,8 +419,8 @@ public class JcloudsEC2Iaas extends JcloudsIaas {
         		getAvailabilityZoneAndRegionApiForRegion(region).get();
         
         Set<AvailabilityZoneInfo> availabilityZones =
-                                                      zoneRegionApi.describeAvailabilityZonesInRegion(region,
-                                                              new DescribeAvailabilityZonesOptions[0]);
+                                                      zoneRegionApi.describeAvailabilityZonesInRegion(region
+													  );
         for (AvailabilityZoneInfo zoneInfo : availabilityZones) {
             String configuredZone = zoneInfo.getZone();
             if (zone.equalsIgnoreCase(configuredZone)) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsIaas.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsIaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsIaas.java
index 6d1e7f3..11d11ed 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsIaas.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsIaas.java
@@ -102,7 +102,7 @@ public abstract class JcloudsIaas extends Iaas {
     }
 
     @Override
-    public MemberContext createInstance(MemberContext memberContext) {
+    public MemberContext startInstance(MemberContext memberContext) {
         // generate the group id from domain name and sub domain name.
         // Should have lower-case ASCII letters, numbers, or dashes.
         // Should have a length between 3-15
@@ -279,7 +279,8 @@ public abstract class JcloudsIaas extends Iaas {
         }
     }
 
-    public void terminateInstance(MemberContext memberContext) throws InvalidCartridgeTypeException, InvalidMemberException {
+    public void terminateInstance(MemberContext memberContext) throws InvalidCartridgeTypeException,
+            InvalidMemberException {
         String memberId = memberContext.getMemberId();
         String cartridgeType = memberContext.getCartridgeType();
         String nodeId = memberContext.getInstanceId();

http://git-wip-us.apache.org/repos/asf/stratos/blob/405ff36d/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsOpenstackIaas.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsOpenstackIaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsOpenstackIaas.java
index d3386f2..6a7bc24 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsOpenstackIaas.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsOpenstackIaas.java
@@ -397,7 +397,7 @@ public class JcloudsOpenstackIaas extends JcloudsIaas {
 
         IaasProvider iaasInfo = getIaasProvider();
         String region = ComputeServiceBuilderUtil.extractRegion(iaasInfo);
-        ComputeServiceContext context = iaasInfo.getComputeService().getContext();;
+        ComputeServiceContext context = iaasInfo.getComputeService().getContext();
         NovaApi novaApi = context.unwrapApi(NovaApi.class);
         VolumeApi volumeApi = novaApi.getVolumeExtensionForZone(region).get();
         Volume.Status volumeStatus = this.getVolumeStatus(volumeApi, volumeId);