Fix STRATOS-1572: Network partition availability zone setting has no affect on 
VMs launched by CC. Force initialize the IaaS template each time validate 
method is invoked.
Fix availabilityZone string check in image ID for GCE IaaS.


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

Branch: refs/heads/stratos-4.1.x
Commit: 02d01071c77b50be246c49d0841e4a1f8b8e2b02
Parents: ca3edb2
Author: Akila Perera <[email protected]>
Authored: Sun Oct 11 14:14:47 2015 +0530
Committer: Akila Perera <[email protected]>
Committed: Sun Oct 11 14:14:47 2015 +0530

----------------------------------------------------------------------
 .../context/CloudControllerContext.java         | 115 ++++----
 .../cloud/controller/domain/IaasProvider.java   |  13 +-
 .../controller/iaases/JcloudsIaasUtil.java      |   3 +-
 .../CloudStackPartitionValidator.java           |  12 +-
 .../iaases/docker/DockerPartitionValidator.java |  46 ++--
 .../cloud/controller/iaases/ec2/EC2Iaas.java    | 225 ++++++---------
 .../iaases/ec2/EC2PartitionValidator.java       |  54 +---
 .../iaases/gce/GCEPartitionValidator.java       |  47 +---
 .../KubernetesPartitionValidator.java           |   4 -
 .../iaases/mock/MockIaasPartitionValidator.java |   1 -
 .../iaases/openstack/OpenstackIaas.java         | 195 ++++++-------
 .../openstack/OpenstackPartitionValidator.java  |  61 ++---
 .../impl/CloudControllerServiceImpl.java        | 272 ++++++++++---------
 .../impl/CloudControllerServiceUtil.java        |  21 +-
 .../controller/util/CloudControllerUtil.java    |  86 ++----
 .../stratos/cloud/controller/util/Scope.java    |  16 +-
 16 files changed, 481 insertions(+), 690 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/02d01071/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java
index 964dd73..f00a9f9 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/context/CloudControllerContext.java
@@ -48,10 +48,8 @@ import java.util.concurrent.locks.Lock;
  * This object holds all runtime data and provides faster access. This is a 
Singleton class.
  */
 public class CloudControllerContext implements Serializable {
-
     private static final long serialVersionUID = -2662307358852779897L;
     private static final Log log = 
LogFactory.getLog(CloudControllerContext.class);
-
     public static boolean unitTest = false;
 
     private static final String CC_CLUSTER_ID_TO_MEMBER_CTX_MAP = 
"CC_CLUSTER_ID_TO_MEMBER_CTX_MAP";
@@ -62,11 +60,15 @@ public class CloudControllerContext implements Serializable 
{
     private static final String CC_KUB_CLUSTER_ID_TO_KUB_CLUSTER_CTX_MAP = 
"CC_KUB_CLUSTER_ID_TO_KUB_CLUSTER_CTX_MAP";
     private static final String CC_CARTRIDGE_TYPE_TO_PARTITION_IDS_MAP = 
"CC_CARTRIDGE_TYPE_TO_PARTITION_IDS_MAP";
     private static final String CC_CARTRIDGE_TYPE_TO_CARTRIDGES_MAP = 
"CC_CARTRIDGE_TYPE_TO_CARTRIDGES_MAP";
-    private static final String CC_SERVICE_GROUP_NAME_TO_SERVICE_GROUP_MAP = 
"CC_SERVICE_GROUP_NAME_TO_SERVICE_GROUP_MAP";
-    private static final String 
CC_NETWORK_PARTITION_ID_TO_NETWORK_PARTITION_MAP = 
"CC_NETWORK_PARTITION_ID_TO_NETWORK_PARTITION_MAP";
-    private static final String CC_PARTITION_TO_IAAS_PROVIDER_BY_CARTRIDGE_MAP 
= "CC_PARTITION_TO_IAAS_PROVIDER_BY_CARTRIDGE_MAP";
+    private static final String CC_SERVICE_GROUP_NAME_TO_SERVICE_GROUP_MAP
+            = "CC_SERVICE_GROUP_NAME_TO_SERVICE_GROUP_MAP";
+    private static final String 
CC_NETWORK_PARTITION_ID_TO_NETWORK_PARTITION_MAP
+            = "CC_NETWORK_PARTITION_ID_TO_NETWORK_PARTITION_MAP";
+    private static final String CC_PARTITION_TO_IAAS_PROVIDER_BY_CARTRIDGE_MAP
+            = "CC_PARTITION_TO_IAAS_PROVIDER_BY_CARTRIDGE_MAP";
     private static final String CC_CARTRIDGE_TYPE_TO_IAAS_PROVIDER_MAP = 
"CC_CARTRIDGE_TYPE_TO_IAAS_PROVIDER_MAP";
-    private static final String 
CC_APPLICATION_ID_TO_CLUSTER_ID_TO_PORT_MAPPING_MAP = 
"CC_APPLICATION_ID_TO_CLUSTER_ID_TO_PORT_MAPPING_MAP";
+    private static final String 
CC_APPLICATION_ID_TO_CLUSTER_ID_TO_PORT_MAPPING_MAP
+            = "CC_APPLICATION_ID_TO_CLUSTER_ID_TO_PORT_MAPPING_MAP";
 
     private static final String CC_CLUSTER_CTX_WRITE_LOCK = 
"CC_CLUSTER_CTX_WRITE_LOCK";
     private static final String CC_MEMBER_CTX_WRITE_LOCK = 
"CC_MEMBER_CTX_WRITE_LOCK";
@@ -129,8 +131,8 @@ public class CloudControllerContext implements Serializable 
{
     /**
      * Thread pool used in this task to execute parallel tasks.
      */
-    private transient ExecutorService executorService = 
StratosThreadPool.getExecutorService(
-            "cloud.controller.context.thread.pool", 10);
+    private transient ExecutorService executorService = StratosThreadPool
+            .getExecutorService("cloud.controller.context.thread.pool", 10);
 
     /**
      * Map of registered {@link 
org.apache.stratos.cloud.controller.domain.Cartridge}s
@@ -199,13 +201,17 @@ public class CloudControllerContext implements 
Serializable {
         clusterIdToContextMap = 
distributedObjectProvider.getMap(CC_CLUSTER_ID_TO_CLUSTER_CTX);
         cartridgeTypeToPartitionIdsMap = 
distributedObjectProvider.getMap(CC_CARTRIDGE_TYPE_TO_PARTITION_IDS_MAP);
         cartridgeTypeToCartridgeMap = 
distributedObjectProvider.getMap(CC_CARTRIDGE_TYPE_TO_CARTRIDGES_MAP);
-        serviceGroupNameToServiceGroupMap = 
distributedObjectProvider.getMap(CC_SERVICE_GROUP_NAME_TO_SERVICE_GROUP_MAP);
-        networkPartitionIDToNetworkPartitionMap = 
distributedObjectProvider.getMap(CC_NETWORK_PARTITION_ID_TO_NETWORK_PARTITION_MAP);
-        partitionToIaasProviderByCartridge = 
distributedObjectProvider.getMap(CC_PARTITION_TO_IAAS_PROVIDER_BY_CARTRIDGE_MAP);
+        serviceGroupNameToServiceGroupMap = distributedObjectProvider
+                .getMap(CC_SERVICE_GROUP_NAME_TO_SERVICE_GROUP_MAP);
+        networkPartitionIDToNetworkPartitionMap = distributedObjectProvider
+                .getMap(CC_NETWORK_PARTITION_ID_TO_NETWORK_PARTITION_MAP);
+        partitionToIaasProviderByCartridge = distributedObjectProvider
+                .getMap(CC_PARTITION_TO_IAAS_PROVIDER_BY_CARTRIDGE_MAP);
         cartridgeTypeToIaasProviders = 
distributedObjectProvider.getMap(CC_CARTRIDGE_TYPE_TO_IAAS_PROVIDER_MAP);
-        applicationIdToClusterIdToPortMappings = 
distributedObjectProvider.getMap(CC_APPLICATION_ID_TO_CLUSTER_ID_TO_PORT_MAPPING_MAP);
+        applicationIdToClusterIdToPortMappings = distributedObjectProvider
+                .getMap(CC_APPLICATION_ID_TO_CLUSTER_ID_TO_PORT_MAPPING_MAP);
 
-        if(!unitTest) {
+        if (!unitTest) {
             // Update context from the registry
             updateContextFromRegistry();
         }
@@ -503,16 +509,16 @@ public class CloudControllerContext implements 
Serializable {
     }
 
     public void addKubernetesClusterContext(KubernetesClusterContext 
kubernetesClusterContext) {
-        kubClusterIdToKubClusterContextMap.put(
-                kubernetesClusterContext.getKubernetesClusterId(), 
kubernetesClusterContext);
+        kubClusterIdToKubClusterContextMap
+                .put(kubernetesClusterContext.getKubernetesClusterId(), 
kubernetesClusterContext);
     }
 
     public void updateKubernetesClusterContext(KubernetesClusterContext 
kubernetesClusterContext) {
-        kubClusterIdToKubClusterContextMap.put(
-                kubernetesClusterContext.getKubernetesClusterId(), 
kubernetesClusterContext);
+        kubClusterIdToKubClusterContextMap
+                .put(kubernetesClusterContext.getKubernetesClusterId(), 
kubernetesClusterContext);
     }
 
-    public void removeKubernetesClusterContext(String kubernetesClusterId){
+    public void removeKubernetesClusterContext(String kubernetesClusterId) {
         kubClusterIdToKubClusterContextMap.remove(kubernetesClusterId);
     }
 
@@ -541,8 +547,7 @@ public class CloudControllerContext implements Serializable 
{
             log.info("Removing Kubernetes Host: " + kubernetesHostId);
         }
         try {
-            KubernetesCluster kubernetesClusterStored = 
getKubernetesClusterContainingHost(
-                    kubernetesHostId);
+            KubernetesCluster kubernetesClusterStored = 
getKubernetesClusterContainingHost(kubernetesHostId);
 
             // Kubernetes master can not be removed
             if 
(kubernetesClusterStored.getKubernetesMaster().getHostId().equals(kubernetesHostId))
 {
@@ -558,8 +563,7 @@ public class CloudControllerContext implements Serializable 
{
             }
             // member count will be equal only when host object was not found
             if (kubernetesHostList.size() == 
kubernetesClusterStored.getKubernetesHosts().length) {
-                throw new NonExistingKubernetesHostException("Kubernetes host 
not found for [id] "
-                        + kubernetesHostId);
+                throw new NonExistingKubernetesHostException("Kubernetes host 
not found for [id] " + kubernetesHostId);
             }
             KubernetesHost[] kubernetesHostsArray = new 
KubernetesHost[kubernetesHostList.size()];
             kubernetesHostList.toArray(kubernetesHostsArray);
@@ -568,8 +572,7 @@ public class CloudControllerContext implements Serializable 
{
             kubernetesClusterStored.setKubernetesHosts(kubernetesHostsArray);
 
             if (log.isInfoEnabled()) {
-                log.info(String.format("Kubernetes host removed successfully: 
[id] %s",
-                        kubernetesHostId));
+                log.info(String.format("Kubernetes host removed successfully: 
[id] %s", kubernetesHostId));
             }
 
             return true;
@@ -609,7 +612,6 @@ public class CloudControllerContext implements Serializable 
{
         return false;
     }
 
-
     public KubernetesHost[] getKubernetesHostsInGroup(String 
kubernetesClusterId)
             throws NonExistingKubernetesClusterException {
         if (StringUtils.isEmpty(kubernetesClusterId)) {
@@ -621,8 +623,7 @@ public class CloudControllerContext implements Serializable 
{
             return kubernetesCluster.getKubernetesHosts();
         }
         throw new NonExistingKubernetesClusterException("Kubernetes cluster " +
-                "not found: [kubernetes-cluster-id] "
-                + kubernetesClusterId);
+                "not found: [kubernetes-cluster-id] " + kubernetesClusterId);
     }
 
     public KubernetesMaster getKubernetesMasterInGroup(String 
kubernetesClusterId)
@@ -635,8 +636,7 @@ public class CloudControllerContext implements Serializable 
{
             return kubernetesCluster.getKubernetesMaster();
         }
         throw new NonExistingKubernetesClusterException("Kubernetes master " +
-                "not found: [kubernetes-cluster-id] "
-                + kubernetesClusterId);
+                "not found: [kubernetes-cluster-id] " + kubernetesClusterId);
     }
 
     public KubernetesCluster getKubernetesCluster(String kubernetesClusterId)
@@ -674,8 +674,7 @@ public class CloudControllerContext implements Serializable 
{
     }
 
     public KubernetesCluster[] getKubernetesClusters() {
-        return kubernetesClustersMap.values().toArray(
-                new KubernetesCluster[kubernetesClustersMap.size()]);
+        return kubernetesClustersMap.values().toArray(new 
KubernetesCluster[kubernetesClustersMap.size()]);
     }
 
     public boolean isClustered() {
@@ -710,25 +709,17 @@ public class CloudControllerContext implements 
Serializable {
                         CloudControllerContext serializedObj = 
(CloudControllerContext) dataObj;
 
                         copyMap(serializedObj.kubernetesClustersMap, 
kubernetesClustersMap);
-                        copyMap(serializedObj.clusterIdToMemberContextListMap,
-                                clusterIdToMemberContextListMap);
-                        copyMap(serializedObj.memberIdToMemberContextMap,
-                                memberIdToMemberContextMap);
-                        
copyMap(serializedObj.kubClusterIdToKubClusterContextMap,
-                                kubClusterIdToKubClusterContextMap);
+                        copyMap(serializedObj.clusterIdToMemberContextListMap, 
clusterIdToMemberContextListMap);
+                        copyMap(serializedObj.memberIdToMemberContextMap, 
memberIdToMemberContextMap);
+                        
copyMap(serializedObj.kubClusterIdToKubClusterContextMap, 
kubClusterIdToKubClusterContextMap);
                         copyMap(serializedObj.clusterIdToContextMap, 
clusterIdToContextMap);
-                        copyMap(serializedObj.cartridgeTypeToPartitionIdsMap,
-                                cartridgeTypeToPartitionIdsMap);
-                        copyMap(serializedObj.cartridgeTypeToCartridgeMap,
-                                cartridgeTypeToCartridgeMap);
-                        
copyMap(serializedObj.serviceGroupNameToServiceGroupMap,
-                                serviceGroupNameToServiceGroupMap);
+                        copyMap(serializedObj.cartridgeTypeToPartitionIdsMap, 
cartridgeTypeToPartitionIdsMap);
+                        copyMap(serializedObj.cartridgeTypeToCartridgeMap, 
cartridgeTypeToCartridgeMap);
+                        
copyMap(serializedObj.serviceGroupNameToServiceGroupMap, 
serviceGroupNameToServiceGroupMap);
                         
copyMap(serializedObj.networkPartitionIDToNetworkPartitionMap,
                                 networkPartitionIDToNetworkPartitionMap);
-                        
copyMap(serializedObj.partitionToIaasProviderByCartridge,
-                                partitionToIaasProviderByCartridge);
-                        copyMap(serializedObj.cartridgeTypeToIaasProviders,
-                                cartridgeTypeToIaasProviders);
+                        
copyMap(serializedObj.partitionToIaasProviderByCartridge, 
partitionToIaasProviderByCartridge);
+                        copyMap(serializedObj.cartridgeTypeToIaasProviders, 
cartridgeTypeToIaasProviders);
                         
copyMap(serializedObj.applicationIdToClusterIdToPortMappings,
                                 applicationIdToClusterIdToPortMappings);
 
@@ -742,8 +733,8 @@ public class CloudControllerContext implements Serializable 
{
                     }
                 }
             } catch (Exception e) {
-                String msg = "Unable to read cloud controller context from the 
registry. " +
-                        "Hence, any historical data will not be reflected";
+                String msg = "Unable to read cloud controller context from the 
registry. "
+                        + "Hence, any historical data will not be reflected";
                 log.warn(msg, e);
             }
         }
@@ -790,8 +781,8 @@ public class CloudControllerContext implements Serializable 
{
         }
         partitionToIaasProviderByCartridge.put(cartridgeType, 
partitionToIaasProviders);
         if (log.isInfoEnabled()) {
-            log.info("Partition map updated for the Cartridge: " + 
cartridgeType + ". "
-                    + "Current Partition List: " + 
partitionToIaasProviderByCartridge.get(cartridgeType).keySet().toString());
+            log.info("Partition map updated for the Cartridge: " + 
cartridgeType + ". " + "Current Partition List: "
+                    + 
partitionToIaasProviderByCartridge.get(cartridgeType).keySet().toString());
         }
     }
 
@@ -838,7 +829,6 @@ public class CloudControllerContext implements Serializable 
{
 
     public IaasProvider getIaasProvider(String cartridgeType, String iaasType) 
{
         List<IaasProvider> iaasProviders = 
cartridgeTypeToIaasProviders.get(cartridgeType);
-
         if (iaasProviders != null) {
             for (IaasProvider iaasProvider : iaasProviders) {
                 if (iaasProvider.getType().equals(iaasType)) {
@@ -856,6 +846,7 @@ public class CloudControllerContext implements Serializable 
{
 
     /**
      * Add a cluster port mapping.
+     *
      * @param portMapping
      */
     public void addClusterPortMapping(ClusterPortMapping portMapping) {
@@ -863,36 +854,37 @@ public class CloudControllerContext implements 
Serializable {
         String clusterId = portMapping.getClusterId();
 
         List<ClusterPortMapping> portMappings = null;
-        Map<String, List<ClusterPortMapping>> clusterIdToPortMappings =
-                applicationIdToClusterIdToPortMappings.get(applicationId);
+        Map<String, List<ClusterPortMapping>> clusterIdToPortMappings = 
applicationIdToClusterIdToPortMappings
+                .get(applicationId);
 
-        if(clusterIdToPortMappings == null) {
+        if (clusterIdToPortMappings == null) {
             clusterIdToPortMappings = new HashMap<String, 
List<ClusterPortMapping>>();
             applicationIdToClusterIdToPortMappings.put(applicationId, 
clusterIdToPortMappings);
         } else {
             portMappings = 
clusterIdToPortMappings.get(portMapping.getClusterId());
         }
-        if(portMappings == null) {
+        if (portMappings == null) {
             portMappings = new ArrayList<ClusterPortMapping>();
             clusterIdToPortMappings.put(clusterId, portMappings);
         }
 
-        if(!portMappings.contains(portMapping)) {
+        if (!portMappings.contains(portMapping)) {
             portMappings.add(portMapping);
         }
     }
 
     /**
      * Get cluster port mappings of an application cluster.
+     *
      * @param applicationId
      * @param clusterId
      * @return
      */
     public List<ClusterPortMapping> getClusterPortMappings(String 
applicationId, String clusterId) {
-        Map<String, List<ClusterPortMapping>> clusterIdToPortMappings =
-                applicationIdToClusterIdToPortMappings.get(applicationId);
+        Map<String, List<ClusterPortMapping>> clusterIdToPortMappings = 
applicationIdToClusterIdToPortMappings
+                .get(applicationId);
 
-        if(clusterIdToPortMappings != null) {
+        if (clusterIdToPortMappings != null) {
             return clusterIdToPortMappings.get(clusterId);
         }
         return null;
@@ -900,10 +892,11 @@ public class CloudControllerContext implements 
Serializable {
 
     /**
      * Remove all the cluster port mappings of the given application.
+     *
      * @param applicationId
      */
     public void removeClusterPortMappings(String applicationId) {
-        if(applicationIdToClusterIdToPortMappings.containsKey(applicationId)) {
+        if (applicationIdToClusterIdToPortMappings.containsKey(applicationId)) 
{
             applicationIdToClusterIdToPortMappings.remove(applicationId);
         }
     }

http://git-wip-us.apache.org/repos/asf/stratos/blob/02d01071/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/IaasProvider.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/IaasProvider.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/IaasProvider.java
index f4d7173..49bc65d 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/IaasProvider.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/IaasProvider.java
@@ -43,7 +43,6 @@ public class IaasProvider implements Serializable {
      */
     private String type;
 
-
     /**
      * Fully qualified class name of an implementation of {@link 
org.apache.stratos.cloud.controller.iaases.Iaas}
      */
@@ -188,7 +187,6 @@ public class IaasProvider implements Serializable {
         this.template = template;
     }
 
-
     public boolean equals(Object o) {
         if (o instanceof IaasProvider) {
             return ((IaasProvider) o).getType().equals(this.getType());
@@ -215,7 +213,7 @@ public class IaasProvider implements Serializable {
         this.className = className;
     }
 
-    public Iaas getIaas() {
+    public Iaas buildIaas() {
         if (iaas == null) {
             synchronized (IaasProvider.this) {
                 if (iaas == null) {
@@ -227,10 +225,19 @@ public class IaasProvider implements Serializable {
                     }
                 }
             }
+        } else {
+            // Force IaaS to be reinitialized each time this function is called
+            iaas.initialize();
         }
         return iaas;
     }
 
+    public Iaas getIaas() {
+        if (iaas == null) {
+            iaas = buildIaas();
+        }
+        return iaas;
+    }
 
     public byte[] getPayload() {
         return payload;

http://git-wip-us.apache.org/repos/asf/stratos/blob/02d01071/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsIaasUtil.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsIaasUtil.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsIaasUtil.java
index c8d3b19..08b669f 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsIaasUtil.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/JcloudsIaasUtil.java
@@ -56,8 +56,7 @@ public class JcloudsIaasUtil {
             ComputeService computeService = 
ComputeServiceBuilderUtil.buildDefaultComputeService(iaasProvider);
             iaasProvider.setComputeService(computeService);
         } catch (Exception e) {
-            String msg = "Unable to build the jclouds object for iaas "
-                    + "of type: " + iaasProvider.getType();
+            String msg = "Unable to build the jclouds object for iaas of type: 
" + iaasProvider.getType();
             log.error(msg, e);
             throw new InvalidIaasProviderException(msg, e);
         }

http://git-wip-us.apache.org/repos/asf/stratos/blob/02d01071/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/cloudstack/CloudStackPartitionValidator.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/cloudstack/CloudStackPartitionValidator.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/cloudstack/CloudStackPartitionValidator.java
index 579da5b..e4fbe30 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/cloudstack/CloudStackPartitionValidator.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/cloudstack/CloudStackPartitionValidator.java
@@ -26,7 +26,6 @@ import 
org.apache.stratos.cloud.controller.exception.InvalidPartitionException;
 import org.apache.stratos.cloud.controller.iaases.Iaas;
 import org.apache.stratos.cloud.controller.iaases.PartitionValidator;
 import org.apache.stratos.cloud.controller.iaases.ec2.EC2PartitionValidator;
-import 
org.apache.stratos.cloud.controller.services.impl.CloudControllerServiceUtil;
 import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
 import org.apache.stratos.cloud.controller.util.Scope;
 
@@ -48,25 +47,22 @@ public class CloudStackPartitionValidator implements 
PartitionValidator {
 
     @Override
     public IaasProvider validate(Partition partition, Properties properties) 
throws InvalidPartitionException {
-
         try {
             IaasProvider updatedIaasProvider = new IaasProvider(iaasProvider);
-            Iaas updatedIaas = 
CloudControllerServiceUtil.buildIaas(updatedIaasProvider);
+            Iaas updatedIaas = updatedIaasProvider.buildIaas();
             updatedIaas.setIaasProvider(updatedIaasProvider);
-
             if (properties.containsKey(Scope.ZONE.toString())) {
                 String zone = properties.getProperty(Scope.ZONE.toString());
                 iaas.isValidZone(null, zone);
                 
updatedIaasProvider.setProperty(CloudControllerConstants.AVAILABILITY_ZONE, 
zone);
-                updatedIaas = 
CloudControllerServiceUtil.buildIaas(updatedIaasProvider);
+                updatedIaas = updatedIaasProvider.buildIaas();
                 updatedIaas.setIaasProvider(updatedIaasProvider);
             }
-
         } catch (Exception e) {
-            String msg = "Invalid partition detected: [partition-id] " + 
partition.getId() + e.getMessage();
+            String msg = String.format("Invalid partition detected: 
[partition-id] %s", partition.getId());
             log.error(msg, e);
             throw new InvalidPartitionException(msg, e);
         }
         return iaasProvider;
     }
-}
\ No newline at end of file
+}

http://git-wip-us.apache.org/repos/asf/stratos/blob/02d01071/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/docker/DockerPartitionValidator.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/docker/DockerPartitionValidator.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/docker/DockerPartitionValidator.java
index 908398f..7f70de0 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/docker/DockerPartitionValidator.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/docker/DockerPartitionValidator.java
@@ -23,11 +23,9 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.domain.IaasProvider;
 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.PartitionValidator;
-import 
org.apache.stratos.cloud.controller.services.impl.CloudControllerServiceUtil;
 
 import java.util.Properties;
 
@@ -47,34 +45,30 @@ public class DockerPartitionValidator implements 
PartitionValidator {
 
     @Override
     public IaasProvider validate(Partition partition, Properties properties) 
throws InvalidPartitionException {
-        // in Docker case currently we only update the custom properties 
passed via Partitions, and
-        // no validation done as of now.
-        IaasProvider updatedIaasProvider = new IaasProvider(iaasProvider);
-        updateOtherProperties(updatedIaasProvider, properties);
-        return updatedIaasProvider;
-    }
-
-    private void updateOtherProperties(IaasProvider updatedIaasProvider,
-                                       Properties properties) {
-        Iaas updatedIaas;
         try {
-            updatedIaas = 
CloudControllerServiceUtil.buildIaas(updatedIaasProvider);
+            // in Docker case currently we only update the custom properties 
passed via Partitions, and
+            // no validation done as of now.
+            IaasProvider updatedIaasProvider = new IaasProvider(iaasProvider);
+            updateOtherProperties(updatedIaasProvider, properties);
+            Iaas updatedIaas = iaasProvider.buildIaas();
+            updatedIaas.setIaasProvider(updatedIaasProvider);
+            return updatedIaasProvider;
+        } catch (Exception e) {
+            String msg = String.format("Invalid partition detected 
[partition-id] %s", partition.getId());
+            log.error(msg, e);
+            throw new InvalidPartitionException(msg, e);
+        }
+    }
 
-            for (Object property : properties.keySet()) {
-                if (property instanceof String) {
-                    String key = (String) property;
-                    updatedIaasProvider.setProperty(key,
-                            properties.getProperty(key));
-                    if (log.isDebugEnabled()) {
-                        log.debug("Added property " + key
-                                + " to the IaasProvider.");
-                    }
+    private void updateOtherProperties(IaasProvider updatedIaasProvider, 
Properties properties) {
+        for (Object property : properties.keySet()) {
+            if (property instanceof String) {
+                String key = (String) property;
+                updatedIaasProvider.setProperty(key, 
properties.getProperty(key));
+                if (log.isDebugEnabled()) {
+                    log.debug("Added property " + key + " to the 
IaasProvider.");
                 }
             }
-            updatedIaas = 
CloudControllerServiceUtil.buildIaas(updatedIaasProvider);
-            updatedIaas.setIaasProvider(updatedIaasProvider);
-        } catch (InvalidIaasProviderException ignore) {
         }
-
     }
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/02d01071/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/ec2/EC2Iaas.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/ec2/EC2Iaas.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/ec2/EC2Iaas.java
index 0ef92f4..ab1a31e 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/ec2/EC2Iaas.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/ec2/EC2Iaas.java
@@ -76,8 +76,7 @@ public class EC2Iaas extends JcloudsIaas {
     public void buildTemplate() {
         IaasProvider iaasInfo = getIaasProvider();
         if (iaasInfo.getComputeService() == null) {
-            String msg = "Compute service is null for IaaS provider: "
-                    + iaasInfo.getName();
+            String msg = "Compute service is null for IaaS provider: " + 
iaasInfo.getName();
             log.fatal(msg);
             throw new CloudControllerException(msg);
         }
@@ -87,15 +86,11 @@ public class EC2Iaas extends JcloudsIaas {
         // set image id specified
         templateBuilder.imageId(iaasInfo.getImage());
 
-        if (!(iaasInfo instanceof IaasProvider)) {
-            templateBuilder.locationId(iaasInfo.getType());
-        }
-
         if (iaasInfo.getProperty(CloudControllerConstants.AVAILABILITY_ZONE) 
!= null) {
             Set<? extends Location> locations = 
iaasInfo.getComputeService().listAssignableLocations();
             for (Location location : locations) {
-                if 
(location.getScope().toString().equalsIgnoreCase(CloudControllerConstants.ZONE_ELEMENT)
 &&
-                        
location.getId().equals(iaasInfo.getProperty(CloudControllerConstants.AVAILABILITY_ZONE)))
 {
+                if 
(location.getScope().toString().equalsIgnoreCase(CloudControllerConstants.ZONE_ELEMENT)
 && location
+                        
.getId().equals(iaasInfo.getProperty(CloudControllerConstants.AVAILABILITY_ZONE)))
 {
                     templateBuilder.locationId(location.getId());
                     log.info("ZONE has been set as " + 
iaasInfo.getProperty(CloudControllerConstants.AVAILABILITY_ZONE)
                             + " with id: " + location.getId());
@@ -113,7 +108,8 @@ public class EC2Iaas extends JcloudsIaas {
         Template template = templateBuilder.build();
 
         if (iaasInfo.getProperty(CloudControllerConstants.AVAILABILITY_ZONE) 
!= null) {
-            if 
(!template.getLocation().getId().equals(iaasInfo.getProperty(CloudControllerConstants.AVAILABILITY_ZONE)))
 {
+            if (!template.getLocation().getId()
+                    
.equals(iaasInfo.getProperty(CloudControllerConstants.AVAILABILITY_ZONE))) {
                 log.warn("couldn't find assignable ZONE of id :" +
                         
iaasInfo.getProperty(CloudControllerConstants.AVAILABILITY_ZONE) + " in the 
IaaS. " +
                         "Hence using the default location as " + 
template.getLocation().getScope().toString() +
@@ -125,25 +121,20 @@ public class EC2Iaas extends JcloudsIaas {
         // blocking, but if you
         // wish to assign IPs manually, it can be non-blocking.
         // is auto-assign-ip mode or manual-assign-ip mode?
-        boolean blockUntilRunning = Boolean.parseBoolean(iaasInfo
-                .getProperty(CloudControllerConstants.AUTO_ASSIGN_IP));
-        template.getOptions().as(TemplateOptions.class)
-                .blockUntilRunning(blockUntilRunning);
+        boolean blockUntilRunning = 
Boolean.parseBoolean(iaasInfo.getProperty(CloudControllerConstants.AUTO_ASSIGN_IP));
+        
template.getOptions().as(TemplateOptions.class).blockUntilRunning(blockUntilRunning);
 
         // this is required in order to avoid creation of additional security
         // groups by jclouds.
-        template.getOptions().as(TemplateOptions.class)
-                .inboundPorts(new int[]{});
+        template.getOptions().as(TemplateOptions.class).inboundPorts();
 
         // set EC2 specific options
 
-
         if 
(iaasInfo.getProperty(CloudControllerConstants.ASSOCIATE_PUBLIC_IP_ADDRESS) != 
null) {
-            boolean associatePublicIp = 
Boolean.parseBoolean(iaasInfo.getProperty(
-                    CloudControllerConstants.ASSOCIATE_PUBLIC_IP_ADDRESS));
+            boolean associatePublicIp = Boolean
+                    
.parseBoolean(iaasInfo.getProperty(CloudControllerConstants.ASSOCIATE_PUBLIC_IP_ADDRESS));
             if (associatePublicIp) {
-                template.getOptions().as(AWSEC2TemplateOptions.class)
-                        .associatePublicIpAddress();
+                
template.getOptions().as(AWSEC2TemplateOptions.class).associatePublicIpAddress();
             }
         }
 
@@ -159,18 +150,16 @@ public class EC2Iaas extends JcloudsIaas {
 
         // security group names
         if (iaasInfo.getProperty(CloudControllerConstants.SECURITY_GROUPS) != 
null) {
-            template.getOptions()
-                    .as(AWSEC2TemplateOptions.class)
-                    
.securityGroups(iaasInfo.getProperty(CloudControllerConstants.SECURITY_GROUPS).split(
-                            CloudControllerConstants.ENTRY_SEPARATOR));
+            
template.getOptions().as(AWSEC2TemplateOptions.class).securityGroups(
+                    
iaasInfo.getProperty(CloudControllerConstants.SECURITY_GROUPS)
+                            .split(CloudControllerConstants.ENTRY_SEPARATOR));
 
         }
 
         // ability to define tags
         if (iaasInfo.getProperty(CloudControllerConstants.TAGS) != null) {
-            template.getOptions()
-                    .as(AWSEC2TemplateOptions.class)
-                    
.tags(Arrays.asList(iaasInfo.getProperty(CloudControllerConstants.TAGS)
+            template.getOptions().as(AWSEC2TemplateOptions.class).tags(Arrays
+                    .asList(iaasInfo.getProperty(CloudControllerConstants.TAGS)
                             .split(CloudControllerConstants.ENTRY_SEPARATOR)));
 
         }
@@ -180,31 +169,26 @@ public class EC2Iaas extends JcloudsIaas {
 
         for (String propertyKey : iaasInfo.getProperties().keySet()) {
             if 
(propertyKey.startsWith(CloudControllerConstants.TAGS_AS_KEY_VALUE_PAIRS_PREFIX))
 {
-                
keyValuePairTagsMap.put(propertyKey.substring(CloudControllerConstants.TAGS_AS_KEY_VALUE_PAIRS_PREFIX.length()),
-                        iaasInfo.getProperties().get(propertyKey));
-                template.getOptions()
-                        .as(AWSEC2TemplateOptions.class)
-                        .userMetadata(keyValuePairTagsMap);
+                keyValuePairTagsMap
+                        
.put(propertyKey.substring(CloudControllerConstants.TAGS_AS_KEY_VALUE_PAIRS_PREFIX.length()),
+                                iaasInfo.getProperties().get(propertyKey));
+                
template.getOptions().as(AWSEC2TemplateOptions.class).userMetadata(keyValuePairTagsMap);
             }
 
         }
 
-
         if (iaasInfo.getProperty(CloudControllerConstants.SECURITY_GROUP_IDS) 
!= null) {
-            template.getOptions()
-                    .as(AWSEC2TemplateOptions.class)
-                    
.securityGroupIds(iaasInfo.getProperty(CloudControllerConstants.SECURITY_GROUP_IDS)
+            
template.getOptions().as(AWSEC2TemplateOptions.class).securityGroupIds(
+                    
iaasInfo.getProperty(CloudControllerConstants.SECURITY_GROUP_IDS)
                             .split(CloudControllerConstants.ENTRY_SEPARATOR));
 
         }
 
-
         if (iaasInfo.getProperty(CloudControllerConstants.KEY_PAIR) != null) {
             template.getOptions().as(AWSEC2TemplateOptions.class)
                     
.keyPair(iaasInfo.getProperty(CloudControllerConstants.KEY_PAIR));
         }
 
-
         if (iaasInfo.getNetworkInterfaces() != null) {
             List<String> networks = new 
ArrayList<String>(iaasInfo.getNetworkInterfaces().length);
             for (NetworkInterface ni : iaasInfo.getNetworkInterfaces()) {
@@ -226,58 +210,39 @@ public class EC2Iaas extends JcloudsIaas {
     }
 
     @Override
-    public synchronized boolean createKeyPairFromPublicKey(String region, 
String keyPairName,
-                                                           String publicKey) {
-
+    public synchronized boolean createKeyPairFromPublicKey(String region, 
String keyPairName, String publicKey) {
         IaasProvider iaasInfo = getIaasProvider();
-
         String ec2Msg = " ec2. Region: " + region + " - Key Pair Name: ";
-
-        ComputeServiceContext context = iaasInfo.getComputeService()
-                .getContext();
-
+        ComputeServiceContext context = 
iaasInfo.getComputeService().getContext();
         AWSKeyPairApi keyPairApi = 
context.unwrapApi(AWSEC2Api.class).getKeyPairApiForRegion(region).get();
-
         KeyPair keyPair = keyPairApi.importKeyPairInRegion(region, 
keyPairName, publicKey);
-
         if (keyPair != null) {
-
-            iaasInfo.getTemplate().getOptions().as(AWSEC2TemplateOptions.class)
-                    .keyPair(keyPair.getKeyName());
-
+            
iaasInfo.getTemplate().getOptions().as(AWSEC2TemplateOptions.class).keyPair(keyPair.getKeyName());
             log.info(SUCCESSFUL_LOG_LINE + ec2Msg + keyPair.getKeyName());
             return true;
         }
-
         log.error(FAILED_LOG_LINE + ec2Msg);
-
         return false;
     }
 
     @Override
     public synchronized List<String> associateAddresses(NodeMetadata node) {
-
         IaasProvider iaasInfo = getIaasProvider();
-
-        ComputeServiceContext context = iaasInfo.getComputeService()
-                .getContext();
-
+        ComputeServiceContext context = 
iaasInfo.getComputeService().getContext();
         ElasticIPAddressApi elasticIPAddressApi = 
context.unwrapApi(AWSEC2Api.class).getElasticIPAddressApi().get();
         String region = ComputeServiceBuilderUtil.extractRegion(iaasInfo);
-
         String ip = null;
 
         // first try to find an unassigned IP.
-        ArrayList<PublicIpInstanceIdPair> unassignedIps = Lists
-                
.newArrayList(Iterables.filter(elasticIPAddressApi.describeAddressesInRegion(region),
-                        new Predicate<PublicIpInstanceIdPair>() {
+        ArrayList<PublicIpInstanceIdPair> unassignedIps = 
Lists.newArrayList(Iterables
+                .filter(elasticIPAddressApi.describeAddressesInRegion(region), 
new Predicate<PublicIpInstanceIdPair>() {
 
-                            @Override
-                            public boolean apply(PublicIpInstanceIdPair arg0) {
-                                return arg0.getInstanceId() == null;
-                            }
+                    @Override
+                    public boolean apply(PublicIpInstanceIdPair arg0) {
+                        return arg0.getInstanceId() == null;
+                    }
 
-                        }));
+                }));
 
         if (!unassignedIps.isEmpty()) {
             // try to prevent multiple parallel launches from choosing the same
@@ -289,8 +254,7 @@ public class EC2Iaas extends JcloudsIaas {
         // if no unassigned IP is available, we'll try to allocate an IP.
         if (ip == null || ip.isEmpty()) {
             try {
-                ip = elasticIPAddressApi
-                        .allocateAddressInRegion(region);
+                ip = elasticIPAddressApi.allocateAddressInRegion(region);
                 log.info("Allocated ip [" + ip + "]");
 
             } catch (Exception e) {
@@ -318,8 +282,7 @@ public class EC2Iaas extends JcloudsIaas {
             retries++;
         }
 
-        log.debug("Successfully associated an IP address " + ip
-                + " for node with id: " + node.getId());
+        log.debug("Successfully associated an IP address " + ip + " for node 
with id: " + node.getId());
 
         List<String> associatedIPs = new ArrayList<String>();
         associatedIPs.add(ip);
@@ -338,11 +301,9 @@ public class EC2Iaas extends JcloudsIaas {
      * @param ip
      * @param id
      */
-    private boolean associatePublicIp(ElasticIPAddressApi addressApi, String 
region,
-                                      String ip, String id) {
+    private boolean associatePublicIp(ElasticIPAddressApi addressApi, String 
region, String ip, String id) {
         try {
-            addressApi.associateAddressInRegion(
-                    region, ip, id);
+            addressApi.associateAddressInRegion(region, ip, id);
             log.info("Successfully associated public IP ");
             return true;
         } catch (Exception e) {
@@ -356,26 +317,20 @@ public class EC2Iaas extends JcloudsIaas {
 
         IaasProvider iaasInfo = getIaasProvider();
 
-        ComputeServiceContext context = iaasInfo.getComputeService()
-                .getContext();
+        ComputeServiceContext context = 
iaasInfo.getComputeService().getContext();
         ElasticIPAddressApi elasticIPAddressApi = 
context.unwrapApi(AWSEC2Api.class).getElasticIPAddressApi().get();
         String region = ComputeServiceBuilderUtil.extractRegion(iaasInfo);
 
-        elasticIPAddressApi.disassociateAddressInRegion(
-                region, ip);
-        elasticIPAddressApi.releaseAddressInRegion(region,
-                ip);
+        elasticIPAddressApi.disassociateAddressInRegion(region, ip);
+        elasticIPAddressApi.releaseAddressInRegion(region, ip);
     }
 
     @Override
     public boolean isValidRegion(String region) throws InvalidRegionException {
-
         IaasProvider iaasInfo = getIaasProvider();
-
         if (region == null || iaasInfo == null) {
-            String msg =
-                    "Region or IaaSProvider is null: region: " + region + " - 
IaaSProvider: " +
-                            iaasInfo;
+            String msg = "Region or IaaSProvider is null: region: " + region + 
" - IaaSProvider: " +
+                    iaasInfo;
             log.error(msg);
             throw new InvalidRegionException(msg);
         }
@@ -397,13 +352,10 @@ public class EC2Iaas extends JcloudsIaas {
 
     @Override
     public boolean isValidZone(String region, String zone) throws 
InvalidZoneException {
-
         IaasProvider iaasInfo = getIaasProvider();
-
         if (zone == null || iaasInfo == null) {
-            String msg =
-                    "Zone or IaaSProvider is null: zone: " + zone + " - 
IaaSProvider: " +
-                            iaasInfo;
+            String msg = "Zone or IaaSProvider is null: zone: " + zone + " - 
IaaSProvider: " +
+                    iaasInfo;
             log.error(msg);
             throw new InvalidZoneException(msg);
         }
@@ -411,9 +363,7 @@ public class EC2Iaas extends JcloudsIaas {
         AvailabilityZoneAndRegionApi zoneRegionApi = 
context.unwrapApi(AWSEC2Api.class).
                 getAvailabilityZoneAndRegionApiForRegion(region).get();
 
-        Set<AvailabilityZoneInfo> availabilityZones =
-                zoneRegionApi.describeAvailabilityZonesInRegion(region
-                );
+        Set<AvailabilityZoneInfo> availabilityZones = 
zoneRegionApi.describeAvailabilityZonesInRegion(region);
         for (AvailabilityZoneInfo zoneInfo : availabilityZones) {
             String configuredZone = zoneInfo.getZone();
             if (zone.equalsIgnoreCase(configuredZone)) {
@@ -432,7 +382,6 @@ public class EC2Iaas extends JcloudsIaas {
 
     @Override
     public boolean isValidHost(String zone, String host) throws 
InvalidHostException {
-
         IaasProvider iaasInfo = getIaasProvider();
 
         // there's no such concept in EC2
@@ -450,19 +399,19 @@ public class EC2Iaas extends JcloudsIaas {
     public String createVolume(int sizeGB, String snapshotId) {
         IaasProvider iaasInfo = getIaasProvider();
 
-        ComputeServiceContext context = iaasInfo.getComputeService()
-                .getContext();
+        ComputeServiceContext context = 
iaasInfo.getComputeService().getContext();
 
         String region = ComputeServiceBuilderUtil.extractRegion(iaasInfo);
         String zone = ComputeServiceBuilderUtil.extractZone(iaasInfo);
 
         if (region == null || zone == null) {
-            log.fatal("Cannot create a new volume in the [region] : " + region
-                    + ", [zone] : " + zone + " of Iaas : " + iaasInfo);
+            log.fatal("Cannot create a new volume in the [region] : " + region 
+ ", [zone] : " + zone + " of Iaas : "
+                    + iaasInfo);
             return null;
         }
 
-        ElasticBlockStoreApi blockStoreApi = 
context.unwrapApi(AWSEC2Api.class).getElasticBlockStoreApiForRegion(region).get();
+        ElasticBlockStoreApi blockStoreApi = 
context.unwrapApi(AWSEC2Api.class).getElasticBlockStoreApiForRegion(region)
+                .get();
 
         Volume volume;
         if (StringUtils.isEmpty(snapshotId)) {
@@ -477,37 +426,35 @@ public class EC2Iaas extends JcloudsIaas {
             volume = 
blockStoreApi.createVolumeFromSnapshotInAvailabilityZone(zone, snapshotId);
         }
 
-
         if (volume == null) {
-            log.fatal("Volume creation was unsuccessful. [region] : " + region
-                    + ", [zone] : " + zone + " of Iaas : " + iaasInfo);
+            log.fatal("Volume creation was unsuccessful. [region] : " + region 
+ ", [zone] : " + zone + " of Iaas : "
+                    + iaasInfo);
             return null;
         }
 
-        log.info("Successfully created a new volume [id]: " + volume.getId()
-                + " in [region] : " + region + ", [zone] : " + zone + " of 
Iaas : " + iaasInfo);
+        log.info(
+                "Successfully created a new volume [id]: " + volume.getId() + 
" in [region] : " + region + ", [zone] : "
+                        + zone + " of Iaas : " + iaasInfo);
         return volume.getId();
     }
 
     @Override
     public String attachVolume(String instanceId, String volumeId, String 
deviceName) {
         IaasProvider iaasInfo = getIaasProvider();
-
-        ComputeServiceContext context = iaasInfo.getComputeService()
-                .getContext();
-
+        ComputeServiceContext context = 
iaasInfo.getComputeService().getContext();
         String region = ComputeServiceBuilderUtil.extractRegion(iaasInfo);
         String zone = ComputeServiceBuilderUtil.extractZone(iaasInfo);
         String device = deviceName == null ? "/dev/sdh" : deviceName;
 
         if (region == null || zone == null) {
-            log.fatal("Cannot attach the volume [id]: " + volumeId + " in the 
[region] : " + region
-                    + ", [zone] : " + zone + " of Iaas : " + iaasInfo);
+            log.fatal(
+                    "Cannot attach the volume [id]: " + volumeId + " in the 
[region] : " + region + ", [zone] : " + zone
+                            + " of Iaas : " + iaasInfo);
             return null;
         }
 
-        ElasticBlockStoreApi blockStoreApi = 
context.unwrapApi(AWSEC2Api.class).getElasticBlockStoreApiForRegion(region).get();
-
+        ElasticBlockStoreApi blockStoreApi = 
context.unwrapApi(AWSEC2Api.class).getElasticBlockStoreApiForRegion(region)
+                .get();
         Volume.Status volumeStatus = this.getVolumeStatus(blockStoreApi, 
region, volumeId);
 
         if (log.isDebugEnabled()) {
@@ -534,8 +481,7 @@ public class EC2Iaas extends JcloudsIaas {
 
         if (attachment == null) {
             log.fatal("Volume [id]: " + volumeId + " attachment for instance 
[id]: " + instanceId
-                    + " was unsuccessful. [region] : " + region
-                    + ", [zone] : " + zone + " of Iaas : " + iaasInfo);
+                    + " was unsuccessful. [region] : " + region + ", [zone] : 
" + zone + " of Iaas : " + iaasInfo);
             return null;
         }
 
@@ -554,67 +500,56 @@ public class EC2Iaas extends JcloudsIaas {
     @Override
     public void detachVolume(String instanceId, String volumeId) {
         IaasProvider iaasInfo = getIaasProvider();
-
-        ComputeServiceContext context = iaasInfo.getComputeService()
-                .getContext();
-
+        ComputeServiceContext context = 
iaasInfo.getComputeService().getContext();
         String region = ComputeServiceBuilderUtil.extractRegion(iaasInfo);
-
         if (region == null) {
             log.fatal("Cannot detach the volume [id]: " + volumeId + " from 
the instance [id]: " + instanceId
-                    + " of the [region] : " + region
-                    + " of Iaas : " + iaasInfo);
+                    + " of the [region] : " + region + " of Iaas : " + 
iaasInfo);
             return;
         }
 
-        ElasticBlockStoreApi blockStoreApi = 
context.unwrapApi(AWSEC2Api.class).getElasticBlockStoreApiForRegion(region).get();
-
+        ElasticBlockStoreApi blockStoreApi = 
context.unwrapApi(AWSEC2Api.class).getElasticBlockStoreApiForRegion(region)
+                .get();
         Set<Volume> volumeDescriptions = 
blockStoreApi.describeVolumesInRegion(region, volumeId);
         Iterator<Volume> it = volumeDescriptions.iterator();
 
         while (it.hasNext()) {
             Volume.Status status = it.next().getStatus();
-
             if (status == Volume.Status.AVAILABLE) {
-                log.warn(String.format("Volume %s is already in AVAILABLE 
state. Volume seems to be detached somehow", volumeId));
+                log.warn(String.format("Volume %s is already in AVAILABLE 
state. Volume seems to be detached somehow",
+                        volumeId));
                 return;
             }
         }
-
-        blockStoreApi.detachVolumeInRegion(region, volumeId, true, 
DetachVolumeOptions.Builder.fromInstance(instanceId));
+        blockStoreApi
+                .detachVolumeInRegion(region, volumeId, true, 
DetachVolumeOptions.Builder.fromInstance(instanceId));
 
         log.info("Detachment of Volume [id]: " + volumeId + " from instance 
[id]: " + instanceId
-                + " was successful. [region] : " + region
-                + " of Iaas : " + iaasInfo);
+                + " was successful. [region] : " + region + " of Iaas : " + 
iaasInfo);
     }
 
     @Override
     public void deleteVolume(String volumeId) {
         IaasProvider iaasInfo = getIaasProvider();
-
-        ComputeServiceContext context = iaasInfo.getComputeService()
-                .getContext();
-
+        ComputeServiceContext context = 
iaasInfo.getComputeService().getContext();
         String region = ComputeServiceBuilderUtil.extractRegion(iaasInfo);
-
         if (region == null) {
-            log.fatal("Cannot delete the volume [id]: " + volumeId + " of the 
[region] : " + region
-                    + " of Iaas : " + iaasInfo);
+            log.fatal("Cannot delete the volume [id]: " + volumeId + " of the 
[region] : " + region + " of Iaas : "
+                    + iaasInfo);
             return;
         }
-
-        ElasticBlockStoreApi blockStoreApi = 
context.unwrapApi(AWSEC2Api.class).getElasticBlockStoreApiForRegion(region).get();
+        ElasticBlockStoreApi blockStoreApi = 
context.unwrapApi(AWSEC2Api.class).getElasticBlockStoreApiForRegion(region)
+                .get();
         blockStoreApi.deleteVolumeInRegion(region, volumeId);
-
-        log.info("Deletion of Volume [id]: " + volumeId + " was successful. 
[region] : " + region
-                + " of Iaas : " + iaasInfo);
+        log.info("Deletion of Volume [id]: " + volumeId + " was successful. 
[region] : " + region + " of Iaas : "
+                + iaasInfo);
     }
 
-    @Override
     /*
         Converts the user defined volume device to Ec2 specific device.
         For example /dev/sdf is converted to /dev/xvdf
      */
+    @Override
     public String getIaasDevice(String device) {
         String[] split = device.split("/");
         String x = split[split.length - 1];
@@ -624,6 +559,4 @@ public class EC2Iaas extends JcloudsIaas {
         ec2Device.append(x.charAt(x.length() - 1));
         return ec2Device.toString();
     }
-
-
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/02d01071/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/ec2/EC2PartitionValidator.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/ec2/EC2PartitionValidator.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/ec2/EC2PartitionValidator.java
index e3a78b6..6e6d99e 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/ec2/EC2PartitionValidator.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/ec2/EC2PartitionValidator.java
@@ -22,17 +22,14 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.domain.IaasProvider;
 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.PartitionValidator;
-import 
org.apache.stratos.cloud.controller.services.impl.CloudControllerServiceUtil;
 import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
 import org.apache.stratos.cloud.controller.util.Scope;
 
 import java.util.Properties;
 
-
 /**
  * AWS-EC2 {@link 
org.apache.stratos.cloud.controller.iaases.PartitionValidator} implementation.
  */
@@ -48,65 +45,45 @@ public class EC2PartitionValidator implements 
PartitionValidator {
         try {
             if (properties.containsKey(Scope.REGION.toString())) {
                 String region = 
properties.getProperty(Scope.REGION.toString());
-
                 if (iaasProvider.getImage() != null && 
!iaasProvider.getImage().contains(region)) {
-
-                    String message = "Invalid partition detected, invalid 
region: [partition-id] " + partition.getId() +
-                            " [region] " + region;
+                    String message = String
+                            .format("Invalid partition detected [partition-id] 
%s, [region] %s. Image ID does not "
+                                            + "contain region [image] %s",
+                                    partition.getId(), region, 
iaasProvider.getImage());
                     log.error(message);
                     throw new InvalidPartitionException(message);
                 }
-
                 iaas.isValidRegion(region);
-
                 IaasProvider updatedIaasProvider = new 
IaasProvider(iaasProvider);
-                Iaas updatedIaas = 
CloudControllerServiceUtil.buildIaas(updatedIaasProvider);
-                updatedIaas.setIaasProvider(updatedIaasProvider);
-
                 if (properties.containsKey(Scope.ZONE.toString())) {
                     String zone = 
properties.getProperty(Scope.ZONE.toString());
                     iaas.isValidZone(region, zone);
                     
updatedIaasProvider.setProperty(CloudControllerConstants.AVAILABILITY_ZONE, 
zone);
-                    updatedIaas = 
CloudControllerServiceUtil.buildIaas(updatedIaasProvider);
-                    updatedIaas.setIaasProvider(updatedIaasProvider);
                 }
-
-                updateOtherProperties(updatedIaasProvider, properties);
+                updateProperties(updatedIaasProvider, properties);
+                Iaas updatedIaas = updatedIaasProvider.buildIaas();
+                updatedIaas.setIaasProvider(updatedIaasProvider);
                 return updatedIaasProvider;
-
             } else {
-
                 return iaasProvider;
             }
         } catch (Exception ex) {
-            String message = "Invalid partition detected: [partition-id] " + 
partition.getId();
+            String message = String.format("Invalid partition detected: 
[partition-id] %s", partition.getId());
             log.error(message, ex);
             throw new InvalidPartitionException(message, ex);
         }
     }
 
-    private void updateOtherProperties(IaasProvider updatedIaasProvider,
-                                       Properties properties) {
-        Iaas updatedIaas;
-        try {
-            updatedIaas = 
CloudControllerServiceUtil.buildIaas(updatedIaasProvider);
-
-            for (Object property : properties.keySet()) {
-                if (property instanceof String) {
-                    String key = (String) property;
-                    updatedIaasProvider.setProperty(key,
-                            properties.getProperty(key));
-                    if (log.isDebugEnabled()) {
-                        log.debug("Added property " + key
-                                + " to the IaasProvider.");
-                    }
+    private void updateProperties(IaasProvider updatedIaasProvider, Properties 
properties) {
+        for (Object property : properties.keySet()) {
+            if (property instanceof String) {
+                String key = (String) property;
+                updatedIaasProvider.setProperty(key, 
properties.getProperty(key));
+                if (log.isDebugEnabled()) {
+                    log.debug(String.format("Added [property] %s to the 
IaasProvider.", key));
                 }
             }
-            updatedIaas = 
CloudControllerServiceUtil.buildIaas(updatedIaasProvider);
-            updatedIaas.setIaasProvider(updatedIaasProvider);
-        } catch (InvalidIaasProviderException ignore) {
         }
-
     }
 
     @Override
@@ -114,5 +91,4 @@ public class EC2PartitionValidator implements 
PartitionValidator {
         this.iaasProvider = iaas;
         this.iaas = iaas.getIaas();
     }
-
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/02d01071/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/gce/GCEPartitionValidator.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/gce/GCEPartitionValidator.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/gce/GCEPartitionValidator.java
index 2b0db62..b1f411e 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/gce/GCEPartitionValidator.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/gce/GCEPartitionValidator.java
@@ -32,12 +32,10 @@ import org.apache.stratos.cloud.controller.util.Scope;
 
 import java.util.Properties;
 
-
 /**
  * The VCloud {@link 
org.apache.stratos.cloud.controller.iaases.PartitionValidator} implementation.
  */
 public class GCEPartitionValidator implements PartitionValidator {
-
     private static final Log log = 
LogFactory.getLog(GCEPartitionValidator.class);
     private IaasProvider iaasProvider;
     private Iaas iaas;
@@ -47,61 +45,36 @@ public class GCEPartitionValidator implements 
PartitionValidator {
         try {
             if (properties.containsKey(Scope.REGION.toString())) {
                 String region = 
properties.getProperty(Scope.REGION.toString());
-
-                if (iaasProvider.getImage() != null && 
!iaasProvider.getImage().contains(region)) {
-
-                    String message = "Invalid partition detected, invalid 
region. [partition-id] " + partition.getId() +
-                            ", [region] " + region;
-                    log.error(message);
-                    throw new InvalidPartitionException(message);
-                }
-
                 iaas.isValidRegion(region);
-
                 IaasProvider updatedIaasProvider = new 
IaasProvider(iaasProvider);
-                Iaas updatedIaas = 
CloudControllerServiceUtil.buildIaas(updatedIaasProvider);
-                updatedIaas.setIaasProvider(updatedIaasProvider);
-
                 if (properties.containsKey(Scope.ZONE.toString())) {
                     String zone = 
properties.getProperty(Scope.ZONE.toString());
                     iaas.isValidZone(region, zone);
                     
updatedIaasProvider.setProperty(CloudControllerConstants.AVAILABILITY_ZONE, 
zone);
-                    updatedIaas = 
CloudControllerServiceUtil.buildIaas(updatedIaasProvider);
-                    updatedIaas.setIaasProvider(updatedIaasProvider);
                 }
-
                 updateOtherProperties(updatedIaasProvider, properties);
+                Iaas updatedIaas = updatedIaasProvider.buildIaas();
+                updatedIaas.setIaasProvider(updatedIaasProvider);
                 return updatedIaasProvider;
             } else {
                 return iaasProvider;
             }
-        }
-        catch (Exception ex) {
-            String message = "Invalid partition detected: [partition-id] " + 
partition.getId();
+        } catch (Exception ex) {
+            String message = String.format("Invalid partition detected: 
[partition-id] %s", partition.getId());
             throw new InvalidPartitionException(message, ex);
         }
     }
 
     private void updateOtherProperties(IaasProvider updatedIaasProvider, 
Properties properties) {
-        Iaas updatedIaas;
-        try {
-            updatedIaas = 
CloudControllerServiceUtil.buildIaas(updatedIaasProvider);
-
-            for (Object property : properties.keySet()) {
-                if (property instanceof String) {
-                    String key = (String) property;
-                    updatedIaasProvider.setProperty(key, 
properties.getProperty(key));
-                    if (log.isDebugEnabled()) {
-                        log.debug("Added property " + key + " to the 
IaasProvider.");
-                    }
+        for (Object property : properties.keySet()) {
+            if (property instanceof String) {
+                String key = (String) property;
+                updatedIaasProvider.setProperty(key, 
properties.getProperty(key));
+                if (log.isDebugEnabled()) {
+                    log.debug(String.format("Added [property] %s to the 
IaasProvider.", key));
                 }
             }
-            updatedIaas = 
CloudControllerServiceUtil.buildIaas(updatedIaasProvider);
-            updatedIaas.setIaasProvider(updatedIaasProvider);
         }
-        catch (InvalidIaasProviderException ignore) {
-        }
-
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/stratos/blob/02d01071/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesPartitionValidator.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesPartitionValidator.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesPartitionValidator.java
index 8eedc88..3dd4790 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesPartitionValidator.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/kubernetes/KubernetesPartitionValidator.java
@@ -34,9 +34,7 @@ import java.util.Properties;
  * Kubernetes partition validator
  */
 public class KubernetesPartitionValidator implements PartitionValidator {
-
     private static final Log log = 
LogFactory.getLog(KubernetesPartitionValidator.class);
-
     private IaasProvider iaasProvider;
 
     @Override
@@ -53,14 +51,12 @@ public class KubernetesPartitionValidator implements 
PartitionValidator {
      * @throws InvalidPartitionException if at least one property is evaluated 
to be invalid.
      */
     public IaasProvider validate(Partition partition, Properties properties) 
throws InvalidPartitionException {
-
         String kubernetesClusterId = partition.getKubernetesClusterId();
         if (StringUtils.isBlank(kubernetesClusterId)) {
             String message = "Kubernetes cluster not defined in partition: 
[partition-id] " + partition.getId();
             log.error(message);
             throw new InvalidPartitionException(message);
         }
-
         try {
             
CloudControllerContext.getInstance().getKubernetesCluster(kubernetesClusterId);
             return iaasProvider;

http://git-wip-us.apache.org/repos/asf/stratos/blob/02d01071/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockIaasPartitionValidator.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockIaasPartitionValidator.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockIaasPartitionValidator.java
index d5241f8..84436b8 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockIaasPartitionValidator.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/mock/MockIaasPartitionValidator.java
@@ -30,7 +30,6 @@ import java.util.Properties;
  * Mock partition validator.
  */
 public class MockIaasPartitionValidator implements PartitionValidator {
-
     private IaasProvider iaasProvider;
 
     @Override

Reply via email to