Prefer Regions to Zones in OpenStack APIs
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/744cd5d7 Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/744cd5d7 Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/744cd5d7 Branch: refs/heads/master Commit: 744cd5d7ebb5c2135ce1330ca0ee5c4ae48ff2cb Parents: 9009bb5 Author: Jeremy Daggett <[email protected]> Authored: Sat Jul 26 10:40:02 2014 -0700 Committer: Jeremy Daggett <[email protected]> Committed: Wed Aug 13 09:58:53 2014 -0700 ---------------------------------------------------------------------- .../jclouds/openstack/cinder/v1/CinderApi.java | 86 +++-- .../openstack/cinder/v1/CinderApiMetadata.java | 10 +- .../openstack/cinder/v1/features/QuotaApi.java | 27 +- .../cinder/v1/features/SnapshotApi.java | 34 +- .../openstack/cinder/v1/features/VolumeApi.java | 31 +- .../cinder/v1/features/VolumeTypeApi.java | 21 +- .../v1/predicates/SnapshotPredicates.java | 30 +- .../cinder/v1/predicates/VolumePredicates.java | 40 +-- .../cinder/v1/features/QuotasApiExpectTest.java | 8 +- .../cinder/v1/features/QuotasApiLiveTest.java | 13 +- .../v1/features/SnapshotApiExpectTest.java | 28 +- .../features/VolumeAndSnapshotApiLiveTest.java | 14 +- .../cinder/v1/features/VolumeApiExpectTest.java | 20 +- .../v1/features/VolumeTypeApiExpectTest.java | 6 +- .../v1/features/VolumeTypeApiLiveTest.java | 6 +- .../config/KeystoneAuthenticationModule.java | 7 +- .../v2_0/config/KeystoneHttpApiModule.java | 2 +- .../v2_0/config/KeystoneRestClientModule.java | 2 +- ...ceEqualsAnyNamespaceInExtensionsSetTest.java | 62 ++-- .../jclouds/openstack/nova/v2_0/NovaApi.java | 317 +++++++++++++++-- .../openstack/nova/v2_0/NovaApiMetadata.java | 4 +- .../nova/v2_0/compute/NovaComputeService.java | 58 ++-- .../v2_0/compute/NovaComputeServiceAdapter.java | 137 ++++---- .../config/NovaComputeServiceContextModule.java | 68 ++-- .../compute/extensions/NovaImageExtension.java | 28 +- .../extensions/NovaSecurityGroupExtension.java | 136 ++++---- .../AllocateAndAddFloatingIpToNode.java | 12 +- .../functions/CreateSecurityGroupIfNeeded.java | 30 +- .../functions/FlavorInRegionToHardware.java | 58 ++++ .../functions/FlavorInZoneToHardware.java | 58 ---- .../compute/functions/ImageInRegionToImage.java | 68 ++++ .../compute/functions/ImageInZoneToImage.java | 68 ---- ...ovaSecurityGroupInRegionToSecurityGroup.java | 73 ++++ .../NovaSecurityGroupInZoneToSecurityGroup.java | 73 ---- .../functions/OrphanedGroupsByRegionId.java | 73 ++++ .../functions/OrphanedGroupsByZoneId.java | 73 ---- .../RemoveFloatingIpFromNodeAndDeallocate.java | 12 +- .../SecurityGroupRuleToIpPermission.java | 34 +- .../functions/ServerInRegionToNodeMetadata.java | 207 +++++++++++ .../functions/ServerInZoneToNodeMetadata.java | 207 ----------- .../compute/loaders/CreateUniqueKeyPair.java | 18 +- .../loaders/FindSecurityGroupOrCreate.java | 52 +-- .../loaders/LoadFloatingIpsForInstance.java | 14 +- .../compute/options/NovaTemplateOptions.java | 18 +- .../predicates/AllNodesInGroupTerminated.java | 14 +- ...desWithGroupEncodedIntoNameThenAddToSet.java | 30 +- .../nova/v2_0/config/NovaHttpApiModule.java | 4 +- .../nova/v2_0/domain/HostAggregate.java | 42 ++- .../domain/regionscoped/AvailabilityZone.java | 69 ++++ .../domain/regionscoped/FlavorInRegion.java | 43 +++ .../v2_0/domain/regionscoped/ImageInRegion.java | 43 +++ .../v2_0/domain/regionscoped/RegionAndId.java | 83 +++++ .../v2_0/domain/regionscoped/RegionAndName.java | 110 ++++++ .../RegionSecurityGroupNameAndPorts.java | 59 ++++ .../regionscoped/SecurityGroupInRegion.java | 43 +++ .../domain/regionscoped/ServerInRegion.java | 43 +++ .../v2_0/domain/regionscoped/ZoneState.java | 57 ++++ .../domain/zonescoped/AvailabilityZone.java | 69 ---- .../v2_0/domain/zonescoped/FlavorInZone.java | 43 --- .../v2_0/domain/zonescoped/ImageInZone.java | 43 --- .../domain/zonescoped/SecurityGroupInZone.java | 43 --- .../v2_0/domain/zonescoped/ServerInZone.java | 43 --- .../nova/v2_0/domain/zonescoped/ZoneAndId.java | 83 ----- .../v2_0/domain/zonescoped/ZoneAndName.java | 110 ------ .../ZoneSecurityGroupNameAndPorts.java | 59 ---- .../nova/v2_0/domain/zonescoped/ZoneState.java | 57 ---- .../v2_0/extensions/AvailabilityZoneApi.java | 2 +- .../functions/internal/ParseFlavorDetails.java | 10 +- .../v2_0/functions/internal/ParseFlavors.java | 4 +- .../functions/internal/ParseImageDetails.java | 4 +- .../v2_0/functions/internal/ParseImages.java | 10 +- .../functions/internal/ParseServerDetails.java | 4 +- .../v2_0/functions/internal/ParseServers.java | 10 +- .../nova/v2_0/options/CreateServerOptions.java | 6 +- .../FindSecurityGroupWithNameAndReturnTrue.java | 20 +- .../nova/v2_0/predicates/ServerPredicates.java | 14 +- ...tKeyAndTenantIdAuthenticationExpectTest.java | 8 +- ...antNamePropertyAuthenticationExpectTest.java | 6 +- ...KeyAndSecretKeyAuthenticationExpectTest.java | 8 +- .../nova/v2_0/EndpointIdIsRandomExpectTest.java | 4 +- .../v2_0/PasswordAuthenticationExpectTest.java | 10 +- ...dAuthenticationWithTenantNameExpectTest.java | 8 +- .../NovaComputeServiceAdapterExpectTest.java | 28 +- .../compute/NovaComputeServiceExpectTest.java | 12 +- .../NovaImageExtensionExpectTest.java | 10 +- .../NovaSecurityGroupExtensionExpectTest.java | 34 +- ...llocateAndAddFloatingIpToNodeExpectTest.java | 6 +- .../functions/FlavorInRegionToHardwareTest.java | 88 +++++ .../functions/FlavorInZoneToHardwareTest.java | 88 ----- .../functions/ImageInRegionToImageTest.java | 93 +++++ .../functions/ImageInZoneToImageTest.java | 93 ----- ...ecurityGroupInRegionToSecurityGroupTest.java | 91 +++++ ...aSecurityGroupInZoneToSecurityGroupTest.java | 91 ----- .../NovaSecurityGroupToSecurityGroupTest.java | 24 +- .../functions/OrphanedGroupsByRegionIdTest.java | 91 +++++ .../functions/OrphanedGroupsByZoneIdTest.java | 91 ----- .../ServerInRegionToNodeMetadataTest.java | 341 +++++++++++++++++++ .../ServerInZoneToNodeMetadataTest.java | 341 ------------------- .../loaders/CreateUniqueKeyPairTest.java | 12 +- .../loaders/FindSecurityGroupOrCreateTest.java | 66 ++-- .../loaders/LoadFloatingIpsForInstanceTest.java | 15 +- .../extensions/AdminActionsApiExpectTest.java | 60 ++-- .../extensions/AdminActionsApiLiveTest.java | 18 +- .../AvailabilityZoneApiExpectTest.java | 5 +- .../AvailabilityZonesApiLiveTest.java | 4 +- .../v2_0/extensions/ConsolesApiLiveTest.java | 8 +- .../v2_0/extensions/ConsolesApiMockTest.java | 8 +- .../FlavorExtraSpecsApiExpectTest.java | 16 +- .../extensions/FlavorExtraSpecsApiLiveTest.java | 8 +- .../extensions/FloatingIPApiExpectTest.java | 24 +- .../v2_0/extensions/FloatingIPApiLiveTest.java | 16 +- .../HostAdministrationApiExpectTest.java | 40 +-- .../HostAdministrationApiLiveTest.java | 4 +- .../extensions/HostAggregateApiExpectTest.java | 22 +- .../extensions/HostAggregateApiLiveTest.java | 8 +- .../v2_0/extensions/KeyPairApiExpectTest.java | 16 +- .../v2_0/extensions/KeyPairApiLiveTest.java | 12 +- .../v2_0/extensions/QuotaApiExpectTest.java | 12 +- .../nova/v2_0/extensions/QuotaApiLiveTest.java | 4 +- .../extensions/SecurityGroupApiExpectTest.java | 22 +- .../extensions/SecurityGroupApiLiveTest.java | 12 +- .../ServerWithSecurityGroupsApiExpectTest.java | 4 +- .../ServerWithSecurityGroupsApiLiveTest.java | 12 +- .../SimpleTenantUsageApiExpectTest.java | 12 +- .../SimpleTenantUsageApiLiveTest.java | 4 +- .../VirtualInterfaceApiExpectTest.java | 4 +- .../extensions/VirtualInterfaceApiLiveTest.java | 11 +- .../v2_0/extensions/VolumeApiExpectTest.java | 64 ++-- .../nova/v2_0/extensions/VolumeApiLiveTest.java | 14 +- .../VolumeAttachmentApiExpectTest.java | 20 +- .../extensions/VolumeAttachmentApiLiveTest.java | 18 +- .../extensions/VolumeTypeApiExpectTest.java | 32 +- .../v2_0/extensions/VolumeTypeApiLiveTest.java | 6 +- .../v2_0/features/ExtensionApiExpectTest.java | 10 +- .../v2_0/features/ExtensionApiLiveTest.java | 12 +- .../nova/v2_0/features/FlavorApiExpectTest.java | 14 +- .../nova/v2_0/features/FlavorApiLiveTest.java | 18 +- .../nova/v2_0/features/ImageApiExpectTest.java | 32 +- .../nova/v2_0/features/ImageApiLiveTest.java | 12 +- .../nova/v2_0/features/ServerApiExpectTest.java | 66 ++-- .../nova/v2_0/features/ServerApiLiveTest.java | 44 +-- .../CreateSecurityGroupIfNeededTest.java | 34 +- ...ityGroupWithNameAndReturnTrueExpectTest.java | 20 +- .../v2_0/functions/InternalURLLiveTest.java | 8 +- .../nova/v2_0/internal/BaseNovaApiLiveTest.java | 40 +-- .../predicates/ServerPredicatesMockTest.java | 6 +- .../jclouds/openstack/trove/v1/TroveApi.java | 80 ++++- .../openstack/trove/v1/TroveApiMetadata.java | 8 +- .../trove/v1/features/DatabaseApi.java | 24 +- .../openstack/trove/v1/features/FlavorApi.java | 13 +- .../trove/v1/features/InstanceApi.java | 26 +- .../openstack/trove/v1/features/UserApi.java | 29 +- .../trove/v1/predicates/InstancePredicates.java | 36 +- .../openstack/trove/v1/utils/TroveUtils.java | 24 +- .../openstack/trove/v1/domain/FlavorTest.java | 10 +- .../openstack/trove/v1/domain/InstanceTest.java | 6 +- .../openstack/trove/v1/domain/UserTest.java | 6 +- .../v1/features/DatabaseApiExpectTest.java | 16 +- .../trove/v1/features/DatabaseApiLiveTest.java | 46 +-- .../trove/v1/features/FlavorApiExpectTest.java | 22 +- .../trove/v1/features/FlavorApiLiveTest.java | 24 +- .../v1/features/InstanceApiExpectTest.java | 26 +- .../trove/v1/features/InstanceApiLiveTest.java | 56 +-- .../trove/v1/features/UserApiExpectTest.java | 44 +-- .../trove/v1/features/UserApiLiveTest.java | 86 ++--- .../rackspace/clouddns/v1/CloudDNSApi.java | 24 +- .../v1/functions/RecordsToPagedIterable.java | 2 +- .../v1/features/RecordApiExpectTest.java | 24 +- .../clouddns/v1/features/RecordApiLiveTest.java | 36 +- .../v1/features/ReverseDNSApiExpectTest.java | 12 +- .../v1/features/ReverseDNSApiLiveTest.java | 20 +- .../v1/CloudLoadBalancersApi.java | 156 ++++++++- .../v1/CloudLoadBalancersApiMetadata.java | 6 +- .../v1/functions/ParseLoadBalancerUsages.java | 6 +- .../v1/functions/ParseLoadBalancers.java | 18 +- .../v1/functions/ParseNodes.java | 10 +- ...oadBalancersDestroyLoadBalancerStrategy.java | 2 +- ...alancersGetLoadBalancerMetadataStrategy.java | 2 +- ...dLoadBalancersListLoadBalancersStrategy.java | 12 +- ...udLoadBalancersLoadBalanceNodesStrategy.java | 2 +- .../v1/predicates/LoadBalancerPredicates.java | 36 +- .../v1/features/AccessRuleApiExpectTest.java | 24 +- .../v1/features/AccessRuleApiLiveTest.java | 66 ++-- .../v1/features/ConnectionApiExpectTest.java | 48 +-- .../v1/features/ConnectionApiLiveTest.java | 68 ++-- .../features/ContentCachingApiExpectTest.java | 24 +- .../v1/features/ContentCachingApiLiveTest.java | 44 +-- .../v1/features/ErrorPageApiExpectTest.java | 32 +- .../v1/features/ErrorPageApiLiveTest.java | 36 +- .../v1/features/HealthMonitorApiExpectTest.java | 30 +- .../v1/features/HealthMonitorApiLiveTest.java | 40 +-- .../v1/features/LoadBalancerApiExpectTest.java | 18 +- .../v1/features/LoadBalancerApiLiveTest.java | 82 ++--- .../v1/features/NodeApiExpectTest.java | 20 +- .../v1/features/NodeApiLiveTest.java | 64 ++-- .../v1/features/ReportApiExpectTest.java | 74 ++-- .../v1/features/ReportApiLiveTest.java | 38 +-- .../features/SSLTerminationApiExpectTest.java | 20 +- .../v1/features/SSLTerminationApiLiveTest.java | 40 +-- .../SessionPersistenceApiExpectTest.java | 26 +- .../features/SessionPersistenceApiLiveTest.java | 40 +-- .../v1/features/VirtualIPApiExpectTest.java | 18 +- .../v1/features/VirtualIPApiLiveTest.java | 58 ++-- .../BaseCloudLoadBalancersApiLiveTest.java | 2 +- .../collect/internal/Arg0ToPagedIterable.java | 4 +- .../collect/internal/ArgsToPagedIterable.java | 6 +- .../java/org/jclouds/apis/BaseApiLiveTest.java | 22 +- ...dBlockStorageProviderMetadataExpectTest.java | 6 +- .../compute/HPCloudComputeProviderMetadata.java | 8 +- .../compute/HPCloudComputeServiceAdapter.java | 18 +- ...PCloudComputeProviderMetadataExpectTest.java | 8 +- .../uk/CloudBlockStorageUKProviderMetadata.java | 14 +- ...lockStorageUKProviderMetadataExpectTest.java | 8 +- .../us/CloudBlockStorageUSProviderMetadata.java | 22 +- ...lockStorageUSProviderMetadataExpectTest.java | 8 +- .../uk/CloudDatabasesUKProviderMetadata.java | 12 +- ...udDatabasesUKProviderMetadataExpectTest.java | 8 +- .../us/CloudDatabasesUSProviderMetadata.java | 20 +- ...udDatabasesUSProviderMetadataExpectTest.java | 8 +- .../CloudLoadBalancersUKProviderMetadata.java | 14 +- .../CloudLoadBalancersUSProviderMetadata.java | 22 +- .../uk/CloudServersUKProviderMetadata.java | 16 +- ...loudServersUKProviderMetadataExpectTest.java | 8 +- .../us/CloudServersUSProviderMetadata.java | 24 +- ...loudServersUSProviderMetadataExpectTest.java | 8 +- 225 files changed, 4360 insertions(+), 3878 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/CinderApi.java ---------------------------------------------------------------------- diff --git a/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/CinderApi.java b/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/CinderApi.java index 879496c..42b36da 100644 --- a/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/CinderApi.java +++ b/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/CinderApi.java @@ -18,65 +18,113 @@ package org.jclouds.openstack.cinder.v1; import java.io.Closeable; import java.util.Set; + import org.jclouds.javax.annotation.Nullable; -import org.jclouds.location.Zone; -import org.jclouds.location.functions.ZoneToEndpoint; +import org.jclouds.location.Region; +import org.jclouds.location.functions.RegionToEndpoint; +import org.jclouds.openstack.cinder.v1.domain.Snapshot; +import org.jclouds.openstack.cinder.v1.domain.Volume; +import org.jclouds.openstack.cinder.v1.domain.VolumeType; import org.jclouds.openstack.cinder.v1.features.QuotaApi; import org.jclouds.openstack.cinder.v1.features.SnapshotApi; import org.jclouds.openstack.cinder.v1.features.VolumeApi; import org.jclouds.openstack.cinder.v1.features.VolumeTypeApi; import org.jclouds.openstack.v2_0.features.ExtensionApi; +import org.jclouds.openstack.v2_0.services.Extension; import org.jclouds.rest.annotations.Delegate; import org.jclouds.rest.annotations.EndpointParam; import com.google.inject.Provides; /** - * Provides synchronous access to Cinder. - * - * @see <a href="http://api.openstack.org/">API Doc</a> + * Provides synchronous access to OpenStack Block Storage (Cinder) v1 API. */ public interface CinderApi extends Closeable { + + /** + * @return the Region codes configured + */ + @Provides + @Region + Set<String> getConfiguredRegions(); + + /** + * Provides synchronous access to {@link Extension} features. + */ + @Delegate + ExtensionApi getExtensionApi(@EndpointParam(parser = RegionToEndpoint.class) @Nullable String region); + + /** + * Provides synchronous access to {@link Volume} features. + */ + @Delegate + VolumeApi getVolumeApi(@EndpointParam(parser = RegionToEndpoint.class) @Nullable String region); + + /** + * Provides synchronous access to {@link VolumeType} features. + */ + @Delegate + VolumeTypeApi getVolumeTypeApi(@EndpointParam(parser = RegionToEndpoint.class) @Nullable String region); + + /** + * Provides synchronous access to {@link Snapshot} features. + */ + @Delegate + SnapshotApi getSnapshotApi(@EndpointParam(parser = RegionToEndpoint.class) @Nullable String region); + + /** + * Provides synchronous access to quota features. + */ + @Delegate + QuotaApi getQuotaApi(@EndpointParam(parser = RegionToEndpoint.class) @Nullable String region); + /** * @return the Zone codes configured + * @deprecated Please use {@link #getConfiguredRegions()} as this method will be removed in jclouds 3.0. */ + @Deprecated @Provides - @Zone + @Region Set<String> getConfiguredZones(); - + /** * Provides synchronous access to Extension features. + * @deprecated Please use {@link #getExtensionApi(String region)} as this method will be removed + * in jclouds 3.0. */ + @Deprecated @Delegate ExtensionApi getExtensionApiForZone( - @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone); + @EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone); /** * Provides synchronous access to Volume features. + * @deprecated Please use {@link #getVolumeApi(String region)} as this method will be removed + * in jclouds 3.0. */ + @Deprecated @Delegate VolumeApi getVolumeApiForZone( - @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone); + @EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone); /** * Provides synchronous access to VolumeType features. + * @deprecated Please use {@link #getVolumeTypeApi(String region)} as this method will be removed + * in jclouds 3.0. */ + @Deprecated @Delegate VolumeTypeApi getVolumeTypeApiForZone( - @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone); - + @EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone); + /** * Provides synchronous access to Snapshot features. + * @deprecated Please use {@link #getSnapshotApi(String)} as this method will be removed + * in jclouds 3.0. */ + @Deprecated @Delegate SnapshotApi getSnapshotApiForZone( - @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone); - - /** - * Provides synchronous access to quotas features. - */ - @Delegate - QuotaApi getQuotaApi( - @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone); + @EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/CinderApiMetadata.java ---------------------------------------------------------------------- diff --git a/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/CinderApiMetadata.java b/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/CinderApiMetadata.java index 1b497c5..e532f37 100644 --- a/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/CinderApiMetadata.java +++ b/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/CinderApiMetadata.java @@ -27,7 +27,7 @@ import org.jclouds.openstack.cinder.v1.config.CinderParserModule; import org.jclouds.openstack.keystone.v2_0.config.AuthenticationApiModule; import org.jclouds.openstack.keystone.v2_0.config.CredentialTypes; import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule; -import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule.ZoneModule; +import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule.RegionModule; import org.jclouds.openstack.v2_0.ServiceType; import org.jclouds.rest.internal.BaseHttpApiMetadata; @@ -35,10 +35,10 @@ import com.google.common.collect.ImmutableSet; import com.google.inject.Module; /** - * Implementation of {@link ApiMetadata} for Cinder v1 API + * Implementation of {@link org.jclouds.apis.ApiMetadata} for Cinder v1 API */ public class CinderApiMetadata extends BaseHttpApiMetadata<CinderApi> { - + @Override public Builder toBuilder() { return new Builder().fromApiMetadata(this); @@ -74,12 +74,12 @@ public class CinderApiMetadata extends BaseHttpApiMetadata<CinderApi> { .defaultModules(ImmutableSet.<Class<? extends Module>>builder() .add(AuthenticationApiModule.class) .add(KeystoneAuthenticationModule.class) - .add(ZoneModule.class) + .add(RegionModule.class) .add(CinderParserModule.class) .add(CinderHttpApiModule.class) .build()); } - + @Override public CinderApiMetadata build() { return new CinderApiMetadata(this); http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/features/QuotaApi.java ---------------------------------------------------------------------- diff --git a/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/features/QuotaApi.java b/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/features/QuotaApi.java index 3ac8dd2..e8c39f9 100644 --- a/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/features/QuotaApi.java +++ b/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/features/QuotaApi.java @@ -16,7 +16,15 @@ */ package org.jclouds.openstack.cinder.v1.features; -import org.jclouds.Fallbacks; +import javax.inject.Named; +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.core.MediaType; + +import org.jclouds.Fallbacks.NullOnNotFoundOr404; +import org.jclouds.javax.annotation.Nullable; import org.jclouds.openstack.cinder.v1.domain.VolumeQuota; import org.jclouds.openstack.keystone.v2_0.filters.AuthenticateRequest; import org.jclouds.rest.annotations.Fallback; @@ -24,29 +32,22 @@ import org.jclouds.rest.annotations.RequestFilters; import org.jclouds.rest.annotations.SelectJson; import org.jclouds.rest.annotations.SkipEncoding; -import javax.ws.rs.Consumes; -import javax.ws.rs.GET; -import javax.ws.rs.Path; -import javax.ws.rs.PathParam; -import javax.ws.rs.core.MediaType; - /** - * Provides asynchronous access to Quota via their REST API. + * Provides access to the Quota API. * - * @see QuotaApi - * @see <a href="http://api.openstack.org/">API Doc</a> */ @SkipEncoding({'/', '='}) @RequestFilters(AuthenticateRequest.class) +@Consumes(MediaType.APPLICATION_JSON) @Path("/os-quota-sets") public interface QuotaApi { - + @Named("quota:get") @GET @SelectJson("quota_set") - @Consumes(MediaType.APPLICATION_JSON) @Path("/{tenant_id}") - @Fallback(Fallbacks.NullOnNotFoundOr404.class) + @Fallback(NullOnNotFoundOr404.class) + @Nullable VolumeQuota getByTenant(@PathParam("tenant_id") String tenantId); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/features/SnapshotApi.java ---------------------------------------------------------------------- diff --git a/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/features/SnapshotApi.java b/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/features/SnapshotApi.java index f7f7c97..14807f3 100644 --- a/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/features/SnapshotApi.java +++ b/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/features/SnapshotApi.java @@ -29,6 +29,7 @@ import javax.ws.rs.core.MediaType; import org.jclouds.Fallbacks.EmptyFluentIterableOnNotFoundOr404; import org.jclouds.Fallbacks.FalseOnNotFoundOr404; import org.jclouds.Fallbacks.NullOnNotFoundOr404; +import org.jclouds.javax.annotation.Nullable; import org.jclouds.openstack.cinder.v1.domain.Snapshot; import org.jclouds.openstack.cinder.v1.options.CreateSnapshotOptions; import org.jclouds.openstack.keystone.v2_0.filters.AuthenticateRequest; @@ -42,12 +43,13 @@ import org.jclouds.rest.annotations.SkipEncoding; import com.google.common.collect.FluentIterable; /** - * Provides synchronous access to Volume Snapshots via their REST API. - * - * @see <a href="http://api.openstack.org/">API Doc</a> + * Provides synchronous access to Volume Snapshots API. + * */ @SkipEncoding({'/', '='}) @RequestFilters(AuthenticateRequest.class) +@Consumes(MediaType.APPLICATION_JSON) +@Path("/snapshots") public interface SnapshotApi { /** * Returns a summary list of Snapshots. @@ -56,10 +58,8 @@ public interface SnapshotApi { */ @Named("snapshot:list") @GET - @Path("/snapshots") @SelectJson("snapshots") - @Consumes(MediaType.APPLICATION_JSON) - @Fallback(EmptyFluentIterableOnNotFoundOr404.class) + @Fallback(EmptyFluentIterableOnNotFoundOr404.class) FluentIterable<? extends Snapshot> list(); /** @@ -69,10 +69,9 @@ public interface SnapshotApi { */ @Named("snapshot:list") @GET - @Path("/snapshots/detail") + @Path("/detail") @SelectJson("snapshots") - @Consumes(MediaType.APPLICATION_JSON) - @Fallback(EmptyFluentIterableOnNotFoundOr404.class) + @Fallback(EmptyFluentIterableOnNotFoundOr404.class) FluentIterable<? extends Snapshot> listInDetail(); /** @@ -83,26 +82,24 @@ public interface SnapshotApi { */ @Named("snapshot:get") @GET - @Path("/snapshots/{id}") + @Path("/{id}") @SelectJson("snapshot") - @Consumes(MediaType.APPLICATION_JSON) - @Fallback(NullOnNotFoundOr404.class) + @Fallback(NullOnNotFoundOr404.class) + @Nullable Snapshot get(@PathParam("id") String snapshotId); /** * Creates a new Snapshot. The Volume status must be Available. - * + * * @param volumeId The Volume Id from which to create the Snapshot * @param options See CreateSnapshotOptions * @return The new Snapshot */ @Named("snapshot:create") @POST - @Path("/snapshots") @SelectJson("snapshot") - @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) - @MapBinder(CreateSnapshotOptions.class) + @MapBinder(CreateSnapshotOptions.class) Snapshot create(@PayloadParam("volume_id") String volumeId, CreateSnapshotOptions... options); /** @@ -113,8 +110,7 @@ public interface SnapshotApi { */ @Named("snapshot:delete") @DELETE - @Path("/snapshots/{id}") - @Consumes(MediaType.APPLICATION_JSON) - @Fallback(FalseOnNotFoundOr404.class) + @Path("/{id}") + @Fallback(FalseOnNotFoundOr404.class) boolean delete(@PathParam("id") String snapshotId); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/features/VolumeApi.java ---------------------------------------------------------------------- diff --git a/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/features/VolumeApi.java b/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/features/VolumeApi.java index 439422c..68000a7 100644 --- a/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/features/VolumeApi.java +++ b/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/features/VolumeApi.java @@ -29,6 +29,7 @@ import javax.ws.rs.core.MediaType; import org.jclouds.Fallbacks.EmptyFluentIterableOnNotFoundOr404; import org.jclouds.Fallbacks.FalseOnNotFoundOr404; import org.jclouds.Fallbacks.NullOnNotFoundOr404; +import org.jclouds.javax.annotation.Nullable; import org.jclouds.openstack.cinder.v1.domain.Volume; import org.jclouds.openstack.cinder.v1.options.CreateVolumeOptions; import org.jclouds.openstack.keystone.v2_0.filters.AuthenticateRequest; @@ -42,16 +43,16 @@ import org.jclouds.rest.annotations.SkipEncoding; import com.google.common.collect.FluentIterable; /** - * Provides synchronous access to Volumes. - * + * Provides synchronous access to the Volume API. + * * This API strictly handles creating and managing Volumes. To attach a Volume to a Server you need to use the * @see VolumeAttachmentApi - * - * @see VolumeAsyncApi - * @see <a href="http://api.openstack.org/">API Doc</a> + * */ @SkipEncoding({'/', '='}) @RequestFilters(AuthenticateRequest.class) +@Consumes(MediaType.APPLICATION_JSON) +@Path("/volumes") public interface VolumeApi { /** * Returns a summary list of Volumes. @@ -60,9 +61,7 @@ public interface VolumeApi { */ @Named("volume:list") @GET - @Path("/volumes") @SelectJson("volumes") - @Consumes(MediaType.APPLICATION_JSON) @Fallback(EmptyFluentIterableOnNotFoundOr404.class) FluentIterable<? extends Volume> list(); @@ -73,10 +72,9 @@ public interface VolumeApi { */ @Named("volume:list") @GET - @Path("/volumes/detail") + @Path("/detail") @SelectJson("volumes") - @Consumes(MediaType.APPLICATION_JSON) - @Fallback(EmptyFluentIterableOnNotFoundOr404.class) + @Fallback(EmptyFluentIterableOnNotFoundOr404.class) FluentIterable<? extends Volume> listInDetail(); /** @@ -87,24 +85,22 @@ public interface VolumeApi { */ @Named("volume:get") @GET - @Path("/volumes/{id}") + @Path("/{id}") @SelectJson("volume") - @Consumes(MediaType.APPLICATION_JSON) - @Fallback(NullOnNotFoundOr404.class) + @Fallback(NullOnNotFoundOr404.class) + @Nullable Volume get(@PathParam("id") String volumeId); /** * Creates a new Volume - * + * * @param volumeId Id of the Volume * @param options See CreateVolumeOptions * @return The new Volume */ @Named("volume:create") @POST - @Path("/volumes") @SelectJson("volume") - @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) @MapBinder(CreateVolumeOptions.class) Volume create(@PayloadParam("size") int sizeGB, CreateVolumeOptions... options); @@ -117,8 +113,7 @@ public interface VolumeApi { */ @Named("volume:delete") @DELETE - @Path("/volumes/{id}") - @Consumes(MediaType.APPLICATION_JSON) + @Path("/{id}") @Fallback(FalseOnNotFoundOr404.class) boolean delete(@PathParam("id") String volumeId); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/features/VolumeTypeApi.java ---------------------------------------------------------------------- diff --git a/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/features/VolumeTypeApi.java b/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/features/VolumeTypeApi.java index 8eb3883..9c5072e 100644 --- a/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/features/VolumeTypeApi.java +++ b/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/features/VolumeTypeApi.java @@ -25,6 +25,7 @@ import javax.ws.rs.core.MediaType; import org.jclouds.Fallbacks.EmptyFluentIterableOnNotFoundOr404; import org.jclouds.Fallbacks.NullOnNotFoundOr404; +import org.jclouds.javax.annotation.Nullable; import org.jclouds.openstack.cinder.v1.domain.VolumeType; import org.jclouds.openstack.keystone.v2_0.filters.AuthenticateRequest; import org.jclouds.rest.annotations.Fallback; @@ -35,24 +36,22 @@ import org.jclouds.rest.annotations.SkipEncoding; import com.google.common.collect.FluentIterable; /** - * Provides synchronous access to Volumes via their REST API. - * - * @see VolumeAsyncApi - * @see <a href="http://api.openstack.org/">API Doc</a> + * Provides synchronous access to the OpenStack Block Storage (Cinder) v1 Volume Types API. + * */ @SkipEncoding({'/', '='}) @RequestFilters(AuthenticateRequest.class) +@Consumes(MediaType.APPLICATION_JSON) +@Path("/types") public interface VolumeTypeApi { /** * Returns a summary list of VolumeTypes. * * @return The list of VolumeTypes */ - @Named("volumetype:list") + @Named("volumeType:list") @GET - @Path("/types") @SelectJson("volume_types") - @Consumes(MediaType.APPLICATION_JSON) @Fallback(EmptyFluentIterableOnNotFoundOr404.class) FluentIterable<? extends VolumeType> list(); @@ -62,11 +61,11 @@ public interface VolumeTypeApi { * @param volumeTypeId Id of the VolumeType * @return Details of a specific VolumeType */ - @Named("volumetype:get") + @Named("volumeType:get") @GET - @Path("/types/{id}") + @Path("/{id}") @SelectJson("volume_type") - @Consumes(MediaType.APPLICATION_JSON) - @Fallback(NullOnNotFoundOr404.class) + @Fallback(NullOnNotFoundOr404.class) + @Nullable VolumeType get(@PathParam("id") String volumeTypeId); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/predicates/SnapshotPredicates.java ---------------------------------------------------------------------- diff --git a/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/predicates/SnapshotPredicates.java b/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/predicates/SnapshotPredicates.java index a79fe79..a441957 100644 --- a/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/predicates/SnapshotPredicates.java +++ b/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/predicates/SnapshotPredicates.java @@ -37,21 +37,21 @@ import com.google.common.base.Predicate; * Snapshot snapshot = snapshotApi.create(volumeId); * RetryablePredicate<String> awaitAvailable = RetryablePredicate.create( * SnapshotPredicates.available(snapshotApi), 600, 10, 10, TimeUnit.SECONDS); - * + * * if (!awaitAvailable.apply(snapshot.getId())) { - * throw new TimeoutException("Timeout on snapshot: " + snapshot); - * } + * throw new TimeoutException("Timeout on snapshot: " + snapshot); + * } * } * </pre> - * + * * You can also use the static convenience methods as so. - * + * * <pre> * {@code * Snapshot snapshot = snapshotApi.create(volumeId); - * + * * if (!SnapshotPredicates.awaitAvailable(snapshotApi).apply(snapshot.getId())) { - * throw new TimeoutException("Timeout on snapshot: " + snapshot); + * throw new TimeoutException("Timeout on snapshot: " + snapshot); * } * } * </pre> @@ -59,20 +59,20 @@ import com.google.common.base.Predicate; public class SnapshotPredicates { /** * Wait until a Snapshot is Available. - * - * @param snapshotApi The SnapshotApi in the zone where your Snapshot resides. + * + * @param snapshotApi The SnapshotApi in the region where your Snapshot resides. * @return RetryablePredicate That will check the status every 5 seconds for a maxiumum of 20 minutes. */ public static Predicate<Snapshot> awaitAvailable(SnapshotApi snapshotApi) { StatusUpdatedPredicate statusPredicate = new StatusUpdatedPredicate(snapshotApi, Volume.Status.AVAILABLE); return retry(statusPredicate, 1200, 5, 5, SECONDS); } - + /** * Wait until a Snapshot no longer exists. - * - * @param snapshotApi The SnapshotApi in the zone where your Snapshot resides. - * @return RetryablePredicate That will check the whether the Snapshot exists + * + * @param snapshotApi The SnapshotApi in the region where your Snapshot resides. + * @return RetryablePredicate That will check the whether the Snapshot exists * every 5 seconds for a maxiumum of 20 minutes. */ public static Predicate<Snapshot> awaitDeleted(SnapshotApi snapshotApi) { @@ -85,7 +85,7 @@ public class SnapshotPredicates { StatusUpdatedPredicate statusPredicate = new StatusUpdatedPredicate(snapshotApi, status); return retry(statusPredicate, maxWaitInSec, periodInSec, periodInSec, SECONDS); } - + private static class StatusUpdatedPredicate implements Predicate<Snapshot> { private SnapshotApi snapshotApi; private Status status; @@ -108,7 +108,7 @@ public class SnapshotPredicates { else { Snapshot snapshotUpdated = snapshotApi.get(snapshot.getId()); checkNotNull(snapshotUpdated, "Snapshot %s not found.", snapshot.getId()); - + return status.equals(snapshotUpdated.getStatus()); } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/predicates/VolumePredicates.java ---------------------------------------------------------------------- diff --git a/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/predicates/VolumePredicates.java b/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/predicates/VolumePredicates.java index cc3f2c2..6e26425 100644 --- a/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/predicates/VolumePredicates.java +++ b/apis/openstack-cinder/src/main/java/org/jclouds/openstack/cinder/v1/predicates/VolumePredicates.java @@ -34,24 +34,24 @@ import com.google.common.base.Predicate; * <pre> * {@code * Volume volume = volumeApi.create(100); - * + * * RetryablePredicate<String> awaitAvailable = RetryablePredicate.create( * VolumePredicates.available(volumeApi), 600, 10, 10, TimeUnit.SECONDS); - * + * * if (!awaitAvailable.apply(volume.getId())) { - * throw new TimeoutException("Timeout on volume: " + volume); - * } + * throw new TimeoutException("Timeout on volume: " + volume); + * } * } * </pre> - * + * * You can also use the static convenience methods as so. - * + * * <pre> * {@code * Volume volume = volumeApi.create(100); - * + * * if (!VolumePredicates.awaitAvailable(volumeApi).apply(volume.getId())) { - * throw new TimeoutException("Timeout on volume: " + volume); + * throw new TimeoutException("Timeout on volume: " + volume); * } * } * </pre> @@ -59,19 +59,19 @@ import com.google.common.base.Predicate; public class VolumePredicates { /** * Wait until a Volume is Available. - * - * @param volumeApi The VolumeApi in the zone where your Volume resides. + * + * @param volumeApi The VolumeApi in the region where your Volume resides. * @return RetryablePredicate That will check the status every 5 seconds for a maxiumum of 10 minutes. */ public static Predicate<Volume> awaitAvailable(VolumeApi volumeApi) { StatusUpdatedPredicate statusPredicate = new StatusUpdatedPredicate(volumeApi, Volume.Status.AVAILABLE); return retry(statusPredicate, 600, 5, 5, SECONDS); } - + /** * Wait until a Volume is In Use. - * - * @param volumeApi The VolumeApi in the zone where your Volume resides. + * + * @param volumeApi The VolumeApi in the region where your Volume resides. * @return RetryablePredicate That will check the status every 5 seconds for a maxiumum of 10 minutes. */ public static Predicate<Volume> awaitInUse(VolumeApi volumeApi) { @@ -81,22 +81,22 @@ public class VolumePredicates { /** * Wait until a Volume no longer exists. - * - * @param volumeApi The VolumeApi in the zone where your Volume resides. - * @return RetryablePredicate That will check the whether the Volume exists + * + * @param volumeApi The VolumeApi in the region where your Volume resides. + * @return RetryablePredicate That will check the whether the Volume exists * every 5 seconds for a maxiumum of 10 minutes. */ public static Predicate<Volume> awaitDeleted(VolumeApi volumeApi) { DeletedPredicate deletedPredicate = new DeletedPredicate(volumeApi); return retry(deletedPredicate, 600, 5, 5, SECONDS); } - + public static Predicate<Volume> awaitStatus( VolumeApi volumeApi, Volume.Status status, long maxWaitInSec, long periodInSec) { StatusUpdatedPredicate statusPredicate = new StatusUpdatedPredicate(volumeApi, status); return retry(statusPredicate, maxWaitInSec, periodInSec, periodInSec, SECONDS); } - + private static class StatusUpdatedPredicate implements Predicate<Volume> { private VolumeApi volumeApi; private Status status; @@ -112,14 +112,14 @@ public class VolumePredicates { @Override public boolean apply(Volume volume) { checkNotNull(volume, "volume must be defined"); - + if (status.equals(volume.getStatus())) { return true; } else { Volume volumeUpdated = volumeApi.get(volume.getId()); checkNotNull(volumeUpdated, "Volume %s not found.", volume.getId()); - + return status.equals(volumeUpdated.getStatus()); } } http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/QuotasApiExpectTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/QuotasApiExpectTest.java b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/QuotasApiExpectTest.java index 74ac6b9..e5dc3f9 100644 --- a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/QuotasApiExpectTest.java +++ b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/QuotasApiExpectTest.java @@ -16,15 +16,15 @@ */ package org.jclouds.openstack.cinder.v1.features; +import static org.testng.Assert.assertEquals; + +import java.net.URI; + import org.jclouds.http.HttpResponse; import org.jclouds.openstack.cinder.v1.domain.VolumeQuota; import org.jclouds.openstack.cinder.v1.internal.BaseCinderApiExpectTest; import org.testng.annotations.Test; -import java.net.URI; - -import static org.testng.Assert.assertEquals; - @Test(groups = "unit", testName = "QuotaApiExpectTest") public class QuotasApiExpectTest extends BaseCinderApiExpectTest { http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/QuotasApiLiveTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/QuotasApiLiveTest.java b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/QuotasApiLiveTest.java index 9fea6cb..91ab647 100644 --- a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/QuotasApiLiveTest.java +++ b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/QuotasApiLiveTest.java @@ -16,15 +16,16 @@ */ package org.jclouds.openstack.cinder.v1.features; -import com.google.common.collect.Iterables; +import static org.testng.Assert.assertTrue; + +import java.util.concurrent.ExecutionException; + import org.jclouds.openstack.cinder.v1.domain.VolumeQuota; import org.jclouds.openstack.cinder.v1.internal.BaseCinderApiLiveTest; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; -import java.util.concurrent.ExecutionException; - -import static org.testng.Assert.assertTrue; +import com.google.common.collect.Iterables; @Test(groups = "live", testName = "QuotasApiLiveTest", singleThreaded = true) public class QuotasApiLiveTest extends BaseCinderApiLiveTest { @@ -39,8 +40,8 @@ public class QuotasApiLiveTest extends BaseCinderApiLiveTest { @BeforeClass(groups = {"integration", "live"}) public void setupContext() { super.setup(); - String zone = Iterables.getFirst(api.getConfiguredZones(), "nova"); - quotaApi = api.getQuotaApi(zone); + String region = Iterables.getFirst(api.getConfiguredRegions(), "nova"); + quotaApi = api.getQuotaApi(region); } public void testGetStorageQuotas() throws ExecutionException, InterruptedException { http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/SnapshotApiExpectTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/SnapshotApiExpectTest.java b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/SnapshotApiExpectTest.java index 9ab2e33..cda5ce8 100644 --- a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/SnapshotApiExpectTest.java +++ b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/SnapshotApiExpectTest.java @@ -56,7 +56,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest { responseWithKeystoneAccess, authenticatedGET().endpoint(endpoint).build(), HttpResponse.builder().statusCode(200).payload(payloadFromResource("/snapshot_list_simple.json")).build() - ).getSnapshotApiForZone("RegionOne"); + ).getSnapshotApi("RegionOne"); Set<? extends Snapshot> snapshots = api.list().toSet(); assertEquals(snapshots, ImmutableSet.of(testSnapshot())); @@ -69,7 +69,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest { responseWithKeystoneAccess, authenticatedGET().endpoint(endpoint).build(), HttpResponse.builder().statusCode(404).build() - ).getSnapshotApiForZone("RegionOne"); + ).getSnapshotApi("RegionOne"); Set<? extends Snapshot> snapshots = api.list().toSet(); assertTrue(snapshots.isEmpty()); @@ -82,7 +82,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest { responseWithKeystoneAccess, authenticatedGET().endpoint(endpoint).build(), HttpResponse.builder().statusCode(200).payload(payloadFromResource("/snapshot_list_details.json")).build() - ).getSnapshotApiForZone("RegionOne"); + ).getSnapshotApi("RegionOne"); Set<? extends Snapshot> snapshots = api.listInDetail().toSet(); assertEquals(snapshots, ImmutableSet.of(testSnapshot())); @@ -104,7 +104,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest { responseWithKeystoneAccess, authenticatedGET().endpoint(endpoint).build(), HttpResponse.builder().statusCode(404).build() - ).getSnapshotApiForZone("RegionOne"); + ).getSnapshotApi("RegionOne"); Set<? extends Snapshot> snapshots = api.listInDetail().toSet(); assertTrue(snapshots.isEmpty()); @@ -117,7 +117,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest { responseWithKeystoneAccess, authenticatedGET().endpoint(endpoint).build(), HttpResponse.builder().statusCode(200).payload(payloadFromResource("/snapshot_get.json")).build() - ).getSnapshotApiForZone("RegionOne"); + ).getSnapshotApi("RegionOne"); Snapshot snapshot = api.get("67d03df1-ce5d-4ba7-adbe-492ceb80170b"); assertEquals(snapshot, testSnapshot()); @@ -130,7 +130,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest { responseWithKeystoneAccess, authenticatedGET().endpoint(endpoint).build(), HttpResponse.builder().statusCode(404).build() - ).getSnapshotApiForZone("RegionOne"); + ).getSnapshotApi("RegionOne"); assertNull(api.get("67d03df1-ce5d-4ba7-adbe-492ceb80170b")); } @@ -145,7 +145,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest { .payload(payloadFromResourceWithContentType("/snapshot_create.json", MediaType.APPLICATION_JSON)) .build(), HttpResponse.builder().statusCode(200).payload(payloadFromResource("/snapshot_create_response.json")).build() - ).getSnapshotApiForZone("RegionOne"); + ).getSnapshotApi("RegionOne"); CreateSnapshotOptions options = CreateSnapshotOptions.Builder .name("jclouds-test-snapshot") @@ -167,7 +167,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest { .payload(payloadFromResourceWithContentType("/snapshot_create.json", MediaType.APPLICATION_JSON)) .build(), HttpResponse.builder().statusCode(404).build() - ).getSnapshotApiForZone("RegionOne"); + ).getSnapshotApi("RegionOne"); CreateSnapshotOptions options = CreateSnapshotOptions.Builder .name("jclouds-test-snapshot") @@ -193,7 +193,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest { .wrap("{\"badRequest\": {\"message\": \"Invalid volume: must be available\", \"code\": 400}}" .getBytes()))) .build() - ).getSnapshotApiForZone("RegionOne"); + ).getSnapshotApi("RegionOne"); CreateSnapshotOptions options = CreateSnapshotOptions.Builder .name("jclouds-test-snapshot") @@ -214,7 +214,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest { .payload(payloadFromResourceWithContentType("/snapshot_create.json", MediaType.APPLICATION_JSON)) .build(), HttpResponse.builder().statusCode(401).build() - ).getSnapshotApiForZone("RegionOne"); + ).getSnapshotApi("RegionOne"); CreateSnapshotOptions options = CreateSnapshotOptions.Builder .name("jclouds-test-snapshot") @@ -231,7 +231,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest { responseWithKeystoneAccess, authenticatedGET().endpoint(endpoint).method("DELETE").build(), HttpResponse.builder().statusCode(200).build() - ).getSnapshotApiForZone("RegionOne"); + ).getSnapshotApi("RegionOne"); assertTrue(api.delete("67d03df1-ce5d-4ba7-adbe-492ceb80170b")); } @@ -244,7 +244,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest { responseWithKeystoneAccess, authenticatedGET().endpoint(endpoint).method("DELETE").build(), HttpResponse.builder().statusCode(401).build() - ).getSnapshotApiForZone("RegionOne"); + ).getSnapshotApi("RegionOne"); api.delete("67d03df1-ce5d-4ba7-adbe-492ceb80170b"); } @@ -256,7 +256,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest { responseWithKeystoneAccess, authenticatedGET().endpoint(endpoint).method("DELETE").build(), HttpResponse.builder().statusCode(404).build() - ).getSnapshotApiForZone("RegionOne"); + ).getSnapshotApi("RegionOne"); assertFalse(api.delete("67d03df1-ce5d-4ba7-adbe-492ceb80170b")); } @@ -274,7 +274,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest { .wrap("{\"badRequest\": {\"message\": \"Invalid volume: Volume Snapshot status must be available or error\", \"code\": 400}}" .getBytes()))) .build() - ).getSnapshotApiForZone("RegionOne"); + ).getSnapshotApi("RegionOne"); api.delete("67d03df1-ce5d-4ba7-adbe-492ceb80170b"); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeAndSnapshotApiLiveTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeAndSnapshotApiLiveTest.java b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeAndSnapshotApiLiveTest.java index 050253b..8e2dbe0 100644 --- a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeAndSnapshotApiLiveTest.java +++ b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeAndSnapshotApiLiveTest.java @@ -42,12 +42,12 @@ import com.google.common.collect.Iterables; @Test(groups = "live", testName = "VolumeApiLiveTest", singleThreaded = true) public class VolumeAndSnapshotApiLiveTest extends BaseCinderApiLiveTest { private static final String name = System.getProperty("user.name").replace('.', '-').toLowerCase(); - - private String zone; + + private String region; private VolumeApi volumeApi; private SnapshotApi snapshotApi; - + private Volume testVolume; private Snapshot testSnapshot; @@ -55,9 +55,9 @@ public class VolumeAndSnapshotApiLiveTest extends BaseCinderApiLiveTest { @Override public void setup() { super.setup(); - zone = Iterables.getLast(api.getConfiguredZones(), "nova"); - volumeApi = api.getVolumeApiForZone(zone); - snapshotApi = api.getSnapshotApiForZone(zone); + region = Iterables.getLast(api.getConfiguredRegions(), "nova"); + volumeApi = api.getVolumeApi(region); + snapshotApi = api.getSnapshotApi(region); } @AfterClass(groups = { "integration", "live" }) @@ -81,7 +81,7 @@ public class VolumeAndSnapshotApiLiveTest extends BaseCinderApiLiveTest { .name(name) .description("description of test volume"); testVolume = volumeApi.create(100, options); - + assertTrue(VolumePredicates.awaitAvailable(volumeApi).apply(testVolume)); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeApiExpectTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeApiExpectTest.java b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeApiExpectTest.java index 336d09b..0372dd5 100644 --- a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeApiExpectTest.java +++ b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeApiExpectTest.java @@ -53,7 +53,7 @@ public class VolumeApiExpectTest extends BaseCinderApiExpectTest { responseWithKeystoneAccess, authenticatedGET().endpoint(endpoint).build(), HttpResponse.builder().statusCode(200).payload(payloadFromResource("/volume_list_simple.json")).build() - ).getVolumeApiForZone("RegionOne"); + ).getVolumeApi("RegionOne"); Set<? extends Volume> volumes = api.list().toSet(); assertEquals(volumes, ImmutableSet.of(testVolume())); @@ -66,7 +66,7 @@ public class VolumeApiExpectTest extends BaseCinderApiExpectTest { responseWithKeystoneAccess, authenticatedGET().endpoint(endpoint).build(), HttpResponse.builder().statusCode(404).build() - ).getVolumeApiForZone("RegionOne"); + ).getVolumeApi("RegionOne"); Set<? extends Volume> volumes = api.list().toSet(); assertTrue(volumes.isEmpty()); @@ -79,7 +79,7 @@ public class VolumeApiExpectTest extends BaseCinderApiExpectTest { responseWithKeystoneAccess, authenticatedGET().endpoint(endpoint).build(), HttpResponse.builder().statusCode(200).payload(payloadFromResource("/volume_list_details.json")).build() - ).getVolumeApiForZone("RegionOne"); + ).getVolumeApi("RegionOne"); Set<? extends Volume> volumes = api.listInDetail().toSet(); assertEquals(volumes, ImmutableSet.of(testVolume())); @@ -92,7 +92,7 @@ public class VolumeApiExpectTest extends BaseCinderApiExpectTest { responseWithKeystoneAccess, authenticatedGET().endpoint(endpoint).build(), HttpResponse.builder().statusCode(404).build() - ).getVolumeApiForZone("RegionOne"); + ).getVolumeApi("RegionOne"); Set<? extends Volume> volumes = api.listInDetail().toSet(); assertTrue(volumes.isEmpty()); @@ -108,7 +108,7 @@ public class VolumeApiExpectTest extends BaseCinderApiExpectTest { .payload(payloadFromResourceWithContentType("/volume_create.json", MediaType.APPLICATION_JSON)) .build(), HttpResponse.builder().statusCode(200).payload(payloadFromResource("/volume_create_response.json")).build() - ).getVolumeApiForZone("RegionOne"); + ).getVolumeApi("RegionOne"); CreateVolumeOptions options = CreateVolumeOptions.Builder .name("jclouds-test-volume") @@ -129,7 +129,7 @@ public class VolumeApiExpectTest extends BaseCinderApiExpectTest { .payload(payloadFromResourceWithContentType("/volume_create.json", MediaType.APPLICATION_JSON)) .build(), HttpResponse.builder().statusCode(404).payload(payloadFromResource("/volume_create_response.json")).build() - ).getVolumeApiForZone("RegionOne"); + ).getVolumeApi("RegionOne"); CreateVolumeOptions options = CreateVolumeOptions.Builder .name("jclouds-test-volume") @@ -144,7 +144,7 @@ public class VolumeApiExpectTest extends BaseCinderApiExpectTest { responseWithKeystoneAccess, authenticatedGET().endpoint(endpoint).build(), HttpResponse.builder().statusCode(200).payload(payloadFromResource("/volume_get.json")).build() - ).getVolumeApiForZone("RegionOne"); + ).getVolumeApi("RegionOne"); Volume volume = api.get("60761c60-0f56-4499-b522-ff13e120af10"); assertEquals(volume, testVolume()); @@ -163,7 +163,7 @@ public class VolumeApiExpectTest extends BaseCinderApiExpectTest { responseWithKeystoneAccess, authenticatedGET().endpoint(endpoint).build(), HttpResponse.builder().statusCode(404).build() - ).getVolumeApiForZone("RegionOne"); + ).getVolumeApi("RegionOne"); assertNull(api.get("60761c60-0f56-4499-b522-ff13e120af10")); } @@ -175,7 +175,7 @@ public class VolumeApiExpectTest extends BaseCinderApiExpectTest { responseWithKeystoneAccess, authenticatedGET().endpoint(endpoint).method("DELETE").build(), HttpResponse.builder().statusCode(202).build() - ).getVolumeApiForZone("RegionOne"); + ).getVolumeApi("RegionOne"); assertTrue(api.delete("60761c60-0f56-4499-b522-ff13e120af10")); } @@ -187,7 +187,7 @@ public class VolumeApiExpectTest extends BaseCinderApiExpectTest { responseWithKeystoneAccess, authenticatedGET().endpoint(endpoint).method("DELETE").build(), HttpResponse.builder().statusCode(404).build() - ).getVolumeApiForZone("RegionOne"); + ).getVolumeApi("RegionOne"); assertFalse(api.delete("60761c60-0f56-4499-b522-ff13e120af10")); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeTypeApiExpectTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeTypeApiExpectTest.java b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeTypeApiExpectTest.java index 29c4713..d8c8b92 100644 --- a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeTypeApiExpectTest.java +++ b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeTypeApiExpectTest.java @@ -46,7 +46,7 @@ public class VolumeTypeApiExpectTest extends BaseCinderApiExpectTest { responseWithKeystoneAccess, authenticatedGET().endpoint(endpoint).build(), HttpResponse.builder().statusCode(200).payload(payloadFromResource("/volume_type_list_simple.json")).build() - ).getVolumeTypeApiForZone("RegionOne"); + ).getVolumeTypeApi("RegionOne"); Set<? extends VolumeType> types = api.list().toSet(); assertEquals(types, ImmutableSet.of(testVolumeType())); @@ -59,7 +59,7 @@ public class VolumeTypeApiExpectTest extends BaseCinderApiExpectTest { responseWithKeystoneAccess, authenticatedGET().endpoint(endpoint).build(), HttpResponse.builder().statusCode(200).payload(payloadFromResource("/volume_type_get.json")).build() - ).getVolumeTypeApiForZone("RegionOne"); + ).getVolumeTypeApi("RegionOne"); VolumeType type = api.get("1"); assertEquals(type, testVolumeType()); @@ -72,7 +72,7 @@ public class VolumeTypeApiExpectTest extends BaseCinderApiExpectTest { responseWithKeystoneAccess, authenticatedGET().endpoint(endpoint).build(), HttpResponse.builder().statusCode(404).build() - ).getVolumeTypeApiForZone("RegionOne"); + ).getVolumeTypeApi("RegionOne"); assertNull(api.get("X")); } http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeTypeApiLiveTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeTypeApiLiveTest.java b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeTypeApiLiveTest.java index 6eb1e48..bbb18fc 100644 --- a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeTypeApiLiveTest.java +++ b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeTypeApiLiveTest.java @@ -34,14 +34,14 @@ import com.google.common.collect.Iterables; @Test(groups = "live", testName = "VolumeTypeApiLiveTest", singleThreaded = true) public class VolumeTypeApiLiveTest extends BaseCinderApiLiveTest { private VolumeTypeApi volumeTypeApi; - private String zone; + private String region; @BeforeGroups(groups = {"integration", "live"}) @Override public void setup() { super.setup(); - zone = Iterables.getLast(api.getConfiguredZones(), "nova"); - volumeTypeApi = api.getVolumeTypeApiForZone(zone); + region = Iterables.getLast(api.getConfiguredRegions(), "nova"); + volumeTypeApi = api.getVolumeTypeApi(region); } @AfterClass(groups = { "integration", "live" }) http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneAuthenticationModule.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneAuthenticationModule.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneAuthenticationModule.java index 70479c7..eaff908 100644 --- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneAuthenticationModule.java +++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneAuthenticationModule.java @@ -80,7 +80,7 @@ public class KeystoneAuthenticationModule extends AbstractModule { * <li>add the above annotation to any {@link AsyncApi} classes by placing it on the type. ex. * {@code @Endpoint(CloudDNS.class)}</li> * <li>add the following to your {@link org.jclouds.rest.config.RestClientModule}</li> - * + * * <pre> * bind(new TypeLiteral<Supplier<URI>>() { * }).annotatedWith(CloudDNS.class).to(new TypeLiteral<Supplier<URI>>() { @@ -148,6 +148,11 @@ public class KeystoneAuthenticationModule extends AbstractModule { } + /** + * @deprecated All OpenStack APIs rely on regions in jclouds 2.0 and this module will be removed + * in jclouds 3.0. + */ + @Deprecated public static class ZoneModule extends AbstractModule { @Override protected void configure() { http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneHttpApiModule.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneHttpApiModule.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneHttpApiModule.java index 62fde44..691d044 100644 --- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneHttpApiModule.java +++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneHttpApiModule.java @@ -106,7 +106,7 @@ public class KeystoneHttpApiModule extends HttpApiModule<KeystoneApi> { @Provides @Singleton - public LoadingCache<String, Set<? extends Extension>> provideExtensionsByZone(final javax.inject.Provider<KeystoneApi> keystoneApi) { + public LoadingCache<String, Set<? extends Extension>> provideExtensionsByRegion(final javax.inject.Provider<KeystoneApi> keystoneApi) { return CacheBuilder.newBuilder().expireAfterWrite(23, TimeUnit.HOURS) .build(CacheLoader.from(Suppliers.memoize(new Supplier<Set<? extends Extension>>() { @Override http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneRestClientModule.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneRestClientModule.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneRestClientModule.java index fe85de2..4824edf 100644 --- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneRestClientModule.java +++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneRestClientModule.java @@ -148,7 +148,7 @@ public class KeystoneRestClientModule<S extends KeystoneApi, A extends KeystoneA @Provides @Singleton - public LoadingCache<String, Set<? extends Extension>> provideExtensionsByZone(final javax.inject.Provider<KeystoneApi> keystoneApi) { + public LoadingCache<String, Set<? extends Extension>> provideExtensionsByRegion(final javax.inject.Provider<KeystoneApi> keystoneApi) { return CacheBuilder.newBuilder().expireAfterWrite(23, TimeUnit.HOURS) .build(CacheLoader.from(Suppliers.memoize(new Supplier<Set<? extends Extension>>() { @Override http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-keystone/src/test/java/org/jclouds/openstack/v2_0/functions/PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSetTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/v2_0/functions/PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSetTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/v2_0/functions/PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSetTest.java index 08160bb..624a0bd 100644 --- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/v2_0/functions/PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSetTest.java +++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/v2_0/functions/PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSetTest.java @@ -54,7 +54,7 @@ public class PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensio "Keypair Support").build(); @org.jclouds.openstack.v2_0.services.Extension(of = ServiceType.COMPUTE, namespace = "http://docs.openstack.org/ext/keypairs/api/v1.1") - interface KeyPairAsyncApi { + interface KeyPairApi { } @@ -64,50 +64,50 @@ public class PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensio "Floating IPs support").build(); @org.jclouds.openstack.v2_0.services.Extension(of = ServiceType.COMPUTE, namespace = "http://docs.openstack.org/ext/floating_ips/api/v1.1") - interface FloatingIPAsyncApi { + interface FloatingIPApi { } - interface NovaAsyncApi { + interface NovaApi { @Delegate - Optional<FloatingIPAsyncApi> getFloatingIPExtensionForZone(String zone); + Optional<FloatingIPApi> getFloatingIPExtensionApi(String region); @Delegate - Optional<KeyPairAsyncApi> getKeyPairExtensionForZone(String zone); + Optional<KeyPairApi> getKeyPairExtensionApi(String region); } InvocationSuccess getFloatingIPExtension(List<Object> args) throws SecurityException, NoSuchMethodException { return InvocationSuccess.create( - Invocation.create(method(NovaAsyncApi.class, "getFloatingIPExtensionForZone", String.class), args), "foo"); + Invocation.create(method(NovaApi.class, "getFloatingIPExtensionApi", String.class), args), "foo"); } InvocationSuccess getKeyPairExtension(List<Object> args) throws SecurityException, NoSuchMethodException { return InvocationSuccess.create( - Invocation.create(method(NovaAsyncApi.class, "getKeyPairExtensionForZone", String.class), args), "foo"); + Invocation.create(method(NovaApi.class, "getKeyPairExtensionApi", String.class), args), "foo"); } public void testPresentWhenExtensionsIncludeNamespaceFromAnnotationAbsentWhenNot() throws SecurityException, NoSuchMethodException { - assertEquals(whenExtensionsInZoneInclude("zone", keypairs, floatingIps).apply(getFloatingIPExtension(ImmutableList.<Object> of("zone"))), Optional.of("foo")); - assertEquals(whenExtensionsInZoneInclude("zone", keypairs, floatingIps).apply(getKeyPairExtension(ImmutableList.<Object> of("zone"))), Optional.of("foo")); - assertEquals(whenExtensionsInZoneInclude("zone", keypairs).apply(getFloatingIPExtension(ImmutableList.<Object> of("zone"))), Optional.absent()); - assertEquals(whenExtensionsInZoneInclude("zone", floatingIps).apply(getKeyPairExtension(ImmutableList.<Object> of("zone"))), Optional.absent()); + assertEquals(whenExtensionsInRegionInclude("region", keypairs, floatingIps).apply(getFloatingIPExtension(ImmutableList.<Object> of("region"))), Optional.of("foo")); + assertEquals(whenExtensionsInRegionInclude("region", keypairs, floatingIps).apply(getKeyPairExtension(ImmutableList.<Object> of("region"))), Optional.of("foo")); + assertEquals(whenExtensionsInRegionInclude("region", keypairs).apply(getFloatingIPExtension(ImmutableList.<Object> of("region"))), Optional.absent()); + assertEquals(whenExtensionsInRegionInclude("region", floatingIps).apply(getKeyPairExtension(ImmutableList.<Object> of("region"))), Optional.absent()); } - - public void testZoneWithoutExtensionsReturnsAbsent() throws SecurityException, NoSuchMethodException { - assertEquals(whenExtensionsInZoneInclude("zone", floatingIps).apply( - getFloatingIPExtension(ImmutableList.<Object> of("differentzone"))), Optional.absent()); - assertEquals(whenExtensionsInZoneInclude("zone", keypairs).apply( - getKeyPairExtension(ImmutableList.<Object> of("differentzone"))), Optional.absent()); + + public void testRegionWithoutExtensionsReturnsAbsent() throws SecurityException, NoSuchMethodException { + assertEquals(whenExtensionsInRegionInclude("region", floatingIps).apply( + getFloatingIPExtension(ImmutableList.<Object> of("differentregion"))), Optional.absent()); + assertEquals(whenExtensionsInRegionInclude("region", keypairs).apply( + getKeyPairExtension(ImmutableList.<Object> of("differentregion"))), Optional.absent()); } /** * It is possible that the /extensions call returned the correct extension, but that the * namespaces were different, for whatever reason. One way to address this is to have a multimap * of the authoritative namespace to alternate onces, which could be wired up with guice - * + * */ public void testPresentWhenAliasForExtensionMapsToNamespace() throws SecurityException, NoSuchMethodException { Extension keypairsWithDifferentNamespace = keypairs.toBuilder().namespace( @@ -116,22 +116,22 @@ public class PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensio Multimap<URI, URI> aliases = ImmutableMultimap.of(keypairs.getNamespace(), keypairsWithDifferentNamespace .getNamespace()); - assertEquals(whenExtensionsAndAliasesInZoneInclude("zone", ImmutableSet.of(keypairsWithDifferentNamespace), aliases).apply( - getKeyPairExtension(ImmutableList.<Object> of("zone"))), Optional.of("foo")); - assertEquals(whenExtensionsAndAliasesInZoneInclude("zone", ImmutableSet.of(keypairsWithDifferentNamespace), aliases).apply( - getFloatingIPExtension(ImmutableList.<Object> of("zone"))), Optional.absent()); + assertEquals(whenExtensionsAndAliasesInRegionInclude("region", ImmutableSet.of(keypairsWithDifferentNamespace), aliases).apply( + getKeyPairExtension(ImmutableList.<Object> of("region"))), Optional.of("foo")); + assertEquals(whenExtensionsAndAliasesInRegionInclude("region", ImmutableSet.of(keypairsWithDifferentNamespace), aliases).apply( + getFloatingIPExtension(ImmutableList.<Object> of("region"))), Optional.absent()); } - private PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSet whenExtensionsInZoneInclude( - String zone, Extension... extensions) { - return whenExtensionsAndAliasesInZoneInclude(zone, ImmutableSet.copyOf(extensions), ImmutableMultimap.<URI, URI> of()); + private PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSet whenExtensionsInRegionInclude( + String region, Extension... extensions) { + return whenExtensionsAndAliasesInRegionInclude(region, ImmutableSet.copyOf(extensions), ImmutableMultimap.<URI, URI> of()); } - private PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSet whenExtensionsAndAliasesInZoneInclude( - String zone, final Set<Extension> extensions, final Multimap<URI, URI> aliases) { - final LoadingCache<String, Set<? extends Extension>> extensionsForZone = CacheBuilder.newBuilder().build( - CacheLoader.from(Functions.forMap(ImmutableMap.<String, Set<? extends Extension>>of(zone, extensions, "differentzone", + private PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSet whenExtensionsAndAliasesInRegionInclude( + String region, final Set<Extension> extensions, final Multimap<URI, URI> aliases) { + final LoadingCache<String, Set<? extends Extension>> extensionsForRegion = CacheBuilder.newBuilder().build( + CacheLoader.from(Functions.forMap(ImmutableMap.<String, Set<? extends Extension>>of(region, extensions, "differentregion", ImmutableSet.<Extension> of())))); PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSet fn = Guice.createInjector( @@ -142,7 +142,7 @@ public class PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensio @Provides LoadingCache<String, Set<? extends Extension>> getExtensions() { - return extensionsForZone; + return extensionsForRegion; } @Provides @@ -150,7 +150,7 @@ public class PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensio return aliases; } }).getInstance(PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSet.class); - + return fn; } }
