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
