adding partition validator - iaas implementation changes
Project: http://git-wip-us.apache.org/repos/asf/incubator-stratos/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-stratos/commit/38548f80 Tree: http://git-wip-us.apache.org/repos/asf/incubator-stratos/tree/38548f80 Diff: http://git-wip-us.apache.org/repos/asf/incubator-stratos/diff/38548f80 Branch: refs/heads/master Commit: 38548f80a0353a6291fe2a58bab279ed47f95ee6 Parents: 3805b06 Author: Nirmal Fernando <[email protected]> Authored: Fri Nov 22 14:06:56 2013 +0530 Committer: Nirmal Fernando <[email protected]> Committed: Fri Nov 22 14:06:56 2013 +0530 ---------------------------------------------------------------------- .../cloud/controller/iaases/AWSEC2Iaas.java | 62 ++++++++++++++++++ .../controller/iaases/OpenstackNovaIaas.java | 69 ++++++++++++++++++++ .../cloud/controller/iaases/VCloudIaas.java | 25 +++++++ 3 files changed, 156 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/38548f80/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/AWSEC2Iaas.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/AWSEC2Iaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/AWSEC2Iaas.java index 9fafdd9..36bcdd3 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/AWSEC2Iaas.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/AWSEC2Iaas.java @@ -21,6 +21,7 @@ package org.apache.stratos.cloud.controller.iaases; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.cloud.controller.exception.CloudControllerException; @@ -29,6 +30,8 @@ import org.apache.stratos.cloud.controller.jcloud.ComputeServiceBuilderUtil; import org.apache.stratos.cloud.controller.util.CloudControllerConstants; import org.apache.stratos.cloud.controller.util.CloudControllerUtil; import org.apache.stratos.cloud.controller.util.IaasProvider; +import org.apache.stratos.cloud.controller.validate.AWSEC2PartitionValidator; +import org.apache.stratos.cloud.controller.validate.interfaces.PartitionValidator; import org.jclouds.aws.ec2.AWSEC2ApiMetadata; import org.jclouds.aws.ec2.AWSEC2Client; import org.jclouds.aws.ec2.compute.AWSEC2TemplateOptions; @@ -39,11 +42,15 @@ import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.Template; import org.jclouds.compute.domain.TemplateBuilder; import org.jclouds.compute.options.TemplateOptions; +import org.jclouds.ec2.EC2Api; +import org.jclouds.ec2.domain.AvailabilityZoneInfo; import org.jclouds.ec2.domain.KeyPair; import org.jclouds.ec2.domain.PublicIpInstanceIdPair; +import org.jclouds.ec2.features.AvailabilityZoneAndRegionApi; import java.util.ArrayList; import java.util.Collections; +import java.util.Set; public class AWSEC2Iaas extends Iaas { @@ -299,4 +306,59 @@ public class AWSEC2Iaas extends Iaas { ip); } + @Override + public boolean isValidRegion(IaasProvider iaasInfo, String region) { + ComputeServiceContext context = iaasInfo.getComputeService().getContext(); + EC2Api api = context.unwrap(); + for (String configuredRegion : api.getConfiguredRegions()) { + if (region.equalsIgnoreCase(configuredRegion)) { + if (log.isDebugEnabled()) { + log.debug("Found a matching region: " + region); + } + return true; + } + } + if (log.isDebugEnabled()) { + log.debug("Did not find a matching region: " + region); + } + return false; + } + + @Override + public boolean isValidZone(IaasProvider iaasInfo, String region, String zone) { + ComputeServiceContext context = iaasInfo.getComputeService().getContext(); + EC2Api api = context.unwrap(); + AvailabilityZoneAndRegionApi zoneRegionApi = + api.getAvailabilityZoneAndRegionApiForRegion(region) + .get(); + Set<AvailabilityZoneInfo> availabilityZones = + zoneRegionApi.describeAvailabilityZonesInRegion(region, + null); + for (AvailabilityZoneInfo zoneInfo : availabilityZones) { + String configuredZone = zoneInfo.getZone(); + if (zone.equalsIgnoreCase(configuredZone)) { + if (log.isDebugEnabled()) { + log.debug("Found a matching zone: " + zone); + } + return true; + } + } + if (log.isDebugEnabled()) { + log.debug("Did not find a matching zone: " + zone); + } + return false; + } + + @Override + public boolean isValidHost(IaasProvider iaasInfo, String zone, String host) { + // there's no such concept in EC2 + return false; + } + + @Override + public PartitionValidator getPartitionValidator() { + return new AWSEC2PartitionValidator(); + } + + } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/38548f80/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java index 8c4bdae..7e6f961 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/OpenstackNovaIaas.java @@ -22,6 +22,7 @@ import com.google.common.base.Predicate; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.stratos.cloud.controller.exception.CloudControllerException; @@ -30,6 +31,8 @@ import org.apache.stratos.cloud.controller.jcloud.ComputeServiceBuilderUtil; import org.apache.stratos.cloud.controller.util.CloudControllerConstants; import org.apache.stratos.cloud.controller.util.CloudControllerUtil; import org.apache.stratos.cloud.controller.util.IaasProvider; +import org.apache.stratos.cloud.controller.validate.OpenstackNovaPartitionValidator; +import org.apache.stratos.cloud.controller.validate.interfaces.PartitionValidator; import org.jclouds.compute.ComputeServiceContext; import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.NodeMetadataBuilder; @@ -40,8 +43,10 @@ import org.jclouds.openstack.nova.v2_0.NovaApi; import org.jclouds.openstack.nova.v2_0.NovaApiMetadata; import org.jclouds.openstack.nova.v2_0.compute.options.NovaTemplateOptions; import org.jclouds.openstack.nova.v2_0.domain.FloatingIP; +import org.jclouds.openstack.nova.v2_0.domain.HostAggregate; import org.jclouds.openstack.nova.v2_0.domain.KeyPair; import org.jclouds.openstack.nova.v2_0.extensions.FloatingIPApi; +import org.jclouds.openstack.nova.v2_0.extensions.HostAggregateApi; import org.jclouds.openstack.nova.v2_0.extensions.KeyPairApi; import java.util.ArrayList; @@ -283,4 +288,68 @@ public class OpenstackNovaIaas extends Iaas { } } + @Override + public boolean isValidRegion(IaasProvider iaasInfo, String region) { + // jclouds doesn't support regions in Openstack-Nova API + return false; + } + + @Override + public boolean isValidZone(IaasProvider iaasInfo, String region, String zone) { + if (zone == null || iaasInfo == null) { + if (log.isDebugEnabled()) { + log.debug("Zone or IaaSProvider is null: zone: " + zone + " - IaaSProvider: " + + iaasInfo); + } + return false; + } + ComputeServiceContext context = iaasInfo.getComputeService().getContext(); + NovaApi api = context.unwrap(); + for (String configuredZone : api.getConfiguredZones()) { + if (zone.equalsIgnoreCase(configuredZone)) { + if (log.isDebugEnabled()) { + log.debug("Found a matching zone: " + zone); + } + return true; + } + } + if (log.isDebugEnabled()) { + log.debug("Did not find a matching zone: " + zone); + } + return false; + } + + @Override + public boolean isValidHost(IaasProvider iaasInfo, String zone, String host) { + if (host == null || zone == null || iaasInfo == null) { + if (log.isDebugEnabled()) { + log.debug("Host or Zone or IaaSProvider is null: host: " + host + " - zone: " + + zone + " - IaaSProvider: " + iaasInfo); + } + return false; + } + ComputeServiceContext context = iaasInfo.getComputeService().getContext(); + NovaApi api = context.unwrap(); + HostAggregateApi hostApi = api.getHostAggregateExtensionForZone(zone).get(); + for (HostAggregate hostAggregate : hostApi.list()) { + for (String configuredHost : hostAggregate.getHosts()) { + if (host.equalsIgnoreCase(configuredHost)) { + if (log.isDebugEnabled()) { + log.debug("Found a matching host: " + host); + } + return true; + } + } + } + if (log.isDebugEnabled()) { + log.debug("Did not find a matching host: " + host); + } + return false; + } + + @Override + public PartitionValidator getPartitionValidator() { + return new OpenstackNovaPartitionValidator(); + } + } http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/38548f80/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/VCloudIaas.java ---------------------------------------------------------------------- diff --git a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/VCloudIaas.java b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/VCloudIaas.java index 18120b0..6b2951a 100644 --- a/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/VCloudIaas.java +++ b/components/org.apache.stratos.cloud.controller/src/main/java/org/apache/stratos/cloud/controller/iaases/VCloudIaas.java @@ -25,6 +25,7 @@ import org.apache.stratos.cloud.controller.exception.CloudControllerException; import org.apache.stratos.cloud.controller.interfaces.Iaas; import org.apache.stratos.cloud.controller.jcloud.ComputeServiceBuilderUtil; import org.apache.stratos.cloud.controller.util.IaasProvider; +import org.apache.stratos.cloud.controller.validate.interfaces.PartitionValidator; import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.Template; import org.jclouds.compute.domain.TemplateBuilder; @@ -176,4 +177,28 @@ public class VCloudIaas extends Iaas { // TODO } + @Override + public boolean isValidRegion(IaasProvider iaasInfo, String region) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isValidZone(IaasProvider iaasInfo, String region, String zone) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isValidHost(IaasProvider iaasInfo, String zone, String host) { + // TODO Auto-generated method stub + return false; + } + + @Override + public PartitionValidator getPartitionValidator() { + // TODO Auto-generated method stub + return null; + } + }
