mirror of https://github.com/apache/jclouds.git
aws related changes for issue 826
This commit is contained in:
parent
1756ff0358
commit
3e9c566edc
|
@ -18,6 +18,7 @@
|
|||
*/
|
||||
package org.jclouds.cloudwatch;
|
||||
|
||||
import static com.google.common.collect.Maps.transformValues;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -40,13 +41,17 @@ import org.jclouds.date.DateService;
|
|||
import org.jclouds.http.HttpRequest;
|
||||
import org.jclouds.http.RequiresHttp;
|
||||
import org.jclouds.http.functions.ParseSax;
|
||||
import org.jclouds.location.config.LocationModule;
|
||||
import org.jclouds.location.suppliers.RegionIdToURISupplier;
|
||||
import org.jclouds.rest.ConfiguresRestClient;
|
||||
import org.jclouds.rest.RestClientTest;
|
||||
import org.jclouds.rest.RestContextFactory;
|
||||
import org.jclouds.rest.RestContextSpec;
|
||||
import org.jclouds.rest.internal.RestAnnotationProcessor;
|
||||
import org.jclouds.util.Suppliers2;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.inject.Module;
|
||||
import com.google.inject.TypeLiteral;
|
||||
|
@ -91,22 +96,21 @@ public class CloudWatchAsyncClientTest extends RestClientTest<CloudWatchAsyncCli
|
|||
@RequiresHttp
|
||||
@ConfiguresRestClient
|
||||
private static final class TestMonitoringRestClientModule extends CloudWatchRestClientModule {
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
super.configure();
|
||||
}
|
||||
protected void installLocations() {
|
||||
install(new LocationModule());
|
||||
bind(RegionIdToURISupplier.class).toInstance(new RegionIdToURISupplier() {
|
||||
|
||||
protected void bindRegionsToProvider() {
|
||||
bindRegionsToProvider(Regions.class);
|
||||
}
|
||||
@Override
|
||||
public Map<String, Supplier<URI>> get() {
|
||||
return transformValues(ImmutableMap.<String, URI> of(Region.EU_WEST_1, URI
|
||||
.create("https://ec2.eu-west-1.amazonaws.com"), Region.US_EAST_1, URI
|
||||
.create("https://ec2.us-east-1.amazonaws.com"), Region.US_WEST_1, URI
|
||||
.create("https://ec2.us-west-1.amazonaws.com")), Suppliers2.<URI> ofInstanceFunction());
|
||||
}
|
||||
|
||||
static class Regions implements javax.inject.Provider<Map<String, URI>> {
|
||||
@Override
|
||||
public Map<String, URI> get() {
|
||||
return ImmutableMap.<String, URI> of(Region.EU_WEST_1, URI.create("https://ec2.eu-west-1.amazonaws.com"),
|
||||
Region.US_EAST_1, URI.create("https://ec2.us-east-1.amazonaws.com"), Region.US_WEST_1,
|
||||
URI.create("https://ec2.us-west-1.amazonaws.com"));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -20,14 +20,11 @@ package org.jclouds.ec2.compute.config;
|
|||
|
||||
import java.util.Set;
|
||||
|
||||
import org.jclouds.ec2.compute.suppliers.EC2HardwareSupplier;
|
||||
import org.jclouds.ec2.compute.suppliers.EC2ImageSupplier;
|
||||
import org.jclouds.compute.config.BindComputeSuppliersByClass;
|
||||
import org.jclouds.compute.domain.Hardware;
|
||||
import org.jclouds.compute.domain.Image;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.location.suppliers.OnlyLocationOrFirstRegionOptionallyMatchingRegionId;
|
||||
import org.jclouds.location.suppliers.ZoneToRegionToProviderOrJustProvider;
|
||||
import org.jclouds.ec2.compute.suppliers.EC2HardwareSupplier;
|
||||
import org.jclouds.ec2.compute.suppliers.EC2ImageSupplier;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
/**
|
||||
|
@ -43,14 +40,4 @@ public class EC2BindComputeSuppliersByClass extends BindComputeSuppliersByClass
|
|||
protected Class<? extends Supplier<Set<? extends Image>>> defineImageSupplier() {
|
||||
return EC2ImageSupplier.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Class<? extends Supplier<Location>> defineDefaultLocationSupplier() {
|
||||
return OnlyLocationOrFirstRegionOptionallyMatchingRegionId.class;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Class<? extends Supplier<Set<? extends Location>>> defineLocationSupplier() {
|
||||
return ZoneToRegionToProviderOrJustProvider.class;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -79,7 +79,8 @@ public class EC2ComputeServiceContextModule extends BaseComputeServiceContextMod
|
|||
}
|
||||
|
||||
@Override
|
||||
protected Supplier<Set<? extends Image>> supplyNonParsingImageCache(@Named(PROPERTY_SESSION_INTERVAL) long seconds,
|
||||
protected Supplier<Set<? extends Image>> supplyNonParsingImageCache(
|
||||
AtomicReference<AuthorizationException> authException, @Named(PROPERTY_SESSION_INTERVAL) long seconds,
|
||||
final Supplier<Set<? extends Image>> imageSupplier, Injector injector) {
|
||||
final Supplier<LoadingCache<RegionAndName, ? extends Image>> cache = injector.getInstance(Key.get(new TypeLiteral<Supplier<LoadingCache<RegionAndName, ? extends Image>>>() {}));
|
||||
return new Supplier<Set<? extends Image>>() {
|
||||
|
|
|
@ -49,6 +49,7 @@ import org.jclouds.logging.Logger;
|
|||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
/**
|
||||
|
@ -62,12 +63,12 @@ public class EC2ListNodesStrategy implements ListNodesStrategy {
|
|||
protected Logger logger = Logger.NULL;
|
||||
|
||||
protected final EC2AsyncClient client;
|
||||
protected final Set<String> regions;
|
||||
protected final Supplier<Set<String>> regions;
|
||||
protected final Function<RunningInstance, NodeMetadata> runningInstanceToNodeMetadata;
|
||||
protected final ExecutorService executor;
|
||||
|
||||
@Inject
|
||||
protected EC2ListNodesStrategy(EC2AsyncClient client, @Region Set<String> regions,
|
||||
protected EC2ListNodesStrategy(EC2AsyncClient client, @Region Supplier<Set<String>> regions,
|
||||
Function<RunningInstance, NodeMetadata> runningInstanceToNodeMetadata,
|
||||
@Named(Constants.PROPERTY_USER_THREADS) ExecutorService executor) {
|
||||
this.client = checkNotNull(client, "client");
|
||||
|
@ -91,9 +92,8 @@ public class EC2ListNodesStrategy implements ListNodesStrategy {
|
|||
|
||||
protected Iterable<? extends RunningInstance> pollRunningInstances() {
|
||||
Iterable<? extends Set<? extends Reservation<? extends RunningInstance>>> reservations = transformParallel(
|
||||
regions, new Function<String, Future<Set<? extends Reservation<? extends RunningInstance>>>>() {
|
||||
regions.get(), new Function<String, Future<Set<? extends Reservation<? extends RunningInstance>>>>() {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public Future<Set<? extends Reservation<? extends RunningInstance>>> apply(String from) {
|
||||
// see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7126754
|
||||
|
|
|
@ -25,8 +25,8 @@ import static org.jclouds.ec2.reference.EC2Constants.PROPERTY_EC2_AMI_OWNERS;
|
|||
|
||||
import java.util.Collections;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.inject.Inject;
|
||||
|
@ -47,9 +47,9 @@ import com.google.common.base.Predicates;
|
|||
import com.google.common.base.Supplier;
|
||||
import com.google.common.cache.LoadingCache;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableMap.Builder;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.google.common.collect.ImmutableMap.Builder;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -61,14 +61,14 @@ public class EC2ImageSupplier implements Supplier<Set<? extends Image>> {
|
|||
@Named(ComputeServiceConstants.COMPUTE_LOGGER)
|
||||
protected Logger logger = Logger.NULL;
|
||||
|
||||
private final Set<String> regions;
|
||||
private final Supplier<Set<String>> regions;
|
||||
private final DescribeImagesParallel describer;
|
||||
private final String[] amiOwners;
|
||||
private final EC2ImageParser parser;
|
||||
private final Supplier<LoadingCache<RegionAndName, ? extends Image>> cache;
|
||||
|
||||
@Inject
|
||||
protected EC2ImageSupplier(@Region Set<String> regions, DescribeImagesParallel describer,
|
||||
protected EC2ImageSupplier(@Region Supplier<Set<String>> regions, DescribeImagesParallel describer,
|
||||
@Named(PROPERTY_EC2_AMI_OWNERS) String[] amiOwners, Supplier<LoadingCache<RegionAndName, ? extends Image>> cache,
|
||||
EC2ImageParser parser) {
|
||||
this.regions = regions;
|
||||
|
@ -88,7 +88,7 @@ public class EC2ImageSupplier implements Supplier<Set<? extends Image>> {
|
|||
} else {
|
||||
logger.debug(">> providing images");
|
||||
|
||||
Iterable<Entry<String, DescribeImagesOptions>> queries = getDescribeQueriesForOwnersInRegions(regions,
|
||||
Iterable<Entry<String, DescribeImagesOptions>> queries = getDescribeQueriesForOwnersInRegions(regions.get(),
|
||||
amiOwners);
|
||||
|
||||
Iterable<? extends Image> parsedImages = ImmutableSet.copyOf(filter(transform(describer.apply(queries), parser), Predicates
|
||||
|
|
|
@ -18,21 +18,16 @@
|
|||
*/
|
||||
package org.jclouds.ec2.config;
|
||||
|
||||
import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGIONS;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.aws.config.WithZonesFormSigningRestClientModule;
|
||||
import org.jclouds.ec2.EC2AsyncClient;
|
||||
import org.jclouds.ec2.EC2Client;
|
||||
import org.jclouds.ec2.domain.AvailabilityZoneInfo;
|
||||
import org.jclouds.ec2.services.AMIAsyncClient;
|
||||
import org.jclouds.ec2.services.AMIClient;
|
||||
import org.jclouds.ec2.services.AvailabilityZoneAndRegionAsyncClient;
|
||||
|
@ -49,23 +44,22 @@ import org.jclouds.ec2.services.SecurityGroupAsyncClient;
|
|||
import org.jclouds.ec2.services.SecurityGroupClient;
|
||||
import org.jclouds.ec2.services.WindowsAsyncClient;
|
||||
import org.jclouds.ec2.services.WindowsClient;
|
||||
import org.jclouds.http.HttpResponseException;
|
||||
import org.jclouds.ec2.suppliers.DescribeAvailabilityZonesInRegion;
|
||||
import org.jclouds.ec2.suppliers.DescribeRegionsForConfiguredRegions;
|
||||
import org.jclouds.http.RequiresHttp;
|
||||
import org.jclouds.location.Region;
|
||||
import org.jclouds.location.Zone;
|
||||
import org.jclouds.logging.Logger;
|
||||
import org.jclouds.location.config.LocationModule;
|
||||
import org.jclouds.location.suppliers.RegionIdToURISupplier;
|
||||
import org.jclouds.location.suppliers.RegionIdToZoneIdsSupplier;
|
||||
import org.jclouds.location.suppliers.ZoneIdsSupplier;
|
||||
import org.jclouds.rest.ConfiguresRestClient;
|
||||
|
||||
import com.google.common.base.Predicates;
|
||||
import com.google.common.base.Splitter;
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.base.Suppliers;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.ImmutableMap.Builder;
|
||||
import com.google.inject.ConfigurationException;
|
||||
import com.google.inject.Injector;
|
||||
import com.google.inject.Key;
|
||||
import com.google.inject.name.Names;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.inject.Scopes;
|
||||
|
||||
/**
|
||||
* Configures the EC2 connection.
|
||||
|
@ -97,85 +91,33 @@ public class EC2RestClientModule<S extends EC2Client, A extends EC2AsyncClient>
|
|||
}
|
||||
|
||||
@Override
|
||||
protected void bindRegionsToProvider() {
|
||||
bindRegionsToProvider(RegionIdsToURI.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void bindZonesToProvider() {
|
||||
bindZonesToProvider(RegionIdToZoneId.class);
|
||||
protected void installLocations() {
|
||||
install(new LocationModule());
|
||||
bind(RegionIdToZoneIdsSupplier.class).to(DescribeAvailabilityZonesInRegion.class).in(Scopes.SINGLETON);
|
||||
bind(RegionIdToURISupplier.class).to(DescribeRegionsForConfiguredRegions.class).in(Scopes.SINGLETON);
|
||||
bind(ZoneIdsSupplier.class).to(ZoneIdsFromRegionIdToZoneIdsValues.class).in(Scopes.SINGLETON);
|
||||
}
|
||||
|
||||
/**
|
||||
* as opposed to via properties, lets look up zones via api, as they are more likely to change
|
||||
*/
|
||||
@Singleton
|
||||
public static class RegionIdsToURI implements javax.inject.Provider<Map<String, URI>> {
|
||||
private final AvailabilityZoneAndRegionClient client;
|
||||
private final Injector injector;
|
||||
public static class ZoneIdsFromRegionIdToZoneIdsValues implements ZoneIdsSupplier {
|
||||
|
||||
private final Supplier<Map<String, Supplier<Set<String>>>> regionIdToZoneIdsSupplier;
|
||||
|
||||
@Inject
|
||||
public RegionIdsToURI(EC2Client client, Injector injector) {
|
||||
this.client = client.getAvailabilityZoneAndRegionServices();
|
||||
this.injector = injector;
|
||||
protected ZoneIdsFromRegionIdToZoneIdsValues(
|
||||
@Zone Supplier<Map<String, Supplier<Set<String>>>> regionIdToZoneIdsSupplier) {
|
||||
this.regionIdToZoneIdsSupplier = regionIdToZoneIdsSupplier;
|
||||
}
|
||||
|
||||
@Singleton
|
||||
@Region
|
||||
@Override
|
||||
public Map<String, URI> get() {
|
||||
try {
|
||||
String regionString = injector.getInstance(Key.get(String.class, Names.named(PROPERTY_REGIONS)));
|
||||
Set<String> regions = ImmutableSet.copyOf(Splitter.on(',').split(regionString));
|
||||
if (regions.size() > 0)
|
||||
return Maps.filterKeys(client.describeRegions(), Predicates.in(regions));
|
||||
} catch (ConfigurationException e) {
|
||||
// this happens if regions property isn't set
|
||||
// services not run by AWS may not have regions, so this is ok.
|
||||
}
|
||||
return client.describeRegions();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Singleton
|
||||
public static class RegionIdToZoneId implements javax.inject.Provider<Map<String, String>> {
|
||||
@Resource
|
||||
protected Logger logger = Logger.NULL;
|
||||
|
||||
private final AvailabilityZoneAndRegionClient client;
|
||||
private final Map<String, URI> regions;
|
||||
|
||||
@Inject
|
||||
public RegionIdToZoneId(EC2Client client, @Region Map<String, URI> regions) {
|
||||
this.client = client.getAvailabilityZoneAndRegionServices();
|
||||
this.regions = regions;
|
||||
}
|
||||
|
||||
@Singleton
|
||||
@Zone
|
||||
@Override
|
||||
public Map<String, String> get() {
|
||||
Builder<String, String> map = ImmutableMap.builder();
|
||||
HttpResponseException exception = null;
|
||||
for (Entry<String, URI> region : regions.entrySet()) {
|
||||
try {
|
||||
for (AvailabilityZoneInfo zoneInfo : client.describeAvailabilityZonesInRegion(region.getKey())) {
|
||||
map.put(zoneInfo.getZone(), region.getKey());
|
||||
}
|
||||
} catch (HttpResponseException e) {
|
||||
if (e.getMessage().contains("Unable to tunnel through proxy")) {
|
||||
exception = e;
|
||||
logger.error(e, "Could not describe availability zones in Region: %s", region.getKey());
|
||||
} else {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
ImmutableMap<String, String> result = map.build();
|
||||
if (result.isEmpty() && exception != null) {
|
||||
throw exception;
|
||||
}
|
||||
return result;
|
||||
public Set<String> get() {
|
||||
Collection<Supplier<Set<String>>> zones = regionIdToZoneIdsSupplier.get().values();
|
||||
return ImmutableSet.copyOf(Iterables.concat(Iterables.transform(zones, Suppliers
|
||||
.<Set<String>> supplierFunction())));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,94 @@
|
|||
/**
|
||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||
* contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. jclouds licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.jclouds.ec2.suppliers;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.ec2.EC2Client;
|
||||
import org.jclouds.ec2.domain.AvailabilityZoneInfo;
|
||||
import org.jclouds.ec2.services.AvailabilityZoneAndRegionClient;
|
||||
import org.jclouds.http.HttpResponseException;
|
||||
import org.jclouds.location.Region;
|
||||
import org.jclouds.location.suppliers.RegionIdToZoneIdsSupplier;
|
||||
import org.jclouds.logging.Logger;
|
||||
import org.jclouds.util.Suppliers2;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.ImmutableMap.Builder;
|
||||
|
||||
@Singleton
|
||||
public class DescribeAvailabilityZonesInRegion implements RegionIdToZoneIdsSupplier {
|
||||
@Resource
|
||||
protected Logger logger = Logger.NULL;
|
||||
|
||||
private final AvailabilityZoneAndRegionClient client;
|
||||
private final Supplier<Set<String>> regions;
|
||||
|
||||
@Inject
|
||||
public DescribeAvailabilityZonesInRegion(EC2Client client, @Region Supplier<Set<String>> regions) {
|
||||
this.client = client.getAvailabilityZoneAndRegionServices();
|
||||
this.regions = regions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Supplier<Set<String>>> get() {
|
||||
Builder<String, Set<String>> map = ImmutableMap.builder();
|
||||
HttpResponseException exception = null;
|
||||
// TODO: this should be parallel
|
||||
for (String region : regions.get()) {
|
||||
try {
|
||||
ImmutableSet<String> zones = ImmutableSet.copyOf(Iterables.transform(client
|
||||
.describeAvailabilityZonesInRegion(region), new Function<AvailabilityZoneInfo, String>() {
|
||||
|
||||
@Override
|
||||
public String apply(AvailabilityZoneInfo arg0) {
|
||||
return arg0.getZone();
|
||||
}
|
||||
|
||||
}));
|
||||
if (zones.size() > 0)
|
||||
map.put(region, zones);
|
||||
} catch (HttpResponseException e) {
|
||||
// TODO: this should be in retry handler, not here.
|
||||
if (e.getMessage().contains("Unable to tunnel through proxy")) {
|
||||
exception = e;
|
||||
logger.error(e, "Could not describe availability zones in Region: %s", region);
|
||||
} else {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
ImmutableMap<String, Set<String>> result = map.build();
|
||||
if (result.isEmpty() && exception != null) {
|
||||
throw exception;
|
||||
}
|
||||
return Maps.transformValues(result, Suppliers2.<Set<String>> ofInstanceFunction());
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,59 @@
|
|||
/**
|
||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||
* contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. jclouds licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.jclouds.ec2.suppliers;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.ec2.EC2Client;
|
||||
import org.jclouds.ec2.services.AvailabilityZoneAndRegionClient;
|
||||
import org.jclouds.location.Region;
|
||||
import org.jclouds.location.suppliers.RegionIdToURISupplier;
|
||||
import org.jclouds.util.Suppliers2;
|
||||
|
||||
import com.google.common.base.Predicates;
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
@Singleton
|
||||
public class DescribeRegionsForConfiguredRegions implements RegionIdToURISupplier {
|
||||
private final AvailabilityZoneAndRegionClient client;
|
||||
private final Supplier<Set<String>> regions;
|
||||
|
||||
@Inject
|
||||
public DescribeRegionsForConfiguredRegions(EC2Client client, @Region Supplier<Set<String>> regions) {
|
||||
this.client = client.getAvailabilityZoneAndRegionServices();
|
||||
this.regions = regions;
|
||||
}
|
||||
|
||||
@Singleton
|
||||
@Region
|
||||
@Override
|
||||
public Map<String, Supplier<URI>> get() {
|
||||
Set<String> regionWhiteList = regions.get();
|
||||
Map<String, URI> regionToUris = client.describeRegions();
|
||||
if (regionWhiteList.size() > 0)
|
||||
regionToUris = Maps.filterKeys(regionToUris, Predicates.in(regionWhiteList));
|
||||
return Maps.transformValues(regionToUris, Suppliers2.<URI> ofInstanceFunction());
|
||||
}
|
||||
}
|
|
@ -23,13 +23,15 @@ import java.util.Date;
|
|||
import javax.annotation.Resource;
|
||||
import javax.inject.Inject;
|
||||
|
||||
import org.jclouds.ec2.domain.Attachment;
|
||||
import org.jclouds.aws.util.AWSUtils;
|
||||
import org.jclouds.date.DateService;
|
||||
import org.jclouds.ec2.domain.Attachment;
|
||||
import org.jclouds.http.functions.ParseSax;
|
||||
import org.jclouds.location.Region;
|
||||
import org.jclouds.logging.Logger;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Adrian Cole
|
||||
|
@ -40,10 +42,10 @@ public class AttachmentHandler extends ParseSax.HandlerForGeneratedRequestWithRe
|
|||
protected Logger logger = Logger.NULL;
|
||||
|
||||
protected final DateService dateService;
|
||||
protected final String defaultRegion;
|
||||
protected final Supplier<String> defaultRegion;
|
||||
|
||||
@Inject
|
||||
AttachmentHandler(DateService dateService, @Region String defaultRegion) {
|
||||
AttachmentHandler(DateService dateService, @Region Supplier<String> defaultRegion) {
|
||||
this.dateService = dateService;
|
||||
this.defaultRegion = defaultRegion;
|
||||
}
|
||||
|
@ -58,7 +60,7 @@ public class AttachmentHandler extends ParseSax.HandlerForGeneratedRequestWithRe
|
|||
public Attachment getResult() {
|
||||
String region = AWSUtils.findRegionInArgsOrNull(getRequest());
|
||||
if (region == null)
|
||||
region = defaultRegion;
|
||||
region = defaultRegion.get();
|
||||
return new Attachment(region, volumeId, instanceId, device, attachmentStatus, attachTime);
|
||||
}
|
||||
|
||||
|
|
|
@ -41,6 +41,7 @@ import org.jclouds.location.Region;
|
|||
import org.jclouds.logging.Logger;
|
||||
import org.xml.sax.Attributes;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.google.inject.Provider;
|
||||
|
||||
|
@ -54,11 +55,11 @@ public abstract class BaseReservationHandler<T> extends HandlerForGeneratedReque
|
|||
protected Logger logger = Logger.NULL;
|
||||
|
||||
protected final DateService dateService;
|
||||
protected final String defaultRegion;
|
||||
protected final Supplier<String> defaultRegion;
|
||||
protected final Provider<Builder> builderProvider;
|
||||
|
||||
@Inject
|
||||
public BaseReservationHandler(DateService dateService, @Region String defaultRegion,
|
||||
public BaseReservationHandler(DateService dateService, @Region Supplier<String> defaultRegion,
|
||||
Provider<RunningInstance.Builder> builderProvider) {
|
||||
this.dateService = dateService;
|
||||
this.defaultRegion = defaultRegion;
|
||||
|
@ -205,7 +206,7 @@ public abstract class BaseReservationHandler<T> extends HandlerForGeneratedReque
|
|||
builder.privateDnsName(null);
|
||||
}
|
||||
|
||||
builder.region((region == null) ? defaultRegion : region);
|
||||
builder.region((region == null) ? defaultRegion.get() : region);
|
||||
builder.groupIds(groupIds);
|
||||
}
|
||||
|
||||
|
@ -224,7 +225,7 @@ public abstract class BaseReservationHandler<T> extends HandlerForGeneratedReque
|
|||
protected Reservation<? extends RunningInstance> newReservation() {
|
||||
String region = getRequest() != null ? AWSUtils.findRegionInArgsOrNull(getRequest()) : null;
|
||||
if (region == null)
|
||||
region = defaultRegion;
|
||||
region = defaultRegion.get();
|
||||
Reservation<? extends RunningInstance> info = new Reservation<RunningInstance>(region, groupIds, instances,
|
||||
ownerId, requesterId, reservationId);
|
||||
this.groupIds = Sets.newLinkedHashSet();
|
||||
|
|
|
@ -22,12 +22,14 @@ import java.util.Date;
|
|||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import org.jclouds.ec2.domain.BundleTask;
|
||||
import org.jclouds.aws.util.AWSUtils;
|
||||
import org.jclouds.date.DateService;
|
||||
import org.jclouds.ec2.domain.BundleTask;
|
||||
import org.jclouds.http.functions.ParseSax;
|
||||
import org.jclouds.location.Region;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Adrian Cole
|
||||
|
@ -39,7 +41,7 @@ public class BundleTaskHandler extends ParseSax.HandlerForGeneratedRequestWithRe
|
|||
protected DateService dateService;
|
||||
@Inject
|
||||
@Region
|
||||
String defaultRegion;
|
||||
Supplier<String> defaultRegion;
|
||||
|
||||
private String bundleId;
|
||||
private String code;
|
||||
|
@ -55,7 +57,7 @@ public class BundleTaskHandler extends ParseSax.HandlerForGeneratedRequestWithRe
|
|||
public BundleTask getResult() {
|
||||
String region = AWSUtils.findRegionInArgsOrNull(getRequest());
|
||||
if (region == null)
|
||||
region = defaultRegion;
|
||||
region = defaultRegion.get();
|
||||
BundleTask.Error error = null;
|
||||
if (code != null)
|
||||
error = new BundleTask.Error(code, message);
|
||||
|
|
|
@ -23,6 +23,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
|
|||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.inject.Inject;
|
||||
|
@ -39,6 +40,9 @@ import org.jclouds.logging.Logger;
|
|||
import org.jclouds.rest.internal.GeneratedHttpRequest;
|
||||
import org.xml.sax.Attributes;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.base.Suppliers;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
/**
|
||||
|
@ -54,11 +58,14 @@ public class CreateVolumeResponseHandler extends ParseSax.HandlerForGeneratedReq
|
|||
protected DateService dateService;
|
||||
@Inject
|
||||
@Region
|
||||
String defaultRegion;
|
||||
Supplier<String> defaultRegion;
|
||||
@Inject
|
||||
@Zone
|
||||
protected Map<String, String> availabilityZoneToRegion;
|
||||
|
||||
protected Supplier<Map<String, Supplier<Set<String>>>> regionToZonesSupplier;
|
||||
@Inject
|
||||
@Zone
|
||||
protected Supplier<Set<String>> zonesSupplier;
|
||||
|
||||
private String id;
|
||||
private int size;
|
||||
private String snapshotId;
|
||||
|
@ -159,12 +166,21 @@ public class CreateVolumeResponseHandler extends ParseSax.HandlerForGeneratedReq
|
|||
super.setContext(request);
|
||||
region = AWSUtils.findRegionInArgsOrNull(getRequest());
|
||||
if (region == null) {
|
||||
String zone = findAvailabilityZoneInArgsOrNull(getRequest(), availabilityZoneToRegion.keySet());
|
||||
Set<String> zones = zonesSupplier.get();
|
||||
String zone = findAvailabilityZoneInArgsOrNull(getRequest(), zones);
|
||||
if (zone != null) {
|
||||
region = checkNotNull(availabilityZoneToRegion.get(zone),
|
||||
String.format("zone %s not in %s", zone, availabilityZoneToRegion));
|
||||
Map<String, Set<String>> regionToZones = Maps.transformValues(regionToZonesSupplier.get(), Suppliers
|
||||
.<Set<String>> supplierFunction());
|
||||
for (Entry<String, Set<String>> entry : regionToZones.entrySet()) {
|
||||
if (entry.getValue().contains(zone)) {
|
||||
region = entry.getKey();
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
checkNotNull(regionToZones, String.format("zone %s not in %s", zone, regionToZones));
|
||||
} else {
|
||||
region = defaultRegion;
|
||||
region = defaultRegion.get();
|
||||
}
|
||||
}
|
||||
return this;
|
||||
|
|
|
@ -29,6 +29,7 @@ import org.jclouds.http.functions.ParseSax.HandlerForGeneratedRequestWithResult;
|
|||
import org.jclouds.location.Region;
|
||||
import org.jclouds.logging.Logger;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
/**
|
||||
|
@ -45,7 +46,7 @@ public class DescribeAddressesResponseHandler extends
|
|||
private StringBuilder currentText = new StringBuilder();
|
||||
@Inject
|
||||
@Region
|
||||
String defaultRegion;
|
||||
Supplier<String> defaultRegion;
|
||||
private String instanceId;
|
||||
|
||||
protected String currentOrNull() {
|
||||
|
@ -61,7 +62,7 @@ public class DescribeAddressesResponseHandler extends
|
|||
} else if (qName.equals("item")) {
|
||||
String region = AWSUtils.findRegionInArgsOrNull(getRequest());
|
||||
if (region == null)
|
||||
region = defaultRegion;
|
||||
region = defaultRegion.get();
|
||||
pairs.add(new PublicIpInstanceIdPair(region, ipAddress, instanceId));
|
||||
ipAddress = null;
|
||||
instanceId = null;
|
||||
|
|
|
@ -29,6 +29,7 @@ import org.jclouds.location.Region;
|
|||
import org.jclouds.logging.Logger;
|
||||
import org.xml.sax.Attributes;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
/**
|
||||
|
@ -37,7 +38,7 @@ import com.google.common.collect.Sets;
|
|||
*/
|
||||
public class DescribeAvailabilityZonesResponseHandler extends ParseSax.HandlerWithResult<Set<AvailabilityZoneInfo>> {
|
||||
private StringBuilder currentText = new StringBuilder();
|
||||
private final String defaultRegion;
|
||||
private final Supplier<String> defaultRegion;
|
||||
|
||||
private Set<AvailabilityZoneInfo> availablilityZones = Sets.newLinkedHashSet();
|
||||
private String zone;
|
||||
|
@ -52,9 +53,13 @@ public class DescribeAvailabilityZonesResponseHandler extends ParseSax.HandlerWi
|
|||
* Eucalyptus 1.6 doesn't return region in the XML output
|
||||
*/
|
||||
@Inject
|
||||
DescribeAvailabilityZonesResponseHandler(@Region String defaultRegion) {
|
||||
DescribeAvailabilityZonesResponseHandler(@Region Supplier<String> defaultRegion) {
|
||||
this.defaultRegion = defaultRegion;
|
||||
region = defaultRegion;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startDocument() {
|
||||
region = defaultRegion.get();
|
||||
}
|
||||
|
||||
public Set<AvailabilityZoneInfo> getResult() {
|
||||
|
@ -86,7 +91,7 @@ public class DescribeAvailabilityZonesResponseHandler extends ParseSax.HandlerWi
|
|||
} else if (qName.equals("item") && !inMessageSet) {
|
||||
availablilityZones.add(new AvailabilityZoneInfo(zone, zoneState, region, messages));
|
||||
this.zone = null;
|
||||
this.region = defaultRegion;
|
||||
this.region = defaultRegion.get();
|
||||
this.zoneState = null;
|
||||
this.messages = Sets.newHashSet();
|
||||
}
|
||||
|
@ -96,4 +101,5 @@ public class DescribeAvailabilityZonesResponseHandler extends ParseSax.HandlerWi
|
|||
public void characters(char ch[], int start, int length) {
|
||||
currentText.append(ch, start, length);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -38,6 +38,7 @@ import org.jclouds.location.Region;
|
|||
import org.jclouds.logging.Logger;
|
||||
import org.xml.sax.Attributes;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
|
@ -53,7 +54,7 @@ import com.google.common.collect.Sets;
|
|||
public class DescribeImagesResponseHandler extends ParseSax.HandlerForGeneratedRequestWithResult<Set<Image>> {
|
||||
|
||||
@Inject
|
||||
public DescribeImagesResponseHandler(@Region String defaultRegion) {
|
||||
public DescribeImagesResponseHandler(@Region Supplier<String> defaultRegion) {
|
||||
this.defaultRegion = defaultRegion;
|
||||
}
|
||||
|
||||
|
@ -62,7 +63,7 @@ public class DescribeImagesResponseHandler extends ParseSax.HandlerForGeneratedR
|
|||
|
||||
private Set<Image> contents = Sets.newLinkedHashSet();
|
||||
private StringBuilder currentText = new StringBuilder();
|
||||
private final String defaultRegion;
|
||||
private final Supplier<String> defaultRegion;
|
||||
|
||||
private Architecture architecture;
|
||||
private String name;
|
||||
|
@ -165,7 +166,7 @@ public class DescribeImagesResponseHandler extends ParseSax.HandlerForGeneratedR
|
|||
try {
|
||||
String region = getRequest() != null ? AWSUtils.findRegionInArgsOrNull(getRequest()) : null;
|
||||
if (region == null)
|
||||
region = defaultRegion;
|
||||
region = defaultRegion.get();
|
||||
contents.add(new Image(region, architecture, this.name, description, imageId, imageLocation,
|
||||
imageOwnerId, imageState, imageType, isPublic, productCodes, kernelId, platform, ramdiskId,
|
||||
rootDeviceType, rootDeviceName, ebsBlockDevices, virtualizationType, hypervisor));
|
||||
|
|
|
@ -27,6 +27,7 @@ import org.jclouds.ec2.domain.Reservation;
|
|||
import org.jclouds.ec2.domain.RunningInstance;
|
||||
import org.jclouds.location.Region;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.google.inject.Provider;
|
||||
|
||||
|
@ -43,7 +44,7 @@ public class DescribeInstancesResponseHandler extends
|
|||
private Set<Reservation<? extends RunningInstance>> reservations = Sets.newLinkedHashSet();
|
||||
|
||||
@Inject
|
||||
DescribeInstancesResponseHandler(DateService dateService, @Region String defaultRegion,
|
||||
DescribeInstancesResponseHandler(DateService dateService, @Region Supplier<String> defaultRegion,
|
||||
Provider<RunningInstance.Builder> builderProvider) {
|
||||
super(dateService, defaultRegion, builderProvider);
|
||||
}
|
||||
|
|
|
@ -30,6 +30,7 @@ import org.jclouds.ec2.domain.KeyPair.Builder;
|
|||
import org.jclouds.http.functions.ParseSax;
|
||||
import org.jclouds.location.Region;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
/**
|
||||
|
@ -40,13 +41,17 @@ import com.google.common.collect.Sets;
|
|||
* @author Adrian Cole
|
||||
*/
|
||||
public class DescribeKeyPairsResponseHandler extends ParseSax.HandlerForGeneratedRequestWithResult<Set<KeyPair>> {
|
||||
private final String defaultRegion;
|
||||
private final Supplier<String> defaultRegion;
|
||||
private Builder builder;
|
||||
|
||||
@Inject
|
||||
public DescribeKeyPairsResponseHandler(@Region String defaultRegion) {
|
||||
public DescribeKeyPairsResponseHandler(@Region Supplier<String> defaultRegion) {
|
||||
this.defaultRegion = defaultRegion;
|
||||
builder = KeyPair.builder().region(defaultRegion);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startDocument() {
|
||||
builder = KeyPair.builder().region(defaultRegion.get());
|
||||
}
|
||||
|
||||
private StringBuilder currentText = new StringBuilder();
|
||||
|
@ -67,7 +72,7 @@ public class DescribeKeyPairsResponseHandler extends ParseSax.HandlerForGenerate
|
|||
try {
|
||||
keyPairs.add(builder.build());
|
||||
} finally {
|
||||
builder = KeyPair.builder().region(defaultRegion);
|
||||
builder = KeyPair.builder().region(defaultRegion.get());
|
||||
}
|
||||
} else if (qName.equals("keyName")) {
|
||||
builder.keyName(currentOrNull(currentText));
|
||||
|
|
|
@ -18,8 +18,8 @@
|
|||
*/
|
||||
package org.jclouds.ec2.xml;
|
||||
|
||||
import static org.jclouds.util.SaxUtils.currentOrNull;
|
||||
import static org.jclouds.util.SaxUtils.currentOrNegative;
|
||||
import static org.jclouds.util.SaxUtils.currentOrNull;
|
||||
import static org.jclouds.util.SaxUtils.equalsOrSuffix;
|
||||
|
||||
import java.util.Set;
|
||||
|
@ -34,6 +34,7 @@ import org.jclouds.http.functions.ParseSax;
|
|||
import org.jclouds.location.Region;
|
||||
import org.xml.sax.Attributes;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.LinkedHashMultimap;
|
||||
import com.google.common.collect.Multimap;
|
||||
|
@ -52,7 +53,7 @@ public class DescribeSecurityGroupsResponseHandler extends
|
|||
ParseSax.HandlerForGeneratedRequestWithResult<Set<SecurityGroup>> {
|
||||
@Inject
|
||||
@Region
|
||||
String defaultRegion;
|
||||
Supplier<String> defaultRegion;
|
||||
|
||||
private StringBuilder currentText = new StringBuilder();
|
||||
private Set<SecurityGroup> securtyGroups = Sets.newLinkedHashSet();
|
||||
|
@ -135,7 +136,7 @@ public class DescribeSecurityGroupsResponseHandler extends
|
|||
} else if (!inIpPermissions && !inIpRanges && !inGroups) {
|
||||
String region = AWSUtils.findRegionInArgsOrNull(getRequest());
|
||||
if (region == null)
|
||||
region = defaultRegion;
|
||||
region = defaultRegion.get();
|
||||
securtyGroups.add(new SecurityGroup(region, groupId, groupName, ownerId, groupDescription, ipPermissions));
|
||||
this.groupName = null;
|
||||
this.groupId = null;
|
||||
|
|
|
@ -29,6 +29,7 @@ import org.jclouds.http.functions.ParseSax.HandlerForGeneratedRequestWithResult;
|
|||
import org.jclouds.location.Region;
|
||||
import org.xml.sax.Attributes;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
/**
|
||||
|
@ -51,7 +52,7 @@ public class InstanceStateChangeHandler extends
|
|||
private StringBuilder currentText = new StringBuilder();
|
||||
@Inject
|
||||
@Region
|
||||
String defaultRegion;
|
||||
Supplier<String> defaultRegion;
|
||||
|
||||
Set<InstanceStateChange> instances = Sets.newLinkedHashSet();
|
||||
private InstanceState shutdownState;
|
||||
|
@ -92,7 +93,7 @@ public class InstanceStateChangeHandler extends
|
|||
} else if (qName.equals("item")) {
|
||||
String region = AWSUtils.findRegionInArgsOrNull(getRequest());
|
||||
if (region == null)
|
||||
region = defaultRegion;
|
||||
region = defaultRegion.get();
|
||||
instances.add(new InstanceStateChange(region, instanceId, shutdownState, previousState));
|
||||
this.instanceId = null;
|
||||
this.shutdownState = null;
|
||||
|
|
|
@ -28,6 +28,8 @@ import org.jclouds.ec2.domain.KeyPair.Builder;
|
|||
import org.jclouds.http.functions.ParseSax;
|
||||
import org.jclouds.location.Region;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
|
||||
/**
|
||||
*
|
||||
* @see <a href=
|
||||
|
@ -36,13 +38,17 @@ import org.jclouds.location.Region;
|
|||
* @author Adrian Cole
|
||||
*/
|
||||
public class KeyPairResponseHandler extends ParseSax.HandlerForGeneratedRequestWithResult<KeyPair> {
|
||||
private final String defaultRegion;
|
||||
private final Supplier<String> defaultRegion;
|
||||
private Builder builder;
|
||||
|
||||
@Inject
|
||||
public KeyPairResponseHandler(@Region String defaultRegion) {
|
||||
public KeyPairResponseHandler(@Region Supplier<String> defaultRegion) {
|
||||
this.defaultRegion = defaultRegion;
|
||||
builder = KeyPair.builder().region(defaultRegion);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void startDocument() {
|
||||
builder = KeyPair.builder().region(defaultRegion.get());
|
||||
}
|
||||
|
||||
private StringBuilder currentText = new StringBuilder();
|
||||
|
@ -54,7 +60,7 @@ public class KeyPairResponseHandler extends ParseSax.HandlerForGeneratedRequestW
|
|||
try {
|
||||
return builder.build();
|
||||
} finally {
|
||||
builder = KeyPair.builder().region(defaultRegion);
|
||||
builder = KeyPair.builder().region(defaultRegion.get());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||
s * Licensed to jclouds, Inc. (jclouds) under one or more
|
||||
* contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. jclouds licenses this file
|
||||
|
@ -25,6 +25,7 @@ import org.jclouds.ec2.domain.Reservation;
|
|||
import org.jclouds.ec2.domain.RunningInstance;
|
||||
import org.jclouds.location.Region;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.inject.Provider;
|
||||
|
||||
/**
|
||||
|
@ -38,7 +39,7 @@ import com.google.inject.Provider;
|
|||
public class RunInstancesResponseHandler extends BaseReservationHandler<Reservation<? extends RunningInstance>> {
|
||||
|
||||
@Inject
|
||||
RunInstancesResponseHandler(DateService dateService, @Region String defaultRegion,
|
||||
RunInstancesResponseHandler(DateService dateService, @Region Supplier<String> defaultRegion,
|
||||
Provider<RunningInstance.Builder> builderProvider) {
|
||||
super(dateService, defaultRegion, builderProvider);
|
||||
}
|
||||
|
|
|
@ -22,13 +22,15 @@ import java.util.Date;
|
|||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import org.jclouds.ec2.domain.Snapshot;
|
||||
import org.jclouds.ec2.domain.Snapshot.Status;
|
||||
import org.jclouds.aws.util.AWSUtils;
|
||||
import org.jclouds.date.DateService;
|
||||
import org.jclouds.ec2.domain.Snapshot;
|
||||
import org.jclouds.ec2.domain.Snapshot.Status;
|
||||
import org.jclouds.http.functions.ParseSax;
|
||||
import org.jclouds.location.Region;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Adrian Cole
|
||||
|
@ -37,7 +39,7 @@ public class SnapshotHandler extends ParseSax.HandlerForGeneratedRequestWithResu
|
|||
private StringBuilder currentText = new StringBuilder();
|
||||
|
||||
protected final DateService dateService;
|
||||
protected final String defaultRegion;
|
||||
protected final Supplier<String> defaultRegion;
|
||||
|
||||
private String id;
|
||||
private String volumeId;
|
||||
|
@ -50,7 +52,7 @@ public class SnapshotHandler extends ParseSax.HandlerForGeneratedRequestWithResu
|
|||
private String ownerAlias;
|
||||
|
||||
@Inject
|
||||
public SnapshotHandler(DateService dateService, @Region String defaultRegion) {
|
||||
public SnapshotHandler(DateService dateService, @Region Supplier<String> defaultRegion) {
|
||||
this.dateService = dateService;
|
||||
this.defaultRegion = defaultRegion;
|
||||
}
|
||||
|
@ -58,7 +60,7 @@ public class SnapshotHandler extends ParseSax.HandlerForGeneratedRequestWithResu
|
|||
public Snapshot getResult() {
|
||||
String region = AWSUtils.findRegionInArgsOrNull(getRequest());
|
||||
if (region == null)
|
||||
region = defaultRegion;
|
||||
region = defaultRegion.get();
|
||||
Snapshot snapshot = new Snapshot(region, id, volumeId, volumeSize, status, startTime,
|
||||
progress, ownerId, description, ownerAlias);
|
||||
this.id = null;
|
||||
|
|
|
@ -18,11 +18,13 @@
|
|||
*/
|
||||
package org.jclouds.ec2.services;
|
||||
|
||||
import static com.google.common.collect.Maps.transformValues;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
|
@ -38,13 +40,18 @@ import org.jclouds.ec2.compute.domain.RegionAndName;
|
|||
import org.jclouds.ec2.config.EC2RestClientModule;
|
||||
import org.jclouds.http.HttpRequest;
|
||||
import org.jclouds.http.RequiresHttp;
|
||||
import org.jclouds.location.config.LocationModule;
|
||||
import org.jclouds.location.suppliers.RegionIdToURISupplier;
|
||||
import org.jclouds.location.suppliers.RegionIdToZoneIdsSupplier;
|
||||
import org.jclouds.rest.ConfiguresRestClient;
|
||||
import org.jclouds.rest.RestClientTest;
|
||||
import org.jclouds.rest.RestContextFactory;
|
||||
import org.jclouds.rest.RestContextSpec;
|
||||
import org.jclouds.util.Suppliers2;
|
||||
import org.testng.annotations.BeforeTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.cache.CacheLoader;
|
||||
import com.google.common.cache.LoadingCache;
|
||||
|
@ -84,29 +91,38 @@ public abstract class BaseEC2AsyncClientTest<T> extends RestClientTest<T> {
|
|||
return "2009-11-08T15:54:08.897Z";
|
||||
}
|
||||
|
||||
protected void bindRegionsToProvider() {
|
||||
bindRegionsToProvider(Regions.class);
|
||||
}
|
||||
|
||||
static class Regions implements javax.inject.Provider<Map<String, URI>> {
|
||||
@Override
|
||||
public Map<String, URI> get() {
|
||||
return ImmutableMap.<String, URI> of(Region.EU_WEST_1, URI.create("https://ec2.eu-west-1.amazonaws.com"),
|
||||
Region.US_EAST_1, URI.create("https://ec2.us-east-1.amazonaws.com"), Region.US_WEST_1,
|
||||
URI.create("https://ec2.us-west-1.amazonaws.com"));
|
||||
}
|
||||
}
|
||||
|
||||
protected void bindZonesToProvider() {
|
||||
bindZonesToProvider(Zones.class);
|
||||
}
|
||||
|
||||
static class Zones implements javax.inject.Provider<Map<String, String>> {
|
||||
@Override
|
||||
public Map<String, String> get() {
|
||||
return ImmutableMap.<String, String> of("us-east-1a", "us-east-1");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void installLocations() {
|
||||
install(new LocationModule());
|
||||
bind(RegionIdToURISupplier.class).toInstance(new RegionIdToURISupplier() {
|
||||
|
||||
@Override
|
||||
public Map<String, Supplier<URI>> get() {
|
||||
return transformValues(ImmutableMap.<String, URI> of(Region.EU_WEST_1, URI
|
||||
.create("https://ec2.eu-west-1.amazonaws.com"), Region.US_EAST_1, URI
|
||||
.create("https://ec2.us-east-1.amazonaws.com"), Region.US_WEST_1, URI
|
||||
.create("https://ec2.us-west-1.amazonaws.com")), Suppliers2.<URI> ofInstanceFunction());
|
||||
}
|
||||
|
||||
});
|
||||
bind(RegionIdToZoneIdsSupplier.class).toInstance(new RegionIdToZoneIdsSupplier() {
|
||||
|
||||
@Override
|
||||
public Map<String, Supplier<Set<String>>> get() {
|
||||
return transformValues(ImmutableMap.<String, Set<String>> of("us-east-1", ImmutableSet.of(
|
||||
"us-east-1a", "us-east-1b", "us-east-1c", "us-east-1b")), Suppliers2
|
||||
.<Set<String>> ofInstanceFunction());
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
protected FormSigner filter;
|
||||
|
|
|
@ -16,31 +16,38 @@
|
|||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.jclouds.ec2.config;
|
||||
package org.jclouds.ec2.suppliers;
|
||||
|
||||
import static org.easymock.classextension.EasyMock.*;
|
||||
import static org.easymock.EasyMock.expect;
|
||||
import static org.easymock.classextension.EasyMock.createControl;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
import static org.testng.Assert.fail;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.easymock.classextension.IMocksControl;
|
||||
import org.jclouds.ec2.EC2Client;
|
||||
import org.jclouds.ec2.domain.AvailabilityZoneInfo;
|
||||
import org.jclouds.ec2.services.AvailabilityZoneAndRegionClient;
|
||||
import org.jclouds.ec2.suppliers.DescribeAvailabilityZonesInRegion;
|
||||
import org.jclouds.http.HttpCommand;
|
||||
import org.jclouds.http.HttpResponseException;
|
||||
import org.testng.annotations.Test;
|
||||
import static org.testng.Assert.*;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import com.google.common.base.Suppliers;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
/**
|
||||
* A test for {@link EC2RestClientModule}.
|
||||
*
|
||||
* A test for {@link DescribeAvailabilityZonesInRegion}.
|
||||
*
|
||||
* @author Eric Pabst (pabstec@familysearch.org)
|
||||
*/
|
||||
public class EC2RestClientModuleTest {
|
||||
public class DescribeAvailabilityZonesInRegionTest {
|
||||
@Test
|
||||
public void testDescribeAvailabilityZonesInRegion_BestEffort() {
|
||||
IMocksControl control = createControl();
|
||||
|
@ -49,27 +56,28 @@ public class EC2RestClientModuleTest {
|
|||
AvailabilityZoneInfo info1 = control.createMock(AvailabilityZoneInfo.class);
|
||||
AvailabilityZoneInfo info2 = control.createMock(AvailabilityZoneInfo.class);
|
||||
HttpCommand command = control.createMock(HttpCommand.class);
|
||||
HttpResponseException exception = new HttpResponseException("Error: Unable to tunnel through proxy: ...", command, null);
|
||||
HttpResponseException exception = new HttpResponseException("Error: Unable to tunnel through proxy: ...",
|
||||
command, null);
|
||||
|
||||
expect(client.getAvailabilityZoneAndRegionServices()).andStubReturn(regionClient);
|
||||
expect(regionClient.describeAvailabilityZonesInRegion("accessibleRegion1")).andReturn(Collections.singleton(info1));
|
||||
expect(regionClient.describeAvailabilityZonesInRegion("accessibleRegion1")).andReturn(
|
||||
Collections.singleton(info1));
|
||||
expect(regionClient.describeAvailabilityZonesInRegion("inaccessibleRegion")).andThrow(exception);
|
||||
expect(regionClient.describeAvailabilityZonesInRegion("accessibleRegion2")).andReturn(Collections.singleton(info2));
|
||||
expect(regionClient.describeAvailabilityZonesInRegion("accessibleRegion2")).andReturn(
|
||||
Collections.singleton(info2));
|
||||
expect(info1.getZone()).andStubReturn("zone1");
|
||||
expect(info2.getZone()).andStubReturn("zone2");
|
||||
|
||||
Map<String, URI> regions = new LinkedHashMap<String, URI>();
|
||||
regions.put("accessibleRegion1", null);
|
||||
regions.put("inaccessibleRegion", null);
|
||||
regions.put("accessibleRegion2", null);
|
||||
Set<String> regions = ImmutableSet.of("accessibleRegion1", "inaccessibleRegion", "accessibleRegion2");
|
||||
control.replay();
|
||||
|
||||
Map<String,String> expectedResult = new HashMap<String,String>();
|
||||
expectedResult.put("zone1", "accessibleRegion1");
|
||||
expectedResult.put("zone2", "accessibleRegion2");
|
||||
Map<String, Set<String>> expectedResult = ImmutableMap.<String, Set<String>> builder().put("accessibleRegion1",
|
||||
ImmutableSet.of("zone1")).put("accessibleRegion2", ImmutableSet.of("zone2")).build();
|
||||
|
||||
EC2RestClientModule.RegionIdToZoneId regionIdToZoneId = new EC2RestClientModule.RegionIdToZoneId(client, regions);
|
||||
assertEquals(regionIdToZoneId.get(), expectedResult);
|
||||
DescribeAvailabilityZonesInRegion regionIdToZoneId = new DescribeAvailabilityZonesInRegion(client, Suppliers
|
||||
.ofInstance(regions));
|
||||
assertEquals(Maps.transformValues(regionIdToZoneId.get(), Suppliers.<Set<String>> supplierFunction()),
|
||||
expectedResult);
|
||||
control.verify();
|
||||
}
|
||||
|
||||
|
@ -79,16 +87,17 @@ public class EC2RestClientModuleTest {
|
|||
EC2Client client = control.createMock(EC2Client.class);
|
||||
AvailabilityZoneAndRegionClient regionClient = control.createMock(AvailabilityZoneAndRegionClient.class);
|
||||
HttpCommand command = control.createMock(HttpCommand.class);
|
||||
HttpResponseException exception = new HttpResponseException("Error: Unable to tunnel through proxy: ...", command, null);
|
||||
HttpResponseException exception = new HttpResponseException("Error: Unable to tunnel through proxy: ...",
|
||||
command, null);
|
||||
|
||||
expect(client.getAvailabilityZoneAndRegionServices()).andStubReturn(regionClient);
|
||||
expect(regionClient.describeAvailabilityZonesInRegion("inaccessibleRegion")).andThrow(exception);
|
||||
|
||||
Map<String, URI> regions = new LinkedHashMap<String, URI>();
|
||||
regions.put("inaccessibleRegion", null);
|
||||
Set<String> regions = ImmutableSet.of("inaccessibleRegion");
|
||||
control.replay();
|
||||
|
||||
EC2RestClientModule.RegionIdToZoneId regionIdToZoneId = new EC2RestClientModule.RegionIdToZoneId(client, regions);
|
||||
DescribeAvailabilityZonesInRegion regionIdToZoneId = new DescribeAvailabilityZonesInRegion(client, Suppliers
|
||||
.ofInstance(regions));
|
||||
try {
|
||||
regionIdToZoneId.get();
|
||||
fail("expected exception");
|
||||
|
@ -105,14 +114,15 @@ public class EC2RestClientModuleTest {
|
|||
AvailabilityZoneAndRegionClient regionClient = control.createMock(AvailabilityZoneAndRegionClient.class);
|
||||
|
||||
expect(client.getAvailabilityZoneAndRegionServices()).andStubReturn(regionClient);
|
||||
expect(regionClient.describeAvailabilityZonesInRegion("emptyRegion")).andReturn(Collections.<AvailabilityZoneInfo>emptySet());
|
||||
expect(regionClient.describeAvailabilityZonesInRegion("emptyRegion")).andReturn(
|
||||
Collections.<AvailabilityZoneInfo> emptySet());
|
||||
|
||||
Map<String, URI> regions = new LinkedHashMap<String, URI>();
|
||||
regions.put("emptyRegion", null);
|
||||
Set<String> regions = ImmutableSet.of("emptyRegion");
|
||||
control.replay();
|
||||
|
||||
EC2RestClientModule.RegionIdToZoneId regionIdToZoneId = new EC2RestClientModule.RegionIdToZoneId(client, regions);
|
||||
assertEquals(regionIdToZoneId.get(), Collections.<String, String>emptyMap());
|
||||
DescribeAvailabilityZonesInRegion regionIdToZoneId = new DescribeAvailabilityZonesInRegion(client, Suppliers
|
||||
.ofInstance(regions));
|
||||
assertEquals(regionIdToZoneId.get(), Collections.<String, String> emptyMap());
|
||||
control.verify();
|
||||
}
|
||||
}
|
|
@ -19,6 +19,7 @@
|
|||
package org.jclouds.ec2.xml;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
|
@ -27,10 +28,15 @@ import org.jclouds.http.functions.BaseHandlerTest;
|
|||
import org.jclouds.http.functions.ParseSax;
|
||||
import org.jclouds.http.functions.config.SaxParserModule;
|
||||
import org.jclouds.location.Zone;
|
||||
import org.jclouds.util.Suppliers2;
|
||||
import org.testng.annotations.BeforeTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.base.Suppliers;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Provides;
|
||||
|
@ -57,20 +63,29 @@ public abstract class BaseEC2HandlerTest extends BaseHandlerTest {
|
|||
@Singleton
|
||||
@Provides
|
||||
@org.jclouds.location.Region
|
||||
String provideDefaultRegion() {
|
||||
return defaultRegion;
|
||||
Supplier<String> provideDefaultRegion() {
|
||||
return Suppliers.ofInstance(defaultRegion);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
@Singleton
|
||||
@Provides
|
||||
@Zone
|
||||
Map<String, String> provideAvailabilityZoneRegionMap() {
|
||||
return ImmutableMap.<String, String> of("us-east-1a", "us-east-1");
|
||||
Supplier<Map<String, Supplier<Set<String>>>> provideRegionToAvailabilityZoneMap() {
|
||||
return Suppliers.<Map<String, Supplier<Set<String>>>> ofInstance(Maps.transformValues(ImmutableMap
|
||||
.<String, Set<String>> of("us-east-1", ImmutableSet.of("us-east-1a")), Suppliers2
|
||||
.<Set<String>> ofInstanceFunction()));
|
||||
}
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
@Singleton
|
||||
@Provides
|
||||
@Zone
|
||||
Supplier<Set<String>> provideZones() {
|
||||
return Suppliers.<Set<String>> ofInstance(ImmutableSet.of("us-east-1a"));
|
||||
}
|
||||
});
|
||||
factory = injector.getInstance(ParseSax.Factory.class);
|
||||
assert factory != null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -23,6 +23,8 @@ import static org.testng.Assert.assertEquals;
|
|||
import java.io.InputStream;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.ec2.domain.AvailabilityZoneInfo;
|
||||
import org.jclouds.http.functions.BaseHandlerTest;
|
||||
import org.jclouds.http.functions.ParseSax;
|
||||
|
@ -30,8 +32,11 @@ import org.jclouds.http.functions.config.SaxParserModule;
|
|||
import org.testng.annotations.BeforeTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.base.Suppliers;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Provides;
|
||||
|
||||
/**
|
||||
* Tests behavior of {@code DescribeAvailabilityZonesResponseHandler}
|
||||
|
@ -45,11 +50,13 @@ public class DescribeAvailabilityZonesResponseHandlerTest extends BaseHandlerTes
|
|||
@BeforeTest
|
||||
protected void setUpInjector() {
|
||||
injector = Guice.createInjector(new SaxParserModule() {
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
bindConstant().annotatedWith(org.jclouds.location.Region.class).to("SHOULDNTSEETHISASXMLHASREGIONDATA");
|
||||
super.configure();
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
@Singleton
|
||||
@Provides
|
||||
@org.jclouds.location.Region
|
||||
Supplier<String> provideDefaultRegion() {
|
||||
return Suppliers.ofInstance("SHOULDNTSEETHISASXMLHASREGIONDATA");
|
||||
}
|
||||
|
||||
});
|
||||
|
|
|
@ -37,12 +37,15 @@ import org.jclouds.http.functions.config.SaxParserModule;
|
|||
import org.jclouds.location.Region;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.base.Suppliers;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Injector;
|
||||
import com.google.inject.TypeLiteral;
|
||||
|
||||
/**
|
||||
* Tests behavior of {@code DescribeImagesResponseHandler}
|
||||
|
@ -95,7 +98,8 @@ public class DescribeImagesResponseHandlerTest {
|
|||
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(String.class).annotatedWith(Region.class).toInstance("us-east-1");
|
||||
bind(new TypeLiteral<Supplier<String>>() {
|
||||
}).annotatedWith(Region.class).toInstance(Suppliers.ofInstance("us-east-1"));
|
||||
}
|
||||
|
||||
});
|
||||
|
|
|
@ -38,10 +38,13 @@ import org.jclouds.location.Region;
|
|||
import org.testng.annotations.BeforeTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.base.Suppliers;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Injector;
|
||||
import com.google.inject.TypeLiteral;
|
||||
|
||||
/**
|
||||
* Tests behavior of {@code DescribeInstancesResponseHandler}
|
||||
|
@ -142,7 +145,8 @@ public class DescribeInstancesResponseHandlerTest extends BaseEC2HandlerTest {
|
|||
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(String.class).annotatedWith(Region.class).toInstance("us-east-1");
|
||||
bind(new TypeLiteral<Supplier<String>>() {
|
||||
}).annotatedWith(Region.class).toInstance(Suppliers.ofInstance("us-east-1"));
|
||||
}
|
||||
|
||||
});
|
||||
|
|
|
@ -30,7 +30,6 @@ import org.jclouds.blobstore.attr.ConsistencyModel;
|
|||
import org.jclouds.blobstore.config.BlobStoreMapModule;
|
||||
import org.jclouds.blobstore.internal.BlobStoreContextImpl;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.location.config.RegionsLocationModule;
|
||||
import org.jclouds.s3.S3AsyncClient;
|
||||
import org.jclouds.s3.S3Client;
|
||||
import org.jclouds.s3.blobstore.S3AsyncBlobStore;
|
||||
|
@ -59,7 +58,6 @@ public class S3BlobStoreContextModule extends AbstractModule {
|
|||
@Override
|
||||
protected void configure() {
|
||||
install(new BlobStoreMapModule());
|
||||
install(new RegionsLocationModule());
|
||||
bind(ConsistencyModel.class).toInstance(ConsistencyModel.EVENTUAL);
|
||||
bind(AsyncBlobStore.class).to(S3AsyncBlobStore.class).in(Scopes.SINGLETON);
|
||||
bind(BlobStore.class).to(S3BlobStore.class).in(Scopes.SINGLETON);
|
||||
|
|
|
@ -34,7 +34,6 @@ import org.jclouds.http.RequiresHttp;
|
|||
import org.jclouds.http.annotation.ClientError;
|
||||
import org.jclouds.http.annotation.Redirection;
|
||||
import org.jclouds.http.annotation.ServerError;
|
||||
import org.jclouds.javax.annotation.Nullable;
|
||||
import org.jclouds.location.Region;
|
||||
import org.jclouds.rest.ConfiguresRestClient;
|
||||
import org.jclouds.rest.RequestSigner;
|
||||
|
@ -77,8 +76,7 @@ public class S3RestClientModule<S extends S3Client, A extends S3AsyncClient> ext
|
|||
@Provides
|
||||
@Bucket
|
||||
@Singleton
|
||||
@Nullable
|
||||
protected String defaultRegionForBucket(@Nullable @Region String defaultRegion) {
|
||||
protected Supplier<String> defaultRegionForBucket(@Region Supplier<String> defaultRegion) {
|
||||
return defaultRegion;
|
||||
}
|
||||
|
||||
|
|
|
@ -23,17 +23,19 @@ import static com.google.common.base.Preconditions.checkNotNull;
|
|||
|
||||
import java.util.Set;
|
||||
|
||||
import org.jclouds.javax.annotation.Nullable;
|
||||
import javax.annotation.Resource;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
|
||||
import org.jclouds.http.HttpRequest;
|
||||
import org.jclouds.location.Region;
|
||||
import org.jclouds.logging.Logger;
|
||||
import org.jclouds.rest.binders.BindToStringPayload;
|
||||
import org.jclouds.s3.Bucket;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
|
||||
/**
|
||||
*
|
||||
* Depending on your latency and legal requirements, you can specify a location
|
||||
|
@ -47,26 +49,29 @@ public class BindRegionToXmlPayload extends BindToStringPayload {
|
|||
@Resource
|
||||
protected Logger logger = Logger.NULL;
|
||||
|
||||
private final String defaultRegionForEndpoint;
|
||||
private final String defaultRegionForService;
|
||||
private final Set<String> regions;
|
||||
private final Supplier<String> defaultRegionForEndpointSupplier;
|
||||
private final Supplier<String> defaultRegionForServiceSupplier;
|
||||
private final Supplier<Set<String>> regionsSupplier;
|
||||
|
||||
@Inject
|
||||
public BindRegionToXmlPayload(@org.jclouds.location.Region @Nullable String defaultRegionForEndpoint,
|
||||
@Nullable @Bucket String defaultRegionForService, @org.jclouds.location.Region Set<String> regions) {
|
||||
this.defaultRegionForEndpoint = defaultRegionForEndpoint;
|
||||
this.defaultRegionForService = defaultRegionForService;
|
||||
this.regions = checkNotNull(regions, "regions");
|
||||
public BindRegionToXmlPayload(@Region Supplier<String> defaultRegionForEndpointSupplier,
|
||||
@Bucket Supplier<String> defaultRegionForServiceSupplier, @Region Supplier<Set<String>> regionsSupplier) {
|
||||
this.defaultRegionForEndpointSupplier = defaultRegionForEndpointSupplier;
|
||||
this.defaultRegionForServiceSupplier = defaultRegionForServiceSupplier;
|
||||
this.regionsSupplier = checkNotNull(regionsSupplier, "regions");
|
||||
}
|
||||
|
||||
@Override
|
||||
public <R extends HttpRequest> R bindToRequest(R request, Object input) {
|
||||
String defaultRegionForEndpoint = defaultRegionForEndpointSupplier.get();
|
||||
if (defaultRegionForEndpoint == null)
|
||||
return request;
|
||||
input = input == null ? defaultRegionForEndpoint : input;
|
||||
checkArgument(input instanceof String, "this binder is only valid for Region!");
|
||||
String constraint = (String) input;
|
||||
String value = null;
|
||||
String defaultRegionForService = defaultRegionForServiceSupplier.get();
|
||||
Set<String> regions = regionsSupplier.get();
|
||||
if ((defaultRegionForService == null && constraint == null)
|
||||
|| (defaultRegionForService != null && defaultRegionForService.equals(constraint))) {
|
||||
// nothing to bind as this is default.
|
||||
|
|
|
@ -18,13 +18,8 @@
|
|||
*/
|
||||
package org.jclouds.aws.config;
|
||||
|
||||
import static com.google.common.collect.Iterables.get;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.aws.handlers.AWSClientErrorRetryHandler;
|
||||
import org.jclouds.aws.handlers.ParseAWSErrorFromXmlContent;
|
||||
|
@ -34,18 +29,9 @@ import org.jclouds.http.RequiresHttp;
|
|||
import org.jclouds.http.annotation.ClientError;
|
||||
import org.jclouds.http.annotation.Redirection;
|
||||
import org.jclouds.http.annotation.ServerError;
|
||||
import org.jclouds.javax.annotation.Nullable;
|
||||
import org.jclouds.location.Provider;
|
||||
import org.jclouds.location.Region;
|
||||
import org.jclouds.location.config.ProvideRegionToURIViaProperties;
|
||||
import org.jclouds.logging.Logger.LoggerFactory;
|
||||
import org.jclouds.rest.ConfiguresRestClient;
|
||||
import org.jclouds.rest.config.RestClientModule;
|
||||
|
||||
import com.google.common.collect.ImmutableBiMap;
|
||||
import com.google.inject.Provides;
|
||||
import com.google.inject.Scopes;
|
||||
import com.google.inject.TypeLiteral;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -75,40 +61,4 @@ public class AWSRestClientModule<S, A> extends RestClientModule<S, A> {
|
|||
bind(HttpRetryHandler.class).annotatedWith(ClientError.class).to(AWSClientErrorRetryHandler.class);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@Nullable
|
||||
@Region
|
||||
protected String getDefaultRegion(@Provider URI uri, @Region Map<String, URI> map, LoggerFactory logFactory) {
|
||||
String region = ImmutableBiMap.copyOf(map).inverse().get(uri);
|
||||
if (region == null && map.size() > 0) {
|
||||
logFactory.getLogger(getClass().getName()).warn(
|
||||
"failed to find region for current endpoint %s in %s; choosing first: %s", uri, map, region);
|
||||
region = get(map.keySet(), 0);
|
||||
}
|
||||
return region;
|
||||
}
|
||||
|
||||
protected void bindRegionsToProvider() {
|
||||
bindRegionsToProvider(ProvideRegionToURIViaProperties.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
super.configure();
|
||||
bindRegionsToProvider();
|
||||
}
|
||||
|
||||
protected void bindRegionsToProvider(Class<? extends javax.inject.Provider<Map<String, URI>>> providerClass) {
|
||||
bind(new TypeLiteral<Map<String, URI>>() {
|
||||
}).annotatedWith(Region.class).toProvider(providerClass).in(Scopes.SINGLETON);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@Region
|
||||
protected Set<String> provideRegions(@Region Map<String, URI> map) {
|
||||
return map.keySet();
|
||||
}
|
||||
|
||||
}
|
|
@ -18,22 +18,12 @@
|
|||
*/
|
||||
package org.jclouds.aws.config;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.http.RequiresHttp;
|
||||
import org.jclouds.location.Region;
|
||||
import org.jclouds.location.Zone;
|
||||
import org.jclouds.location.config.ProvideZonesViaProperties;
|
||||
import org.jclouds.rest.ConfiguresRestClient;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.inject.Provides;
|
||||
import com.google.inject.Scopes;
|
||||
import com.google.inject.TypeLiteral;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -44,7 +34,7 @@ import com.google.inject.TypeLiteral;
|
|||
public class WithZonesFormSigningRestClientModule<S, A> extends FormSigningRestClientModule<S, A> {
|
||||
|
||||
public WithZonesFormSigningRestClientModule(Class<S> syncClientType, Class<A> asyncClientType,
|
||||
Map<Class<?>, Class<?>> delegates) {
|
||||
Map<Class<?>, Class<?>> delegates) {
|
||||
super(syncClientType, asyncClientType, delegates);
|
||||
}
|
||||
|
||||
|
@ -52,35 +42,4 @@ public class WithZonesFormSigningRestClientModule<S, A> extends FormSigningRestC
|
|||
super(syncClientType, asyncClientType);
|
||||
}
|
||||
|
||||
protected void bindZonesToProvider() {
|
||||
bindZonesToProvider(ProvideZonesViaProperties.class);
|
||||
}
|
||||
|
||||
protected void bindZonesToProvider(Class<? extends javax.inject.Provider<Map<String, String>>> providerClass) {
|
||||
bind(new TypeLiteral<Map<String, String>>() {
|
||||
}).annotatedWith(Zone.class).toProvider(providerClass).in(Scopes.SINGLETON);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
super.configure();
|
||||
bindZonesToProvider();
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@Zone
|
||||
protected Map<String, URI> provideZones(@Region final Map<String, URI> regionToEndpoint,
|
||||
@Zone Map<String, String> availabilityZoneToRegion) {
|
||||
return Maps.transformValues(availabilityZoneToRegion, new Function<String, URI>() {
|
||||
|
||||
@Override
|
||||
public URI apply(String from) {
|
||||
|
||||
return regionToEndpoint.get(from);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
}
|
|
@ -1,60 +0,0 @@
|
|||
/**
|
||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||
* contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. jclouds licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*/
|
||||
package org.jclouds.aws.config;
|
||||
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.Map;
|
||||
|
||||
import org.jclouds.logging.jdk.JDKLogger;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
@Test(sequential = true, groups = { "unit" })
|
||||
public class AWSWithZonesFormSigningRestClientModuleTest {
|
||||
|
||||
@Test
|
||||
public void testDefaultRegionWhenThereIsAMatch() {
|
||||
AWSRestClientModule<String,String> module = new WithZonesFormSigningRestClientModule<String,String>(
|
||||
String.class, String.class);
|
||||
|
||||
URI currentEndpoint = URI.create("http://region1");
|
||||
Map<String, URI> map = ImmutableMap.of("region1", currentEndpoint, "region2", URI.create("http://region2"));
|
||||
|
||||
assertEquals("region1", module.getDefaultRegion(currentEndpoint, map, new JDKLogger.JDKLoggerFactory()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDefaultRegionWhenThereIsNoMatch() {
|
||||
AWSRestClientModule<String,String> module = new WithZonesFormSigningRestClientModule<String,String>(
|
||||
String.class, String.class);
|
||||
|
||||
URI currentEndpoint = URI.create("http://region3");
|
||||
Map<String, URI> map = ImmutableMap.of("region1", currentEndpoint, "region2", URI.create("http://region2"));
|
||||
|
||||
assertEquals("region1", module.getDefaultRegion(currentEndpoint, map, new JDKLogger.JDKLoggerFactory()));
|
||||
}
|
||||
|
||||
}
|
|
@ -113,10 +113,14 @@ public class AWSEC2ComputeServiceContextModule extends BaseComputeServiceContext
|
|||
}
|
||||
|
||||
// duplicates EC2ComputeServiceContextModule; but that's easiest thing to do with guice; could extract to common util
|
||||
// TODO: have a another look at this (Adrian)
|
||||
@Override
|
||||
protected Supplier<Set<? extends Image>> supplyNonParsingImageCache(@Named(PROPERTY_SESSION_INTERVAL) long seconds,
|
||||
protected Supplier<Set<? extends Image>> supplyNonParsingImageCache(
|
||||
AtomicReference<AuthorizationException> authException, @Named(PROPERTY_SESSION_INTERVAL) long seconds,
|
||||
final Supplier<Set<? extends Image>> imageSupplier, Injector injector) {
|
||||
final Supplier<LoadingCache<RegionAndName, ? extends Image>> cache = injector.getInstance(Key.get(new TypeLiteral<Supplier<LoadingCache<RegionAndName, ? extends Image>>>() {}));
|
||||
final Supplier<LoadingCache<RegionAndName, ? extends Image>> cache = injector.getInstance(Key
|
||||
.get(new TypeLiteral<Supplier<LoadingCache<RegionAndName, ? extends Image>>>() {
|
||||
}));
|
||||
return new Supplier<Set<? extends Image>>() {
|
||||
@Override
|
||||
public Set<? extends Image> get() {
|
||||
|
|
|
@ -44,6 +44,7 @@ import org.jclouds.ec2.domain.RunningInstance;
|
|||
import org.jclouds.location.Region;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Supplier;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -56,7 +57,7 @@ public class AWSEC2ListNodesStrategy extends EC2ListNodesStrategy {
|
|||
protected final SpotInstanceRequestToAWSRunningInstance spotConverter;
|
||||
|
||||
@Inject
|
||||
protected AWSEC2ListNodesStrategy(AWSEC2AsyncClient client, @Region Set<String> regions,
|
||||
protected AWSEC2ListNodesStrategy(AWSEC2AsyncClient client, @Region Supplier<Set<String>> regions,
|
||||
Function<RunningInstance, NodeMetadata> runningInstanceToNodeMetadata,
|
||||
@Named(Constants.PROPERTY_USER_THREADS) ExecutorService executor,
|
||||
SpotInstanceRequestToAWSRunningInstance spotConverter) {
|
||||
|
@ -67,7 +68,7 @@ public class AWSEC2ListNodesStrategy extends EC2ListNodesStrategy {
|
|||
|
||||
@Override
|
||||
protected Iterable<? extends RunningInstance> pollRunningInstances() {
|
||||
Iterable<? extends AWSRunningInstance> spots = filter(transform(concat(transformParallel(regions,
|
||||
Iterable<? extends AWSRunningInstance> spots = filter(transform(concat(transformParallel(regions.get(),
|
||||
new Function<String, Future<Set<SpotInstanceRequest>>>() {
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
|
|
|
@ -72,14 +72,14 @@ public class AWSEC2ImageSupplier implements Supplier<Set<? extends Image>> {
|
|||
private final CallForImages.Factory factory;
|
||||
private final ExecutorService executor;
|
||||
|
||||
private final Iterable<String> regions;
|
||||
private final Supplier<Set<String>> regions;
|
||||
private final String amiQuery;
|
||||
private final Iterable<String> clusterRegions;
|
||||
private final String ccAmiQuery;
|
||||
private final Supplier<LoadingCache<RegionAndName, ? extends Image>> cache;
|
||||
|
||||
@Inject
|
||||
protected AWSEC2ImageSupplier(@Region Set<String> regions,
|
||||
protected AWSEC2ImageSupplier(@Region Supplier<Set<String>> regions,
|
||||
@Named(PROPERTY_EC2_AMI_QUERY) String amiQuery, @Named(PROPERTY_EC2_CC_REGIONS) String clusterRegions,
|
||||
@Named(PROPERTY_EC2_CC_AMI_QUERY) String ccAmiQuery,
|
||||
Supplier<LoadingCache<RegionAndName, ? extends Image>> cache,
|
||||
|
@ -98,7 +98,7 @@ public class AWSEC2ImageSupplier implements Supplier<Set<? extends Image>> {
|
|||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
@Override
|
||||
public Set<? extends Image> get() {
|
||||
Future<Iterable<Image>> normalImages = images(regions, amiQuery, PROPERTY_EC2_AMI_QUERY);
|
||||
Future<Iterable<Image>> normalImages = images(regions.get(), amiQuery, PROPERTY_EC2_AMI_QUERY);
|
||||
ImmutableSet<Image> clusterImages;
|
||||
try {
|
||||
clusterImages = ImmutableSet.copyOf(images(clusterRegions, ccAmiQuery, PROPERTY_EC2_CC_AMI_QUERY).get());
|
||||
|
|
|
@ -27,13 +27,13 @@ import javax.inject.Inject;
|
|||
|
||||
import org.jclouds.aws.ec2.domain.AWSRunningInstance;
|
||||
import org.jclouds.date.DateService;
|
||||
import org.jclouds.ec2.domain.Hypervisor;
|
||||
import org.jclouds.ec2.domain.Reservation;
|
||||
import org.jclouds.ec2.domain.RunningInstance;
|
||||
import org.jclouds.location.Region;
|
||||
import org.xml.sax.Attributes;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.google.inject.Provider;
|
||||
|
||||
|
@ -53,7 +53,7 @@ public class AWSDescribeInstancesResponseHandler extends
|
|||
private String value;
|
||||
|
||||
@Inject
|
||||
AWSDescribeInstancesResponseHandler(DateService dateService, @Region String defaultRegion,
|
||||
AWSDescribeInstancesResponseHandler(DateService dateService, @Region Supplier<String> defaultRegion,
|
||||
Provider<AWSRunningInstance.Builder> builderProvider, TagSetHandler tagSetHandler) {
|
||||
super(dateService, defaultRegion, builderProvider);
|
||||
}
|
||||
|
|
|
@ -26,6 +26,7 @@ import org.jclouds.ec2.domain.Reservation;
|
|||
import org.jclouds.ec2.domain.RunningInstance;
|
||||
import org.jclouds.location.Region;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.inject.Provider;
|
||||
|
||||
/**
|
||||
|
@ -39,7 +40,7 @@ import com.google.inject.Provider;
|
|||
public class AWSRunInstancesResponseHandler extends BaseAWSReservationHandler<Reservation<? extends RunningInstance>> {
|
||||
|
||||
@Inject
|
||||
AWSRunInstancesResponseHandler(DateService dateService, @Region String defaultRegion,
|
||||
AWSRunInstancesResponseHandler(DateService dateService, @Region Supplier<String> defaultRegion,
|
||||
Provider<AWSRunningInstance.Builder> builderProvider) {
|
||||
super(dateService, defaultRegion, builderProvider);
|
||||
}
|
||||
|
|
|
@ -45,6 +45,7 @@ import org.jclouds.logging.Logger;
|
|||
import org.xml.sax.Attributes;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.google.inject.Provider;
|
||||
|
@ -59,11 +60,11 @@ public abstract class BaseAWSReservationHandler<T> extends HandlerForGeneratedRe
|
|||
protected Logger logger = Logger.NULL;
|
||||
|
||||
protected final DateService dateService;
|
||||
protected final String defaultRegion;
|
||||
protected final Supplier<String> defaultRegion;
|
||||
protected final Provider<AWSRunningInstance.Builder> builderProvider;
|
||||
|
||||
@Inject
|
||||
public BaseAWSReservationHandler(DateService dateService, @Region String defaultRegion,
|
||||
public BaseAWSReservationHandler(DateService dateService, @Region Supplier<String> defaultRegion,
|
||||
Provider<AWSRunningInstance.Builder> builderProvider) {
|
||||
this.dateService = dateService;
|
||||
this.defaultRegion = defaultRegion;
|
||||
|
@ -221,7 +222,7 @@ public abstract class BaseAWSReservationHandler<T> extends HandlerForGeneratedRe
|
|||
|
||||
protected void refineBuilderBeforeAddingInstance() {
|
||||
String region = getRequest() != null ? AWSUtils.findRegionInArgsOrNull(getRequest()) : null;
|
||||
builder.region((region == null) ? defaultRegion : region);
|
||||
builder.region((region == null) ? defaultRegion.get() : region);
|
||||
}
|
||||
|
||||
protected abstract boolean endOfInstanceItem();
|
||||
|
@ -233,7 +234,7 @@ public abstract class BaseAWSReservationHandler<T> extends HandlerForGeneratedRe
|
|||
protected Reservation<? extends RunningInstance> newReservation() {
|
||||
String region = getRequest() != null ? AWSUtils.findRegionInArgsOrNull(getRequest()) : null;
|
||||
if (region == null)
|
||||
region = defaultRegion;
|
||||
region = defaultRegion.get();
|
||||
Reservation<? extends RunningInstance> info = new Reservation<RunningInstance>(region,
|
||||
reservationGroupIdToNames.values(), instances, ownerId, requesterId, reservationId);
|
||||
this.reservationGroupIdToNames = Maps.newLinkedHashMap();
|
||||
|
|
|
@ -26,7 +26,6 @@ import org.jclouds.aws.ec2.domain.LaunchSpecification.Builder;
|
|||
import org.jclouds.date.DateService;
|
||||
import org.jclouds.ec2.domain.BlockDeviceMapping;
|
||||
import org.jclouds.http.functions.ParseSax.HandlerForGeneratedRequestWithResult;
|
||||
import org.jclouds.location.Region;
|
||||
import org.jclouds.logging.Logger;
|
||||
import org.xml.sax.Attributes;
|
||||
|
||||
|
@ -40,15 +39,13 @@ public class LaunchSpecificationHandler extends HandlerForGeneratedRequestWithRe
|
|||
protected Logger logger = Logger.NULL;
|
||||
|
||||
protected final DateService dateService;
|
||||
protected final String defaultRegion;
|
||||
protected final Builder builder;
|
||||
protected final BlockDeviceMapping.Builder blockDeviceMappingBuilder;
|
||||
|
||||
@Inject
|
||||
public LaunchSpecificationHandler(DateService dateService, @Region String defaultRegion,
|
||||
LaunchSpecification.Builder builder, BlockDeviceMapping.Builder blockDeviceMappingBuilder) {
|
||||
public LaunchSpecificationHandler(DateService dateService, LaunchSpecification.Builder builder,
|
||||
BlockDeviceMapping.Builder blockDeviceMappingBuilder) {
|
||||
this.dateService = dateService;
|
||||
this.defaultRegion = defaultRegion;
|
||||
this.builder = builder;
|
||||
this.blockDeviceMappingBuilder = blockDeviceMappingBuilder;
|
||||
}
|
||||
|
|
|
@ -26,6 +26,8 @@ import org.jclouds.aws.util.AWSUtils;
|
|||
import org.jclouds.http.functions.ParseSax;
|
||||
import org.jclouds.location.Region;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Adrian Cole
|
||||
|
@ -36,7 +38,7 @@ public class PlacementGroupHandler extends
|
|||
|
||||
@Inject
|
||||
@Region
|
||||
String defaultRegion;
|
||||
Supplier<String> defaultRegion;
|
||||
|
||||
private String name;
|
||||
private String strategy = "cluster";
|
||||
|
@ -45,7 +47,7 @@ public class PlacementGroupHandler extends
|
|||
public PlacementGroup getResult() {
|
||||
String region = AWSUtils.findRegionInArgsOrNull(getRequest());
|
||||
if (region == null)
|
||||
region = defaultRegion;
|
||||
region = defaultRegion.get();
|
||||
PlacementGroup returnVal = new PlacementGroup(region, name, strategy, state);
|
||||
this.name = null;
|
||||
this.strategy = "cluster";
|
||||
|
|
|
@ -25,6 +25,8 @@ import org.jclouds.ec2.domain.ReservedInstancesOffering;
|
|||
import org.jclouds.http.functions.ParseSax;
|
||||
import org.jclouds.location.Region;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
|
||||
/**
|
||||
*
|
||||
* @see <a href="http://docs.amazonwebservices.com/AWSEC2/latest/APIReference/index.html?ApiReference-query-DescribeReservedInstancesOfferingsResponseSetItemType.html"
|
||||
|
@ -35,7 +37,7 @@ public class ReservedInstancesOfferingHandler extends
|
|||
ParseSax.HandlerForGeneratedRequestWithResult<ReservedInstancesOffering> {
|
||||
@Inject
|
||||
@Region
|
||||
String defaultRegion;
|
||||
Supplier<String> defaultRegion;
|
||||
|
||||
private StringBuilder currentText = new StringBuilder();
|
||||
|
||||
|
@ -50,7 +52,7 @@ public class ReservedInstancesOfferingHandler extends
|
|||
public ReservedInstancesOffering getResult() {
|
||||
String region = AWSUtils.findRegionInArgsOrNull(getRequest());
|
||||
if (region == null)
|
||||
region = defaultRegion;
|
||||
region = defaultRegion.get();
|
||||
|
||||
ReservedInstancesOffering returnVal = new ReservedInstancesOffering(region, availabilityZone, duration,
|
||||
fixedPrice, instanceType, productDescription, id, usagePrice);
|
||||
|
|
|
@ -26,6 +26,8 @@ import org.jclouds.date.DateService;
|
|||
import org.jclouds.http.functions.ParseSax;
|
||||
import org.jclouds.location.Region;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Adrian Cole
|
||||
|
@ -34,10 +36,10 @@ public class SpotHandler extends ParseSax.HandlerForGeneratedRequestWithResult<S
|
|||
private StringBuilder currentText = new StringBuilder();
|
||||
|
||||
protected final DateService dateService;
|
||||
protected final String defaultRegion;
|
||||
protected final Supplier<String> defaultRegion;
|
||||
|
||||
@Inject
|
||||
public SpotHandler(DateService dateService, @Region String defaultRegion) {
|
||||
public SpotHandler(DateService dateService, @Region Supplier<String> defaultRegion) {
|
||||
this.dateService = dateService;
|
||||
this.defaultRegion = defaultRegion;
|
||||
}
|
||||
|
@ -48,7 +50,7 @@ public class SpotHandler extends ParseSax.HandlerForGeneratedRequestWithResult<S
|
|||
try {
|
||||
String region = getRequest() == null ? null : AWSUtils.findRegionInArgsOrNull(getRequest());
|
||||
if (region == null)
|
||||
region = defaultRegion;
|
||||
region = defaultRegion.get();
|
||||
return builder.region(region).build();
|
||||
} finally {
|
||||
builder.clear();
|
||||
|
|
|
@ -18,7 +18,8 @@
|
|||
*/
|
||||
package org.jclouds.aws.ec2.xml;
|
||||
|
||||
import static org.jclouds.util.SaxUtils.*;
|
||||
import static org.jclouds.util.SaxUtils.currentOrNull;
|
||||
import static org.jclouds.util.SaxUtils.equalsOrSuffix;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
|
@ -31,6 +32,8 @@ import org.jclouds.location.Region;
|
|||
import org.xml.sax.Attributes;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Adrian Cole
|
||||
|
@ -39,7 +42,7 @@ public class SpotInstanceHandler extends ParseSax.HandlerForGeneratedRequestWith
|
|||
private StringBuilder currentText = new StringBuilder();
|
||||
|
||||
protected final DateService dateService;
|
||||
protected final String defaultRegion;
|
||||
protected final Supplier<String> defaultRegion;
|
||||
protected final Builder builder;
|
||||
protected boolean inLaunchSpecification;
|
||||
protected final LaunchSpecificationHandler launchSpecificationHandler;
|
||||
|
@ -47,7 +50,7 @@ public class SpotInstanceHandler extends ParseSax.HandlerForGeneratedRequestWith
|
|||
protected final TagSetHandler tagSetHandler;
|
||||
|
||||
@Inject
|
||||
public SpotInstanceHandler(DateService dateService, @Region String defaultRegion,
|
||||
public SpotInstanceHandler(DateService dateService, @Region Supplier<String> defaultRegion,
|
||||
LaunchSpecificationHandler launchSpecificationHandler, TagSetHandler tagSetHandler,
|
||||
SpotInstanceRequest.Builder builder) {
|
||||
this.dateService = dateService;
|
||||
|
@ -61,7 +64,7 @@ public class SpotInstanceHandler extends ParseSax.HandlerForGeneratedRequestWith
|
|||
try {
|
||||
String region = getRequest() != null ? AWSUtils.findRegionInArgsOrNull(getRequest()) : null;
|
||||
if (region == null)
|
||||
region = defaultRegion;
|
||||
region = defaultRegion.get();
|
||||
return builder.region(region).build();
|
||||
} finally {
|
||||
builder.clear();
|
||||
|
|
|
@ -323,6 +323,8 @@ public class AWSEC2TemplateBuilderLiveTest extends EC2TemplateBuilderLiveTest {
|
|||
new Log4JLoggingModule(), TrackingJavaUrlHttpCommandExecutorService.newTrackingModule(commandsInvoked)),
|
||||
overrides);
|
||||
|
||||
assert context.getComputeService().listAssignableLocations().size() < this.context.getComputeService().listAssignableLocations().size();
|
||||
|
||||
assertOnlyOneRegionQueriedForAvailabilityZone(commandsInvoked);
|
||||
|
||||
assert context.getComputeService().listImages().size() < this.context.getComputeService().listImages().size();
|
||||
|
|
|
@ -18,10 +18,10 @@
|
|||
*/
|
||||
package org.jclouds.aws.ec2.compute.strategy;
|
||||
|
||||
import static org.easymock.EasyMock.createMock;
|
||||
import static org.easymock.EasyMock.expect;
|
||||
import static org.easymock.classextension.EasyMock.createMock;
|
||||
import static org.easymock.classextension.EasyMock.replay;
|
||||
import static org.easymock.classextension.EasyMock.verify;
|
||||
import static org.easymock.EasyMock.replay;
|
||||
import static org.easymock.EasyMock.verify;
|
||||
import static org.jclouds.aws.ec2.compute.AWSEC2TemplateOptions.Builder.keyPair;
|
||||
import static org.jclouds.ec2.compute.strategy.CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptionsTest.CREDENTIALS;
|
||||
import static org.jclouds.ec2.compute.strategy.CreateKeyPairAndSecurityGroupsAsNeededAndReturnRunOptionsTest.KEYPAIR;
|
||||
|
|
|
@ -36,7 +36,6 @@ import org.jclouds.ec2.domain.Image;
|
|||
import org.jclouds.ec2.domain.RootDeviceType;
|
||||
import org.jclouds.ec2.domain.Image.ImageType;
|
||||
import org.jclouds.logging.log4j.config.Log4JLoggingModule;
|
||||
import org.jclouds.rest.AuthorizationException;
|
||||
import org.jclouds.rest.RestContext;
|
||||
import org.testng.annotations.AfterTest;
|
||||
import org.testng.annotations.BeforeGroups;
|
||||
|
|
|
@ -18,12 +18,14 @@
|
|||
*/
|
||||
package org.jclouds.aws.ec2.services;
|
||||
|
||||
import static com.google.common.collect.Maps.transformValues;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
|
@ -35,17 +37,23 @@ import org.jclouds.date.DateService;
|
|||
import org.jclouds.ec2.compute.domain.RegionAndName;
|
||||
import org.jclouds.http.HttpRequest;
|
||||
import org.jclouds.http.RequiresHttp;
|
||||
import org.jclouds.location.config.LocationModule;
|
||||
import org.jclouds.location.suppliers.RegionIdToURISupplier;
|
||||
import org.jclouds.location.suppliers.RegionIdToZoneIdsSupplier;
|
||||
import org.jclouds.rest.ConfiguresRestClient;
|
||||
import org.jclouds.rest.RestClientTest;
|
||||
import org.jclouds.rest.RestContextFactory;
|
||||
import org.jclouds.rest.RestContextSpec;
|
||||
import org.jclouds.util.Suppliers2;
|
||||
import org.testng.annotations.BeforeTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.cache.LoadingCache;
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.cache.CacheBuilder;
|
||||
import com.google.common.cache.CacheLoader;
|
||||
import com.google.common.cache.LoadingCache;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.inject.Module;
|
||||
import com.google.inject.Provides;
|
||||
|
||||
|
@ -64,13 +72,9 @@ public abstract class BaseAWSEC2AsyncClientTest<T> extends RestClientTest<T> {
|
|||
return "2009-11-08T15:54:08.897Z";
|
||||
}
|
||||
|
||||
protected void bindRegionsToProvider() {
|
||||
bindRegionsToProvider(Regions.class);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
LoadingCache<RegionAndName, Image> provide(){
|
||||
LoadingCache<RegionAndName, Image> provide() {
|
||||
return CacheBuilder.newBuilder().build(new CacheLoader<RegionAndName, Image>() {
|
||||
|
||||
@Override
|
||||
|
@ -80,24 +84,30 @@ public abstract class BaseAWSEC2AsyncClientTest<T> extends RestClientTest<T> {
|
|||
|
||||
});
|
||||
}
|
||||
static class Regions implements javax.inject.Provider<Map<String, URI>> {
|
||||
@Override
|
||||
public Map<String, URI> get() {
|
||||
return ImmutableMap.<String, URI> of(Region.EU_WEST_1, URI.create("https://ec2.eu-west-1.amazonaws.com"),
|
||||
Region.US_EAST_1, URI.create("https://ec2.us-east-1.amazonaws.com"), Region.US_WEST_1,
|
||||
URI.create("https://ec2.us-west-1.amazonaws.com"));
|
||||
}
|
||||
}
|
||||
|
||||
protected void bindZonesToProvider() {
|
||||
bindZonesToProvider(Zones.class);
|
||||
}
|
||||
@Override
|
||||
protected void installLocations() {
|
||||
install(new LocationModule());
|
||||
bind(RegionIdToURISupplier.class).toInstance(new RegionIdToURISupplier() {
|
||||
|
||||
static class Zones implements javax.inject.Provider<Map<String, String>> {
|
||||
@Override
|
||||
public Map<String, String> get() {
|
||||
return ImmutableMap.<String, String> of("us-east-1a", "us-east-1");
|
||||
}
|
||||
@Override
|
||||
public Map<String, Supplier<URI>> get() {
|
||||
return transformValues(ImmutableMap.<String, URI> of(Region.EU_WEST_1, URI
|
||||
.create("https://ec2.eu-west-1.amazonaws.com"), Region.US_EAST_1, URI
|
||||
.create("https://ec2.us-east-1.amazonaws.com"), Region.US_WEST_1, URI
|
||||
.create("https://ec2.us-west-1.amazonaws.com")), Suppliers2.<URI> ofInstanceFunction());
|
||||
}
|
||||
|
||||
});
|
||||
bind(RegionIdToZoneIdsSupplier.class).toInstance(new RegionIdToZoneIdsSupplier() {
|
||||
|
||||
@Override
|
||||
public Map<String, Supplier<Set<String>>> get() {
|
||||
return transformValues(ImmutableMap.<String, Set<String>> of("us-east-1", ImmutableSet.of("us-east-1a",
|
||||
"us-east-1b", "us-east-1c", "us-east-1b")), Suppliers2.<Set<String>> ofInstanceFunction());
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -42,11 +42,14 @@ import org.jclouds.location.Region;
|
|||
import org.testng.annotations.BeforeTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.base.Suppliers;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Injector;
|
||||
import com.google.inject.TypeLiteral;
|
||||
|
||||
/**
|
||||
* Tests behavior of {@code AWSDescribeInstancesResponseHandler}
|
||||
|
@ -243,7 +246,7 @@ public class AWSDescribeInstancesResponseHandlerTest extends BaseEC2HandlerTest
|
|||
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(String.class).annotatedWith(Region.class).toInstance("us-east-1");
|
||||
bind(new TypeLiteral<Supplier<String>>(){}).annotatedWith(Region.class).toInstance(Suppliers.ofInstance("us-east-1"));
|
||||
bind(RunningInstance.Builder.class).to(AWSRunningInstance.Builder.class);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/**
|
||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||
s * Licensed to jclouds, Inc. (jclouds) under one or more
|
||||
* contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. jclouds licenses this file
|
||||
|
@ -18,9 +18,9 @@
|
|||
*/
|
||||
package org.jclouds.aws.ec2.xml;
|
||||
|
||||
import static org.easymock.EasyMock.createMock;
|
||||
import static org.easymock.EasyMock.expect;
|
||||
import static org.easymock.classextension.EasyMock.createMock;
|
||||
import static org.easymock.classextension.EasyMock.replay;
|
||||
import static org.easymock.EasyMock.replay;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
@ -41,10 +41,13 @@ import org.jclouds.rest.internal.GeneratedHttpRequest;
|
|||
import org.testng.annotations.BeforeTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.base.Suppliers;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.TypeLiteral;
|
||||
|
||||
/**
|
||||
* Tests behavior of {@code RunInstancesResponseHandler}
|
||||
|
@ -65,7 +68,7 @@ public class AWSRunInstancesResponseHandlerTest extends BaseEC2HandlerTest {
|
|||
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(String.class).annotatedWith(Region.class).toInstance("us-east-1");
|
||||
bind(new TypeLiteral<Supplier<String>>(){}).annotatedWith(Region.class).toInstance(Suppliers.ofInstance("us-east-1"));
|
||||
bind(RunningInstance.Builder.class).to(AWSRunningInstance.Builder.class);
|
||||
}
|
||||
|
||||
|
|
|
@ -29,8 +29,11 @@ import org.jclouds.http.functions.BaseHandlerTest;
|
|||
import org.jclouds.location.Region;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.base.Suppliers;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.TypeLiteral;
|
||||
|
||||
/**
|
||||
* Tests behavior of {@code DescribeSpotPriceHistoryResponseHandler}
|
||||
|
@ -58,7 +61,7 @@ public class DescribeSpotPriceHistoryResponseHandlerTest extends BaseHandlerTest
|
|||
|
||||
@Override
|
||||
protected void configure() {
|
||||
bindConstant().annotatedWith(Region.class).to("us-west-1");
|
||||
bind(new TypeLiteral<Supplier<String>>(){}).annotatedWith(Region.class).toInstance(Suppliers.ofInstance("us-west-1"));
|
||||
}
|
||||
|
||||
}).getInstance(DescribeSpotPriceHistoryResponseHandler.class)).parse(is);
|
||||
|
|
|
@ -18,9 +18,9 @@
|
|||
*/
|
||||
package org.jclouds.aws.ec2.xml;
|
||||
|
||||
import static org.easymock.EasyMock.createMock;
|
||||
import static org.easymock.EasyMock.expect;
|
||||
import static org.easymock.classextension.EasyMock.createMock;
|
||||
import static org.easymock.classextension.EasyMock.replay;
|
||||
import static org.easymock.EasyMock.replay;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
@ -37,9 +37,12 @@ import org.jclouds.rest.internal.GeneratedHttpRequest;
|
|||
import org.testng.annotations.BeforeTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.base.Suppliers;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.TypeLiteral;
|
||||
|
||||
/**
|
||||
* Tests behavior of {@code SpotInstanceHandler}
|
||||
|
@ -60,7 +63,7 @@ public class SpotInstanceHandlerTest extends BaseEC2HandlerTest {
|
|||
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(String.class).annotatedWith(Region.class).toInstance("us-east-1");
|
||||
bind(new TypeLiteral<Supplier<String>>(){}).annotatedWith(Region.class).toInstance(Suppliers.ofInstance("us-east-1"));
|
||||
}
|
||||
|
||||
});
|
||||
|
|
|
@ -18,9 +18,9 @@
|
|||
*/
|
||||
package org.jclouds.aws.ec2.xml;
|
||||
|
||||
import static org.easymock.EasyMock.createMock;
|
||||
import static org.easymock.EasyMock.expect;
|
||||
import static org.easymock.classextension.EasyMock.createMock;
|
||||
import static org.easymock.classextension.EasyMock.replay;
|
||||
import static org.easymock.EasyMock.replay;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
@ -38,11 +38,14 @@ import org.testng.annotations.BeforeTest;
|
|||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.base.Suppliers;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.TypeLiteral;
|
||||
|
||||
/**
|
||||
* Tests behavior of {@code SpotInstancesHandler}
|
||||
|
@ -63,7 +66,7 @@ public class SpotInstancesHandlerTest extends BaseEC2HandlerTest {
|
|||
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(String.class).annotatedWith(Region.class).toInstance("us-east-1");
|
||||
bind(new TypeLiteral<Supplier<String>>(){}).annotatedWith(Region.class).toInstance(Suppliers.ofInstance("us-east-1"));
|
||||
}
|
||||
|
||||
});
|
||||
|
|
|
@ -40,6 +40,8 @@ import org.jclouds.s3.S3Client;
|
|||
import org.jclouds.s3.binders.BindAsHostPrefixIfConfigured;
|
||||
import org.jclouds.s3.config.S3RestClientModule;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.base.Suppliers;
|
||||
import com.google.inject.Provides;
|
||||
|
||||
/**
|
||||
|
@ -51,16 +53,9 @@ import com.google.inject.Provides;
|
|||
@ConfiguresRestClient
|
||||
public class AWSS3RestClientModule extends S3RestClientModule<AWSS3Client, AWSS3AsyncClient> {
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@Bucket
|
||||
protected URI provideBucketURI(@Named(PROPERTY_REGION + "." + US_STANDARD + "." + ENDPOINT) String endpoint) {
|
||||
return URI.create(endpoint);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String defaultRegionForBucket(@Region String defaultRegion) {
|
||||
return US_STANDARD;
|
||||
protected Supplier<String> defaultRegionForBucket(@Region Supplier<String> defaultRegion) {
|
||||
return Suppliers.ofInstance(US_STANDARD);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -68,7 +63,14 @@ public class AWSS3RestClientModule extends S3RestClientModule<AWSS3Client, AWSS3
|
|||
bind(BindAsHostPrefixIfConfigured.class).to(AssignCorrectHostnameAndBindAsHostPrefixIfConfigured.class);
|
||||
super.configure();
|
||||
}
|
||||
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@Bucket
|
||||
protected Supplier<URI> provideBucketURI(@Named(PROPERTY_REGION + "." + US_STANDARD + "." + ENDPOINT) String endpoint){
|
||||
return Suppliers.ofInstance(URI.create(endpoint));
|
||||
}
|
||||
|
||||
public AWSS3RestClientModule() {
|
||||
super(AWSS3Client.class, AWSS3AsyncClient.class);
|
||||
}
|
||||
|
|
|
@ -20,7 +20,6 @@ package org.jclouds.aws.s3;
|
|||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.URI;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
|
@ -111,16 +110,16 @@ public class AWSS3AsyncClientTest extends org.jclouds.s3.S3AsyncClientTest<AWSS3
|
|||
Method method = AWSS3AsyncClient.class.getMethod("getBucketLocation", String.class);
|
||||
HttpRequest request = processor.createRequest(method, "bucket");
|
||||
|
||||
assertRequestLineEquals(request, "GET https://bucket.bucketendpoint/?location HTTP/1.1");
|
||||
assertNonPayloadHeadersEqual(request, "Host: bucket.bucketendpoint\n");
|
||||
assertRequestLineEquals(request, "GET https://bucket.s3.amazonaws.com/?location HTTP/1.1");
|
||||
assertNonPayloadHeadersEqual(request, "Host: bucket.s3.amazonaws.com\n");
|
||||
assertPayloadEquals(request, null, null, false);
|
||||
|
||||
request = filter.filter(request);
|
||||
|
||||
assertRequestLineEquals(request, "GET https://bucket.bucketendpoint/?location HTTP/1.1");
|
||||
assertRequestLineEquals(request, "GET https://bucket.s3.amazonaws.com/?location HTTP/1.1");
|
||||
assertNonPayloadHeadersEqual(
|
||||
request,
|
||||
"Authorization: AWS identity:2fFTeYJTDwiJmaAkKj732RjNbOg=\nDate: 2009-11-08T15:54:08.897Z\nHost: bucket.bucketendpoint\n");
|
||||
"Authorization: AWS identity:2fFTeYJTDwiJmaAkKj732RjNbOg=\nDate: 2009-11-08T15:54:08.897Z\nHost: bucket.s3.amazonaws.com\n");
|
||||
assertPayloadEquals(request, null, null, false);
|
||||
|
||||
assertResponseParserClassEquals(method, request, ParseSax.class);
|
||||
|
@ -137,8 +136,8 @@ public class AWSS3AsyncClientTest extends org.jclouds.s3.S3AsyncClientTest<AWSS3
|
|||
PutBucketOptions[].class);
|
||||
HttpRequest request = processor.createRequest(method, (String) null, "bucket");
|
||||
|
||||
assertRequestLineEquals(request, "PUT https://bucket.bucketendpoint/ HTTP/1.1");
|
||||
assertNonPayloadHeadersEqual(request, "Host: bucket.bucketendpoint\n");
|
||||
assertRequestLineEquals(request, "PUT https://bucket.s3.amazonaws.com/ HTTP/1.1");
|
||||
assertNonPayloadHeadersEqual(request, "Host: bucket.s3.amazonaws.com\n");
|
||||
assertPayloadEquals(request, null, null, false);
|
||||
|
||||
assertResponseParserClassEquals(method, request, ReturnTrueIf2xx.class);
|
||||
|
@ -245,8 +244,8 @@ public class AWSS3AsyncClientTest extends org.jclouds.s3.S3AsyncClientTest<AWSS3
|
|||
PutBucketOptions[].class);
|
||||
HttpRequest request = processor.createRequest(method, "EU", "bucket");
|
||||
|
||||
assertRequestLineEquals(request, "PUT https://bucket.bucketendpoint/ HTTP/1.1");
|
||||
assertNonPayloadHeadersEqual(request, "Host: bucket.bucketendpoint\n");
|
||||
assertRequestLineEquals(request, "PUT https://bucket.s3.amazonaws.com/ HTTP/1.1");
|
||||
assertNonPayloadHeadersEqual(request, "Host: bucket.s3.amazonaws.com\n");
|
||||
assertPayloadEquals(request,
|
||||
"<CreateBucketConfiguration><LocationConstraint>EU</LocationConstraint></CreateBucketConfiguration>",
|
||||
"text/xml", false);
|
||||
|
@ -273,11 +272,6 @@ public class AWSS3AsyncClientTest extends org.jclouds.s3.S3AsyncClientTest<AWSS3
|
|||
return returnVal;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected URI provideBucketURI(String endpoint) {
|
||||
return URI.create("https://bucketendpoint");
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String provideTimeStamp(@TimeStamp Supplier<String> cache) {
|
||||
return "2009-11-08T15:54:08.897Z";
|
||||
|
|
|
@ -21,6 +21,7 @@ package org.jclouds.aws.s3.binders;
|
|||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.inject.Provider;
|
||||
import javax.ws.rs.core.UriBuilder;
|
||||
|
@ -30,12 +31,13 @@ import org.jclouds.location.functions.RegionToEndpointOrProviderIfNull;
|
|||
import org.jclouds.rest.binders.BindAsHostPrefix;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.base.Suppliers;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.sun.jersey.api.uri.UriBuilderImpl;
|
||||
|
||||
/**
|
||||
* Tests behavior of
|
||||
* {@code AssignCorrectHostnameAndBindAsHostPrefixIfConfigured}
|
||||
* Tests behavior of {@code AssignCorrectHostnameAndBindAsHostPrefixIfConfigured}
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
|
@ -56,11 +58,14 @@ public class AssignCorrectHostnameAndBindAsHostPrefixIfConfiguredTest {
|
|||
HttpRequest request = new HttpRequest("GET", URI.create("https://s3.amazonaws.com"));
|
||||
|
||||
AssignCorrectHostnameAndBindAsHostPrefixIfConfigured binder = new AssignCorrectHostnameAndBindAsHostPrefixIfConfigured(
|
||||
new BindAsHostPrefix(uriBuilderProvider), new RegionToEndpointOrProviderIfNull("aws-s3",
|
||||
URI.create("https://s3.amazonaws.com"), ImmutableMap.of("us-standard",
|
||||
URI.create("https://s3.amazonaws.com"), "us-west-1",
|
||||
URI.create("https://s3-us-west-1.amazonaws.com"))), uriBuilderProvider,
|
||||
ImmutableMap.<String, String> of());
|
||||
new BindAsHostPrefix(uriBuilderProvider), new RegionToEndpointOrProviderIfNull("aws-s3", Suppliers
|
||||
.ofInstance(URI.create("https://s3.amazonaws.com")),
|
||||
|
||||
Suppliers.<Map<String, Supplier<URI>>> ofInstance(ImmutableMap.of("us-standard", Suppliers
|
||||
.ofInstance(URI.create("https://s3.amazonaws.com")), "us-west-1", Suppliers.ofInstance(URI
|
||||
.create("https://s3-us-west-1.amazonaws.com"))))),
|
||||
|
||||
uriBuilderProvider, ImmutableMap.<String, String> of());
|
||||
|
||||
request = binder.bindToRequest(request, "bucket");
|
||||
assertEquals(request.getRequestLine(), "GET https://bucket.s3.amazonaws.com HTTP/1.1");
|
||||
|
@ -71,11 +76,14 @@ public class AssignCorrectHostnameAndBindAsHostPrefixIfConfiguredTest {
|
|||
HttpRequest request = new HttpRequest("GET", URI.create("https://s3.amazonaws.com"));
|
||||
|
||||
AssignCorrectHostnameAndBindAsHostPrefixIfConfigured binder = new AssignCorrectHostnameAndBindAsHostPrefixIfConfigured(
|
||||
new BindAsHostPrefix(uriBuilderProvider), new RegionToEndpointOrProviderIfNull("aws-s3",
|
||||
URI.create("https://s3.amazonaws.com"), ImmutableMap.of("us-standard",
|
||||
URI.create("https://s3.amazonaws.com"), "us-west-1",
|
||||
URI.create("https://s3-us-west-1.amazonaws.com"))), uriBuilderProvider,
|
||||
ImmutableMap.<String, String> of("bucket", "us-west-1"));
|
||||
new BindAsHostPrefix(uriBuilderProvider), new RegionToEndpointOrProviderIfNull("aws-s3", Suppliers
|
||||
.ofInstance(URI.create("https://s3.amazonaws.com")),
|
||||
|
||||
Suppliers.<Map<String, Supplier<URI>>> ofInstance(ImmutableMap.of("us-standard", Suppliers
|
||||
.ofInstance(URI.create("https://s3.amazonaws.com")), "us-west-1", Suppliers.ofInstance(URI
|
||||
.create("https://s3-us-west-1.amazonaws.com"))))),
|
||||
|
||||
uriBuilderProvider, ImmutableMap.<String, String> of("bucket", "us-west-1"));
|
||||
|
||||
request = binder.bindToRequest(request, "bucket");
|
||||
assertEquals(request.getRequestLine(), "GET https://bucket.s3-us-west-1.amazonaws.com HTTP/1.1");
|
||||
|
|
Loading…
Reference in New Issue