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

[12/16] stratos git commit: Fixing deployment policy validation to cater docker partitions.

Fixing deployment policy validation to cater docker partitions.


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

Branch: refs/heads/master
Commit: 9affb35a4808459b356dbb8f5d98d6d95d4a6344
Parents: 826bc65
Author: Nirmal Fernando <ni...@gmail.com>
Authored: Sat Dec 6 18:18:33 2014 +0530
Committer: Nirmal Fernando <ni...@gmail.com>
Committed: Sun Dec 7 18:00:49 2014 +0530

----------------------------------------------------------------------
 .../concurrent/PartitionValidatorCallable.java  | 46 ++++------------
 .../impl/CloudControllerServiceImpl.java        | 45 +++-------------
 .../impl/CloudControllerServiceUtil.java        | 56 ++++++++++++++++++++
 3 files changed, 73 insertions(+), 74 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/9affb35a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/concurrent/PartitionValidatorCallable.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/concurrent/PartitionValidatorCallable.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/concurrent/PartitionValidatorCallable.java
index 7cb88f1..b13d6fe 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/concurrent/PartitionValidatorCallable.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/concurrent/PartitionValidatorCallable.java
@@ -27,6 +27,7 @@ import org.apache.stratos.cloud.controller.exception.InvalidIaasProviderExceptio
 import org.apache.stratos.cloud.controller.exception.InvalidPartitionException;
 import org.apache.stratos.cloud.controller.domain.Cartridge;
 import org.apache.stratos.cloud.controller.domain.IaasProvider;
+import org.apache.stratos.cloud.controller.services.impl.CloudControllerServiceUtil;
 import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
 import org.apache.stratos.cloud.controller.iaases.Iaas;
 import org.apache.stratos.cloud.controller.iaases.validators.IaasBasedPartitionValidator;
@@ -46,47 +47,20 @@ public class PartitionValidatorCallable implements Callable<IaasProvider> {
 	@Override
 	public IaasProvider call() throws Exception {
 		
-		if (log.isDebugEnabled()) {
-			log.debug("Partition validation started for "+partition+" of "+cartridge);
-		}
-		String provider = partition.getProvider();
-        IaasProvider iaasProvider = cartridge.getIaasProvider(provider);
-
-        if (iaasProvider == null) {
-            String msg =
-                         "Invalid Partition - " + partition.toString() +
-                                 ". Cause: Iaas Provider is null for Provider: " + provider;
-            log.error(msg);
-            throw new InvalidPartitionException(msg);
+        if (log.isDebugEnabled()) {
+            log.debug("Partition validation started for " + partition + " of " + cartridge);
         }
+        String provider = partition.getProvider();
+        IaasProvider iaasProvider = cartridge.getIaasProvider(provider);
 
-        Iaas iaas = iaasProvider.getIaas();
-        
-        if (iaas == null) {
-            
-            try {
-                iaas = CloudControllerUtil.getIaas(iaasProvider);
-            } catch (InvalidIaasProviderException e) {
-                String msg =
-                        "Invalid Partition - " + partition.toString() +
-                        ". Cause: Unable to build Iaas of this IaasProvider [Provider] : " + provider+". "+e.getMessage();
-                log.error(msg, e);
-                throw new InvalidPartitionException(msg, e);
-            }
-            
-        }
-        
-        IaasBasedPartitionValidator validator = (IaasBasedPartitionValidator) iaas.getPartitionValidator();
-        validator.setIaasProvider(iaasProvider);
         IaasProvider updatedIaasProvider =
-                                           validator.validate(partition.getId(),
-                                                              CloudControllerUtil.toJavaUtilProperties(partition.getProperties()));
-        
+                CloudControllerServiceUtil.validatePartitionAndGetIaasProvider(partition, iaasProvider);
+
         if (log.isDebugEnabled()) {
-        	log.debug("Partition "+partition.toString()+ " is validated successfully "
-        			+ "against the Cartridge: "+cartridge.getType());
+            log.debug("Partition " + partition.toString() + " is validated successfully " + "against the Cartridge: "
+                    + cartridge.getType());
         }
-        
+
         return updatedIaasProvider;
 	}
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/9affb35a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
index 3049735..b8fd6c5 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceImpl.java
@@ -1003,8 +1003,13 @@ public class CloudControllerServiceImpl implements CloudControllerService {
                 String partitionId = entry.getKey();
                 Future<IaasProvider> job = entry.getValue();
                 try {
+                    
                     // add to a temporary Map
-                    partitionToIaasProviders.put(partitionId, job.get());
+                    IaasProvider iaasProvider = job.get();
+                    
+                    if(iaasProvider != null) {
+                        partitionToIaasProviders.put(partitionId, iaasProvider);
+                    }
 
                     // add to cache
                     CloudControllerContext.getInstance().addToCartridgeTypeToPartitionIdMap(cartridgeType, partitionId);
@@ -1050,47 +1055,11 @@ public class CloudControllerServiceImpl implements CloudControllerService {
 
         String provider = partition.getProvider();
         String partitionId = partition.getId();
-        Properties partitionProperties = CloudControllerUtil.toJavaUtilProperties(partition.getProperties());
 
         handleNullObject(provider, "Partition [" + partitionId + "] validation failed. Partition provider is null.");
         IaasProvider iaasProvider = CloudControllerConfig.getInstance().getIaasProvider(provider);
 
-        if (iaasProvider != null) {
-            // if this is a IaaS based partition
-            Iaas iaas = iaasProvider.getIaas();
-
-            if (iaas == null) {
-
-                try {
-                    iaas = CloudControllerUtil.getIaas(iaasProvider);
-                } catch (InvalidIaasProviderException e) {
-                    String msg =
-                            "Invalid Partition - " + partition.toString()
-                                    + ". Cause: Unable to build Iaas of this IaasProvider [Provider] : " + provider
-                                    + ". " + e.getMessage();
-                    log.error(msg, e);
-                    throw new InvalidPartitionException(msg, e);
-                }
-            }
-
-            IaasBasedPartitionValidator validator = (IaasBasedPartitionValidator) iaas.getPartitionValidator();
-            validator.setIaasProvider(iaasProvider);
-            validator.validate(partitionId, partitionProperties);
-            return true;
-
-        } else if (CloudControllerConstants.DOCKER_PARTITION_PROVIDER.equals(provider)) {
-            // if this is a docker based Partition
-            KubernetesBasedPartitionValidator validator = new KubernetesBasedPartitionValidator();
-            validator.validate(partitionId, partitionProperties);
-            return true;
-
-        } else {
-
-            String msg =
-                    "Invalid Partition - " + partition.toString() + ". Cause: Cannot identify as a valid partition.";
-            log.error(msg);
-            throw new InvalidPartitionException(msg);
-        }
+        return CloudControllerServiceUtil.validatePartition(partition, iaasProvider);
 
     }
 

http://git-wip-us.apache.org/repos/asf/stratos/blob/9affb35a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceUtil.java
----------------------------------------------------------------------
diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceUtil.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceUtil.java
index 056d991..4fbf294 100644
--- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceUtil.java
+++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/services/impl/CloudControllerServiceUtil.java
@@ -19,19 +19,27 @@
 
 package org.apache.stratos.cloud.controller.services.impl;
 
+import java.util.Properties;
+
 import com.google.common.net.InetAddresses;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.stratos.cloud.controller.context.CloudControllerContext;
 import org.apache.stratos.cloud.controller.domain.ClusterContext;
 import org.apache.stratos.cloud.controller.domain.IaasProvider;
 import org.apache.stratos.cloud.controller.domain.MemberContext;
+import org.apache.stratos.cloud.controller.domain.Partition;
 import org.apache.stratos.cloud.controller.domain.Volume;
 import org.apache.stratos.cloud.controller.exception.CloudControllerException;
 import org.apache.stratos.cloud.controller.exception.InvalidIaasProviderException;
+import org.apache.stratos.cloud.controller.exception.InvalidPartitionException;
 import org.apache.stratos.cloud.controller.iaases.Iaas;
+import org.apache.stratos.cloud.controller.iaases.validators.IaasBasedPartitionValidator;
+import org.apache.stratos.cloud.controller.iaases.validators.KubernetesBasedPartitionValidator;
 import org.apache.stratos.cloud.controller.messaging.publisher.CartridgeInstanceDataPublisher;
 import org.apache.stratos.cloud.controller.messaging.topology.TopologyBuilder;
+import org.apache.stratos.cloud.controller.util.CloudControllerConstants;
 import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
 import org.apache.stratos.messaging.domain.topology.MemberStatus;
 import org.jclouds.rest.ResourceNotFoundException;
@@ -141,4 +149,52 @@ public class CloudControllerServiceUtil {
         boolean isValid = InetAddresses.isInetAddress(ip);
         return isValid;
     }
+    
+    public static IaasProvider validatePartitionAndGetIaasProvider(Partition partition, IaasProvider iaasProvider) throws InvalidPartitionException {
+        String provider = partition.getProvider();
+        String partitionId = partition.getId();
+        Properties partitionProperties = CloudControllerUtil.toJavaUtilProperties(partition.getProperties());
+
+        if (iaasProvider != null) {
+            // if this is a IaaS based partition
+            Iaas iaas = iaasProvider.getIaas();
+
+            if (iaas == null) {
+
+                try {
+                    iaas = CloudControllerUtil.getIaas(iaasProvider);
+                } catch (InvalidIaasProviderException e) {
+                    String msg =
+                            "Invalid Partition - " + partition.toString()
+                                    + ". Cause: Unable to build Iaas of this IaasProvider [Provider] : " + provider
+                                    + ". " + e.getMessage();
+                    log.error(msg, e);
+                    throw new InvalidPartitionException(msg, e);
+                }
+            }
+
+            IaasBasedPartitionValidator validator = (IaasBasedPartitionValidator) iaas.getPartitionValidator();
+            validator.setIaasProvider(iaasProvider);
+            iaasProvider = validator.validate(partitionId, partitionProperties);
+            return iaasProvider;
+
+        } else if (CloudControllerConstants.DOCKER_PARTITION_PROVIDER.equals(provider)) {
+            // if this is a docker based Partition
+            KubernetesBasedPartitionValidator validator = new KubernetesBasedPartitionValidator();
+            validator.validate(partitionId, partitionProperties);
+            return null;
+
+        } else {
+
+            String msg =
+                    "Invalid Partition - " + partition.toString() + ". Cause: Cannot identify as a valid partition.";
+            log.error(msg);
+            throw new InvalidPartitionException(msg);
+        }
+    }
+    
+    public static boolean validatePartition(Partition partition, IaasProvider iaasProvider) throws InvalidPartitionException {
+        validatePartitionAndGetIaasProvider(partition, iaasProvider);
+        return true;
+    }
 }