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"; }
