Partition validation changes to CC, 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/c2fc25fb
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/c2fc25fb
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/c2fc25fb

Branch: refs/heads/master
Commit: c2fc25fbcb1b3c2e05bf223b59b8f32c0999e66e
Parents: 4d2dcdd
Author: Nirmal Fernando <[email protected]>
Authored: Fri Dec 5 08:08:03 2014 +0530
Committer: Nirmal Fernando <[email protected]>
Committed: Sun Dec 7 17:59:31 2014 +0530

----------------------------------------------------------------------
 .../concurrent/PartitionValidatorCallable.java  |  3 +-
 .../domain/ContainerClusterContext.java         | 30 ++++++++++
 .../validators/AWSEC2PartitionValidator.java    |  2 +-
 .../CloudstackPartitionValidator.java           |  2 +-
 .../validators/DockerPartitionValidator.java    |  2 +-
 .../validators/GCEPartitionValidator.java       |  2 +-
 .../OpenstackNovaPartitionValidator.java        |  2 +-
 .../iaases/validators/PartitionValidator.java   | 12 +---
 .../validators/VCloudPartitionValidator.java    |  2 +-
 .../impl/CloudControllerServiceImpl.java        | 63 ++++++++++++--------
 .../util/CloudControllerConstants.java          |  2 +
 11 files changed, 80 insertions(+), 42 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/c2fc25fb/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 0b56eee..7cb88f1 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
@@ -29,6 +29,7 @@ import org.apache.stratos.cloud.controller.domain.Cartridge;
 import org.apache.stratos.cloud.controller.domain.IaasProvider;
 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;
 import 
org.apache.stratos.cloud.controller.iaases.validators.PartitionValidator;
 
 public class PartitionValidatorCallable implements Callable<IaasProvider> {
@@ -75,7 +76,7 @@ public class PartitionValidatorCallable implements 
Callable<IaasProvider> {
             
         }
         
-        PartitionValidator validator = iaas.getPartitionValidator();
+        IaasBasedPartitionValidator validator = (IaasBasedPartitionValidator) 
iaas.getPartitionValidator();
         validator.setIaasProvider(iaasProvider);
         IaasProvider updatedIaasProvider =
                                            
validator.validate(partition.getId(),

http://git-wip-us.apache.org/repos/asf/stratos/blob/c2fc25fb/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ContainerClusterContext.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ContainerClusterContext.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ContainerClusterContext.java
index de7dd84..fa6e33f 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ContainerClusterContext.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/domain/ContainerClusterContext.java
@@ -31,6 +31,12 @@ public class ContainerClusterContext implements Serializable 
{
     private static final long serialVersionUID = -388327475844701869L;
     // cluster id this Pod belongs to
     private String clusterId;
+    // partition this member is in.
+    private Partition partition;
+ // instance id - derived from nodeId
+    private String instanceId;
+  //network partition id
+    private String networkPartitionId;
     // properties
     private Properties properties;
     
@@ -55,6 +61,30 @@ public class ContainerClusterContext implements Serializable 
{
         this.properties = properties;
     }
 
+    public Partition getPartition() {
+        return partition;
+    }
+
+    public void setPartition(Partition partition) {
+        this.partition = partition;
+    }
+
+    public String getInstanceId() {
+        return instanceId;
+    }
+
+    public void setInstanceId(String instanceId) {
+        this.instanceId = instanceId;
+    }
+
+    public String getNetworkPartitionId() {
+        return networkPartitionId;
+    }
+
+    public void setNetworkPartitionId(String networkPartitionId) {
+        this.networkPartitionId = networkPartitionId;
+    }
+
     @Override
     public int hashCode() {
         final int prime = 31;

http://git-wip-us.apache.org/repos/asf/stratos/blob/c2fc25fb/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/AWSEC2PartitionValidator.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/AWSEC2PartitionValidator.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/AWSEC2PartitionValidator.java
index b8ecfdb..17e31ac 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/AWSEC2PartitionValidator.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/AWSEC2PartitionValidator.java
@@ -36,7 +36,7 @@ import java.util.Properties;
  *
  *
  */
-public class AWSEC2PartitionValidator implements PartitionValidator {
+public class AWSEC2PartitionValidator extends IaasBasedPartitionValidator {
     
     private static final Log log = 
LogFactory.getLog(AWSEC2PartitionValidator.class);
     private IaasProvider iaasProvider;

http://git-wip-us.apache.org/repos/asf/stratos/blob/c2fc25fb/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/CloudstackPartitionValidator.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/CloudstackPartitionValidator.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/CloudstackPartitionValidator.java
index 9b3d159..4a818a8 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/CloudstackPartitionValidator.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/CloudstackPartitionValidator.java
@@ -12,7 +12,7 @@ import org.apache.stratos.messaging.domain.topology.Scope;
 import java.util.Properties;
 
 
-public class CloudstackPartitionValidator implements PartitionValidator {
+public class CloudstackPartitionValidator extends IaasBasedPartitionValidator {
 
 
     private static final Log log = 
LogFactory.getLog(AWSEC2PartitionValidator.class);

http://git-wip-us.apache.org/repos/asf/stratos/blob/c2fc25fb/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/DockerPartitionValidator.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/DockerPartitionValidator.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/DockerPartitionValidator.java
index 5c00c4c..73a4e78 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/DockerPartitionValidator.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/DockerPartitionValidator.java
@@ -33,7 +33,7 @@ import java.util.Properties;
 /**
  * Docker partition validator definition.
  */
-public class DockerPartitionValidator implements PartitionValidator {
+public class DockerPartitionValidator extends IaasBasedPartitionValidator {
     private static final Log log = LogFactory.getLog(AWSEC2Iaas.class);
 
     private IaasProvider iaasProvider;

http://git-wip-us.apache.org/repos/asf/stratos/blob/c2fc25fb/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/GCEPartitionValidator.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/GCEPartitionValidator.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/GCEPartitionValidator.java
index f1b4556..ada45cd 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/GCEPartitionValidator.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/GCEPartitionValidator.java
@@ -31,7 +31,7 @@ import 
org.apache.stratos.cloud.controller.domain.IaasProvider;
  * The VCloud {@link PartitionValidator} implementation.
  *
  */
-public class GCEPartitionValidator implements PartitionValidator {
+public class GCEPartitionValidator extends IaasBasedPartitionValidator {
     
     private static final Log log = 
LogFactory.getLog(VCloudPartitionValidator.class);
     private IaasProvider iaasProvider;

http://git-wip-us.apache.org/repos/asf/stratos/blob/c2fc25fb/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/OpenstackNovaPartitionValidator.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/OpenstackNovaPartitionValidator.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/OpenstackNovaPartitionValidator.java
index 1983e08..a385062 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/OpenstackNovaPartitionValidator.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/OpenstackNovaPartitionValidator.java
@@ -36,7 +36,7 @@ import java.util.Properties;
  *
  *
  */
-public class OpenstackNovaPartitionValidator implements PartitionValidator {
+public class OpenstackNovaPartitionValidator extends 
IaasBasedPartitionValidator {
     
     private static final Log log = 
LogFactory.getLog(OpenstackNovaPartitionValidator.class);
     private IaasProvider iaasProvider;

http://git-wip-us.apache.org/repos/asf/stratos/blob/c2fc25fb/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/PartitionValidator.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/PartitionValidator.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/PartitionValidator.java
index 162713a..ed29c2d 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/PartitionValidator.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/PartitionValidator.java
@@ -21,27 +21,19 @@ package 
org.apache.stratos.cloud.controller.iaases.validators;
 import java.util.Properties;
 
 import org.apache.stratos.cloud.controller.exception.InvalidPartitionException;
-import org.apache.stratos.cloud.controller.domain.IaasProvider;
 
 /**
  * All the Partition Validators should implement this interface.
  *
- *
  */
 public interface PartitionValidator {
     
     /**
-     * set the IaasProvider reference.
-     * @param iaas {@link IaasProvider}
-     */
-    public void setIaasProvider(IaasProvider iaas);
-
-    /**
      * Validate the given properties for its existent in this partition.
      * @param partitionId partition id.
      * @param properties set of properties to be validated.
-     * @return cloned and modified {@link IaasProvider} which maps to the 
given partition. 
+     * @return cloned and modified {@link Object} which maps to the given 
partition. 
      * @throws InvalidPartitionException if at least one property is evaluated 
to be invalid.
      */
-    public IaasProvider validate(String partitionId, Properties properties) 
throws InvalidPartitionException;
+    public Object validate(String partitionId, Properties properties) throws 
InvalidPartitionException;
 }

http://git-wip-us.apache.org/repos/asf/stratos/blob/c2fc25fb/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/VCloudPartitionValidator.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/VCloudPartitionValidator.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/VCloudPartitionValidator.java
index 8af42d7..21b3417 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/VCloudPartitionValidator.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/validators/VCloudPartitionValidator.java
@@ -31,7 +31,7 @@ import 
org.apache.stratos.cloud.controller.domain.IaasProvider;
  * The VCloud {@link PartitionValidator} implementation.
  *
  */
-public class VCloudPartitionValidator implements PartitionValidator {
+public class VCloudPartitionValidator extends IaasBasedPartitionValidator {
     
     @SuppressWarnings("unused")
        private static final Log log = 
LogFactory.getLog(VCloudPartitionValidator.class);

http://git-wip-us.apache.org/repos/asf/stratos/blob/c2fc25fb/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 3b5eef5..3049735 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
@@ -45,6 +45,8 @@ import 
org.apache.stratos.cloud.controller.util.CloudControllerConstants;
 import org.apache.stratos.cloud.controller.util.CloudControllerUtil;
 import org.apache.stratos.cloud.controller.util.PodActivationWatcher;
 import org.apache.stratos.common.Property;
+import 
org.apache.stratos.cloud.controller.iaases.validators.IaasBasedPartitionValidator;
+import 
org.apache.stratos.cloud.controller.iaases.validators.KubernetesBasedPartitionValidator;
 import org.apache.stratos.common.constants.StratosConstants;
 import org.apache.stratos.common.kubernetes.KubernetesGroup;
 import org.apache.stratos.common.kubernetes.KubernetesHost;
@@ -1045,40 +1047,51 @@ public class CloudControllerServiceImpl implements 
CloudControllerService {
     @Override
     public boolean validatePartition(Partition partition) throws 
InvalidPartitionException {
         handleNullObject(partition, "Partition validation failed. Partition is 
null.");
+
         String provider = partition.getProvider();
-        handleNullObject(provider, "Partition [" + partition.getId() + "] 
validation failed. Partition provider is null.");
-        IaasProvider iaasProvider = 
CloudControllerConfig.getInstance().getIaasProvider(provider);
+        String partitionId = partition.getId();
+        Properties partitionProperties = 
CloudControllerUtil.toJavaUtilProperties(partition.getProperties());
 
-        if (iaasProvider == null) {
-            String msg =
-                    "Invalid Partition - " + partition.toString() + ". Cause: 
Iaas Provider " +
-                            "is null for Partition Provider: " + provider;
-            log.error(msg);
-            throw new InvalidPartitionException(msg);
-        }
+        handleNullObject(provider, "Partition [" + partitionId + "] validation 
failed. Partition provider is null.");
+        IaasProvider iaasProvider = 
CloudControllerConfig.getInstance().getIaasProvider(provider);
 
-        Iaas iaas = iaasProvider.getIaas();
+        if (iaasProvider != null) {
+            // if this is a IaaS based partition
+            Iaas iaas = iaasProvider.getIaas();
 
-        if (iaas == null) {
+            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);
+                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;
 
-        PartitionValidator validator = iaas.getPartitionValidator();
-        validator.setIaasProvider(iaasProvider);
-        validator.validate(partition.getId(),
-                
CloudControllerUtil.toJavaUtilProperties(partition.getProperties()));
+        } else {
+
+            String msg =
+                    "Invalid Partition - " + partition.toString() + ". Cause: 
Cannot identify as a valid partition.";
+            log.error(msg);
+            throw new InvalidPartitionException(msg);
+        }
 
-        return true;
     }
 
     public ClusterContext getClusterContext(String clusterId) {

http://git-wip-us.apache.org/repos/asf/stratos/blob/c2fc25fb/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java
----------------------------------------------------------------------
diff --git 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java
 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java
index 21664e2..f15e450 100644
--- 
a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java
+++ 
b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/util/CloudControllerConstants.java
@@ -294,4 +294,6 @@ public final class CloudControllerConstants {
      */
     public static final int PORT_RANGE_MAX = 65535;
     public static final int PORT_RANGE_MIN = 1;
+    
+    public static final String DOCKER_PARTITION_PROVIDER = "docker";
 }

Reply via email to