mirror of https://github.com/apache/jclouds.git
Issue 418: updated location object to include metadata and iso3166codes
This commit is contained in:
parent
3263d22bfc
commit
675563c96a
|
@ -19,10 +19,6 @@
|
|||
|
||||
package org.jclouds.atmos.blobstore.config;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.atmos.AtmosAsyncClient;
|
||||
import org.jclouds.atmos.AtmosClient;
|
||||
import org.jclouds.atmos.blobstore.AtmosAsyncBlobStore;
|
||||
|
@ -37,17 +33,9 @@ import org.jclouds.blobstore.attr.ConsistencyModel;
|
|||
import org.jclouds.blobstore.config.BlobStoreMapModule;
|
||||
import org.jclouds.blobstore.internal.BlobStoreContextImpl;
|
||||
import org.jclouds.blobstore.strategy.ContainsValueInListStrategy;
|
||||
import org.jclouds.collect.Memoized;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
import org.jclouds.location.Provider;
|
||||
import org.jclouds.location.config.JustProviderLocationModule;
|
||||
|
||||
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.Provides;
|
||||
import com.google.inject.Scopes;
|
||||
import com.google.inject.TypeLiteral;
|
||||
|
||||
|
@ -64,24 +52,10 @@ public class AtmosBlobStoreContextModule extends AbstractModule {
|
|||
bind(ConsistencyModel.class).toInstance(ConsistencyModel.EVENTUAL);
|
||||
bind(AsyncBlobStore.class).to(AtmosAsyncBlobStore.class).in(Scopes.SINGLETON);
|
||||
bind(BlobStore.class).to(AtmosBlobStore.class).in(Scopes.SINGLETON);
|
||||
bind(BlobStoreContext.class).to(
|
||||
new TypeLiteral<BlobStoreContextImpl<AtmosClient, AtmosAsyncClient>>() {
|
||||
}).in(Scopes.SINGLETON);
|
||||
bind(BlobStoreContext.class).to(new TypeLiteral<BlobStoreContextImpl<AtmosClient, AtmosAsyncClient>>() {
|
||||
}).in(Scopes.SINGLETON);
|
||||
bind(ContainsValueInListStrategy.class).to(FindMD5InUserMetadata.class);
|
||||
bind(BlobRequestSigner.class).to(AtmosBlobRequestSigner.class);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@Memoized
|
||||
Supplier<Set<? extends Location>> provideLocations(Supplier<Location> defaultLocation) {
|
||||
return Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet.of(defaultLocation.get()));
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
Supplier<Location> provideDefaultLocation(@Provider String providerName) {
|
||||
return Suppliers
|
||||
.<Location> ofInstance(new LocationImpl(LocationScope.PROVIDER, providerName, providerName, null));
|
||||
install(new JustProviderLocationModule());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,47 +0,0 @@
|
|||
/**
|
||||
*
|
||||
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||
*
|
||||
* ====================================================================
|
||||
* Licensed 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.cloudfiles;
|
||||
|
||||
import static org.jclouds.Constants.PROPERTY_ENDPOINT;
|
||||
import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGIONS;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
import org.jclouds.openstack.swift.SwiftPropertiesBuilder;
|
||||
|
||||
/**
|
||||
* Builds properties used in CloudFiles Connections
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
public class CloudFilesPropertiesBuilder extends SwiftPropertiesBuilder {
|
||||
@Override
|
||||
protected Properties defaultProperties() {
|
||||
Properties properties = super.defaultProperties();
|
||||
properties.setProperty(PROPERTY_REGIONS, "US");
|
||||
properties.setProperty(PROPERTY_ENDPOINT, "https://auth.api.rackspacecloud.com");
|
||||
return properties;
|
||||
}
|
||||
|
||||
public CloudFilesPropertiesBuilder(Properties properties) {
|
||||
super(properties);
|
||||
}
|
||||
|
||||
}
|
|
@ -21,13 +21,13 @@ package org.jclouds.cloudservers.compute.config;
|
|||
|
||||
import java.util.Set;
|
||||
|
||||
import org.jclouds.cloudservers.compute.suppliers.CloudServersHardwareSupplier;
|
||||
import org.jclouds.cloudservers.compute.suppliers.CloudServersImageSupplier;
|
||||
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.cloudservers.compute.suppliers.CloudServersHardwareSupplier;
|
||||
import org.jclouds.cloudservers.compute.suppliers.CloudServersImageSupplier;
|
||||
import org.jclouds.location.suppliers.SupplyPredefinedRegions;
|
||||
import org.jclouds.location.suppliers.JustProvider;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
|
||||
|
@ -49,6 +49,6 @@ public class CloudServersBindComputeSuppliersByClass extends BindComputeSupplier
|
|||
|
||||
@Override
|
||||
protected Class<? extends Supplier<Set<? extends Location>>> defineLocationSupplier() {
|
||||
return SupplyPredefinedRegions.class;
|
||||
return JustProvider.class;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,7 +20,6 @@
|
|||
package org.jclouds.cloudservers.compute.config;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
|
@ -41,8 +40,6 @@ import org.jclouds.compute.domain.NodeState;
|
|||
import org.jclouds.compute.domain.OperatingSystem;
|
||||
import org.jclouds.compute.internal.BaseComputeService;
|
||||
import org.jclouds.compute.internal.ComputeServiceContextImpl;
|
||||
import org.jclouds.location.Region;
|
||||
import org.jclouds.location.config.ProvideRegionsViaProperties;
|
||||
import org.jclouds.rest.RestContext;
|
||||
import org.jclouds.rest.internal.RestContextImpl;
|
||||
|
||||
|
@ -82,8 +79,6 @@ public class CloudServersComputeServiceDependenciesModule extends AbstractModule
|
|||
bind(new TypeLiteral<RestContext<CloudServersClient, CloudServersAsyncClient>>() {
|
||||
}).to(new TypeLiteral<RestContextImpl<CloudServersClient, CloudServersAsyncClient>>() {
|
||||
}).in(Scopes.SINGLETON);
|
||||
bind(new TypeLiteral<Set<String>>() {
|
||||
}).annotatedWith(Region.class).toProvider(ProvideRegionsViaProperties.class).in(Scopes.SINGLETON);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
|
|
|
@ -31,6 +31,8 @@ import javax.inject.Inject;
|
|||
import javax.inject.Named;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.cloudservers.domain.Server;
|
||||
import org.jclouds.cloudservers.domain.ServerStatus;
|
||||
import org.jclouds.collect.Memoized;
|
||||
import org.jclouds.compute.domain.Hardware;
|
||||
import org.jclouds.compute.domain.Image;
|
||||
|
@ -41,11 +43,9 @@ import org.jclouds.compute.domain.OperatingSystem;
|
|||
import org.jclouds.compute.reference.ComputeServiceConstants;
|
||||
import org.jclouds.domain.Credentials;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationBuilder;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
import org.jclouds.logging.Logger;
|
||||
import org.jclouds.cloudservers.domain.Server;
|
||||
import org.jclouds.cloudservers.domain.ServerStatus;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Predicate;
|
||||
|
@ -60,7 +60,7 @@ public class ServerToNodeMetadata implements Function<Server, NodeMetadata> {
|
|||
@Resource
|
||||
@Named(ComputeServiceConstants.COMPUTE_LOGGER)
|
||||
protected Logger logger = Logger.NULL;
|
||||
|
||||
|
||||
protected final Supplier<Location> location;
|
||||
protected final Map<String, Credentials> credentialStore;
|
||||
protected final Map<ServerStatus, NodeState> serverToNodeState;
|
||||
|
@ -109,7 +109,8 @@ public class ServerToNodeMetadata implements Function<Server, NodeMetadata> {
|
|||
NodeMetadataBuilder builder = new NodeMetadataBuilder();
|
||||
builder.ids(from.getId() + "");
|
||||
builder.name(from.getName());
|
||||
builder.location(new LocationImpl(LocationScope.HOST, from.getHostId(), from.getHostId(), location.get()));
|
||||
builder.location(new LocationBuilder().scope(LocationScope.HOST).id(from.getHostId()).description(
|
||||
from.getHostId()).parent(location.get()).build());
|
||||
builder.userMetadata(from.getMetadata());
|
||||
builder.tag(parseTagFromName(from.getName()));
|
||||
builder.imageId(from.getImageId() + "");
|
||||
|
|
|
@ -23,16 +23,16 @@ import static org.testng.Assert.assertEquals;
|
|||
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
import org.jclouds.cloudservers.domain.Flavor;
|
||||
import org.jclouds.cloudservers.functions.ParseFlavorFromJsonResponseTest;
|
||||
import org.jclouds.compute.domain.Hardware;
|
||||
import org.jclouds.compute.domain.HardwareBuilder;
|
||||
import org.jclouds.compute.domain.Processor;
|
||||
import org.jclouds.compute.domain.Volume;
|
||||
import org.jclouds.compute.domain.VolumeBuilder;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationBuilder;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
import org.jclouds.cloudservers.domain.Flavor;
|
||||
import org.jclouds.cloudservers.functions.ParseFlavorFromJsonResponseTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
|
@ -42,20 +42,14 @@ import com.google.common.collect.ImmutableList;
|
|||
*/
|
||||
@Test(groups = "unit")
|
||||
public class FlavorToHardwareTest {
|
||||
Location provider = new LocationImpl(LocationScope.ZONE, "dallas", "description", null);
|
||||
Location provider = new LocationBuilder().scope(LocationScope.ZONE).id("dallas").description("description").build();
|
||||
|
||||
@Test
|
||||
public void test() throws UnknownHostException {
|
||||
assertEquals(
|
||||
convertFlavor(),
|
||||
new HardwareBuilder()
|
||||
.ids("1")
|
||||
.name("256 MB Server")
|
||||
.processors(ImmutableList.of(new Processor(1.0, 1.0)))
|
||||
.ram(256)
|
||||
.volumes(
|
||||
ImmutableList.of(new VolumeBuilder().type(Volume.Type.LOCAL).size(10.0f).durable(true)
|
||||
.bootDevice(true).build())).build());
|
||||
assertEquals(convertFlavor(), new HardwareBuilder().ids("1").name("256 MB Server").processors(
|
||||
ImmutableList.of(new Processor(1.0, 1.0))).ram(256).volumes(
|
||||
ImmutableList.of(new VolumeBuilder().type(Volume.Type.LOCAL).size(10.0f).durable(true).bootDevice(true)
|
||||
.build())).build());
|
||||
}
|
||||
|
||||
public static Hardware convertFlavor() {
|
||||
|
|
|
@ -25,6 +25,10 @@ import java.net.UnknownHostException;
|
|||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.jclouds.cloudservers.compute.config.CloudServersComputeServiceDependenciesModule;
|
||||
import org.jclouds.cloudservers.domain.Server;
|
||||
import org.jclouds.cloudservers.domain.ServerStatus;
|
||||
import org.jclouds.cloudservers.functions.ParseServerFromJsonResponseTest;
|
||||
import org.jclouds.compute.domain.Hardware;
|
||||
import org.jclouds.compute.domain.HardwareBuilder;
|
||||
import org.jclouds.compute.domain.Image;
|
||||
|
@ -38,12 +42,8 @@ import org.jclouds.compute.domain.Volume;
|
|||
import org.jclouds.compute.domain.VolumeBuilder;
|
||||
import org.jclouds.domain.Credentials;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationBuilder;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
import org.jclouds.cloudservers.compute.config.CloudServersComputeServiceDependenciesModule;
|
||||
import org.jclouds.cloudservers.domain.Server;
|
||||
import org.jclouds.cloudservers.domain.ServerStatus;
|
||||
import org.jclouds.cloudservers.functions.ParseServerFromJsonResponseTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.base.Suppliers;
|
||||
|
@ -56,7 +56,7 @@ import com.google.common.collect.ImmutableSet;
|
|||
*/
|
||||
@Test(groups = "unit")
|
||||
public class ServerToNodeMetadataTest {
|
||||
Location provider = new LocationImpl(LocationScope.ZONE, "dallas", "description", null);
|
||||
Location provider = new LocationBuilder().scope(LocationScope.ZONE).id("dallas").description("description").build();
|
||||
|
||||
@Test
|
||||
public void testApplyWhereImageAndHardwareNotFoundButCredentialsFound() throws UnknownHostException {
|
||||
|
@ -68,18 +68,16 @@ public class ServerToNodeMetadataTest {
|
|||
Server server = ParseServerFromJsonResponseTest.parseServer();
|
||||
|
||||
ServerToNodeMetadata parser = new ServerToNodeMetadata(serverStateToNodeState, ImmutableMap
|
||||
.<String, Credentials> of("node#1234", creds), Suppliers.<Set<? extends Image>> ofInstance(images), Suppliers
|
||||
.ofInstance(provider), Suppliers.<Set<? extends Hardware>> ofInstance(hardwares));
|
||||
.<String, Credentials> of("node#1234", creds), Suppliers.<Set<? extends Image>> ofInstance(images),
|
||||
Suppliers.ofInstance(provider), Suppliers.<Set<? extends Hardware>> ofInstance(hardwares));
|
||||
|
||||
NodeMetadata metadata = parser.apply(server);
|
||||
|
||||
assertEquals(metadata, new NodeMetadataBuilder().state(NodeState.PENDING).publicAddresses(
|
||||
ImmutableSet.of("67.23.10.132", "67.23.10.131")).privateAddresses(ImmutableSet.of("10.176.42.16")).tag(
|
||||
"NOTAG#sample-server").imageId("2").id("1234").providerId("1234").name("sample-server").credentials(
|
||||
creds).location(
|
||||
new LocationImpl(LocationScope.HOST, "e4d909c290d0fb1ca068ffaddf22cbd0",
|
||||
"e4d909c290d0fb1ca068ffaddf22cbd0", new LocationImpl(LocationScope.ZONE, "dallas",
|
||||
"description", null))).userMetadata(
|
||||
creds).location( new LocationBuilder().scope(LocationScope.HOST).id("e4d909c290d0fb1ca068ffaddf22cbd0").description(
|
||||
"e4d909c290d0fb1ca068ffaddf22cbd0").parent(provider).build()).userMetadata(
|
||||
ImmutableMap.of("Server Label", "Web Head 1", "Image Version", "2.1")).build());
|
||||
}
|
||||
|
||||
|
@ -99,9 +97,8 @@ public class ServerToNodeMetadataTest {
|
|||
assertEquals(metadata, new NodeMetadataBuilder().state(NodeState.PENDING).publicAddresses(
|
||||
ImmutableSet.of("67.23.10.132", "67.23.10.131")).privateAddresses(ImmutableSet.of("10.176.42.16")).tag(
|
||||
"NOTAG#sample-server").imageId("2").id("1234").providerId("1234").name("sample-server").location(
|
||||
new LocationImpl(LocationScope.HOST, "e4d909c290d0fb1ca068ffaddf22cbd0",
|
||||
"e4d909c290d0fb1ca068ffaddf22cbd0", new LocationImpl(LocationScope.ZONE, "dallas",
|
||||
"description", null))).userMetadata(
|
||||
new LocationBuilder().scope(LocationScope.HOST).id("e4d909c290d0fb1ca068ffaddf22cbd0").description(
|
||||
"e4d909c290d0fb1ca068ffaddf22cbd0").parent(provider).build()).userMetadata(
|
||||
ImmutableMap.of("Server Label", "Web Head 1", "Image Version", "2.1")).build());
|
||||
|
||||
}
|
||||
|
@ -125,9 +122,8 @@ public class ServerToNodeMetadataTest {
|
|||
"NOTAG#sample-server").imageId("2").operatingSystem(
|
||||
new OperatingSystemBuilder().family(OsFamily.CENTOS).description("CentOS 5.2").version("5.2").is64Bit(
|
||||
true).build()).id("1234").providerId("1234").name("sample-server").location(
|
||||
new LocationImpl(LocationScope.HOST, "e4d909c290d0fb1ca068ffaddf22cbd0",
|
||||
"e4d909c290d0fb1ca068ffaddf22cbd0", new LocationImpl(LocationScope.ZONE, "dallas",
|
||||
"description", null))).userMetadata(
|
||||
new LocationBuilder().scope(LocationScope.HOST).id("e4d909c290d0fb1ca068ffaddf22cbd0").description(
|
||||
"e4d909c290d0fb1ca068ffaddf22cbd0").parent(provider).build()).userMetadata(
|
||||
ImmutableMap.of("Server Label", "Web Head 1", "Image Version", "2.1")).build());
|
||||
|
||||
}
|
||||
|
@ -154,9 +150,8 @@ public class ServerToNodeMetadataTest {
|
|||
.bootDevice(true).build())).build()).operatingSystem(
|
||||
new OperatingSystemBuilder().family(OsFamily.CENTOS).description("CentOS 5.2").version("5.2").is64Bit(
|
||||
true).build()).id("1234").providerId("1234").name("sample-server").location(
|
||||
new LocationImpl(LocationScope.HOST, "e4d909c290d0fb1ca068ffaddf22cbd0",
|
||||
"e4d909c290d0fb1ca068ffaddf22cbd0", new LocationImpl(LocationScope.ZONE, "dallas",
|
||||
"description", null))).userMetadata(
|
||||
new LocationBuilder().scope(LocationScope.HOST).id("e4d909c290d0fb1ca068ffaddf22cbd0").description(
|
||||
"e4d909c290d0fb1ca068ffaddf22cbd0").parent(provider).build()).userMetadata(
|
||||
ImmutableMap.of("Server Label", "Web Head 1", "Image Version", "2.1")).build());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -40,8 +40,8 @@ import org.jclouds.compute.reference.ComputeServiceConstants;
|
|||
import org.jclouds.compute.strategy.PopulateDefaultLoginCredentialsForImageStrategy;
|
||||
import org.jclouds.compute.util.ComputeServiceUtils;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationBuilder;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
import org.jclouds.ec2.compute.strategy.ReviseParsedImage;
|
||||
import org.jclouds.ec2.domain.Image.Architecture;
|
||||
import org.jclouds.ec2.domain.Image.ImageType;
|
||||
|
@ -116,8 +116,8 @@ public class EC2ImageParser implements Function<org.jclouds.ec2.domain.Image, Im
|
|||
}));
|
||||
} catch (NoSuchElementException e) {
|
||||
System.err.printf("unknown region %s for image %s; not in %s", from.getRegion(), from.getId(), locations);
|
||||
builder.location(new LocationImpl(LocationScope.REGION, from.getRegion(), from.getRegion(), defaultLocation
|
||||
.get().getParent()));
|
||||
builder.location(new LocationBuilder().scope(LocationScope.REGION).id(from.getRegion()).description(
|
||||
from.getRegion()).parent(defaultLocation.get()).build());
|
||||
}
|
||||
builder.operatingSystem(osBuilder.build());
|
||||
return builder.build();
|
||||
|
|
|
@ -19,8 +19,11 @@
|
|||
|
||||
package org.jclouds.ec2.config;
|
||||
|
||||
import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGIONS;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
@ -51,8 +54,16 @@ import org.jclouds.location.Region;
|
|||
import org.jclouds.location.Zone;
|
||||
import org.jclouds.rest.ConfiguresRestClient;
|
||||
|
||||
import com.google.common.base.Predicates;
|
||||
import com.google.common.base.Splitter;
|
||||
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;
|
||||
|
||||
/**
|
||||
* Configures the EC2 connection.
|
||||
|
@ -96,19 +107,30 @@ public class EC2RestClientModule<S extends EC2Client, A extends EC2AsyncClient>
|
|||
@Singleton
|
||||
public static class RegionIdsToURI implements javax.inject.Provider<Map<String, URI>> {
|
||||
private final AvailabilityZoneAndRegionClient client;
|
||||
private final Injector injector;
|
||||
|
||||
@Inject
|
||||
public RegionIdsToURI(EC2Client client) {
|
||||
public RegionIdsToURI(EC2Client client, Injector injector) {
|
||||
this.client = client.getAvailabilityZoneAndRegionServices();
|
||||
this.injector = injector;
|
||||
}
|
||||
|
||||
@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
|
||||
|
|
|
@ -51,8 +51,8 @@ import org.jclouds.compute.domain.internal.TemplateBuilderImpl;
|
|||
import org.jclouds.compute.options.TemplateOptions;
|
||||
import org.jclouds.domain.Credentials;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationBuilder;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
|
@ -71,7 +71,8 @@ import com.google.common.collect.ImmutableSet;
|
|||
* @author Oleksiy Yarmula
|
||||
*/
|
||||
public class EC2TemplateBuilderTest {
|
||||
private static final Location location = new LocationImpl(LocationScope.REGION, "us-east-1", "us east", null);
|
||||
private static final Location location = new LocationBuilder().scope(LocationScope.REGION).id("us-east-1")
|
||||
.description("us-east-1").build();
|
||||
|
||||
public static final Hardware CC1_4XLARGE = cc1_4xlarge().location(location).supportsImageIds("us-east-1/cc-image")
|
||||
.build();
|
||||
|
|
|
@ -31,8 +31,8 @@ import org.jclouds.compute.domain.OsFamily;
|
|||
import org.jclouds.compute.reference.ComputeServiceConstants;
|
||||
import org.jclouds.domain.Credentials;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationBuilder;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
import org.jclouds.ec2.compute.strategy.EC2PopulateDefaultLoginCredentialsForImageStrategy;
|
||||
import org.jclouds.ec2.compute.strategy.ReviseParsedImage;
|
||||
import org.jclouds.ec2.domain.Image;
|
||||
|
@ -74,7 +74,8 @@ public class EC2ImageParserTest {
|
|||
ImmutableMap.of("owner", "137112412989", "rootDeviceType", "ebs")).build());
|
||||
}
|
||||
|
||||
static Location defaultLocation = new LocationImpl(LocationScope.REGION, "us-east-1", "us-east-1", null);
|
||||
static Location defaultLocation = new LocationBuilder().scope(LocationScope.REGION).id("us-east-1").description(
|
||||
"us-east-1").build();
|
||||
|
||||
public static Set<org.jclouds.compute.domain.Image> convertImages(String resource) {
|
||||
|
||||
|
|
|
@ -36,8 +36,8 @@ import org.jclouds.compute.domain.OperatingSystemBuilder;
|
|||
import org.jclouds.compute.domain.OsFamily;
|
||||
import org.jclouds.domain.Credentials;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationBuilder;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
import org.jclouds.ec2.compute.config.EC2ComputeServiceDependenciesModule;
|
||||
import org.jclouds.ec2.compute.domain.RegionAndName;
|
||||
import org.jclouds.ec2.domain.InstanceState;
|
||||
|
@ -67,7 +67,8 @@ public class RunningInstanceToNodeMetadataTest {
|
|||
|
||||
}
|
||||
|
||||
Location provider = new LocationImpl(LocationScope.REGION, "us-east-1", "description", null);
|
||||
static Location provider = new LocationBuilder().scope(LocationScope.REGION).id("us-east-1")
|
||||
.description("us-east-1").build();
|
||||
|
||||
@Test
|
||||
public void testApplyWhereTagDoesntMatchAndImageHardwareAndLocationNotFoundButCredentialsFound()
|
||||
|
@ -81,9 +82,9 @@ public class RunningInstanceToNodeMetadataTest {
|
|||
RunningInstance server = firstInstanceFromResource("/describe_instances_running.xml");
|
||||
|
||||
assertEquals(parser.apply(server), new NodeMetadataBuilder().state(NodeState.RUNNING).publicAddresses(
|
||||
ImmutableSet.<String> of()).privateAddresses(ImmutableSet.of("10.243.42.70")).publicAddresses(ImmutableSet.of("174.129.81.68")).tag("NOTAG#i-0799056f")
|
||||
.credentials(creds).imageId("us-east-1/ami-82e4b5c7").id("us-east-1/i-0799056f")
|
||||
.providerId("i-0799056f").build());
|
||||
ImmutableSet.<String> of()).privateAddresses(ImmutableSet.of("10.243.42.70")).publicAddresses(
|
||||
ImmutableSet.of("174.129.81.68")).tag("NOTAG#i-0799056f").credentials(creds).imageId(
|
||||
"us-east-1/ami-82e4b5c7").id("us-east-1/i-0799056f").providerId("i-0799056f").build());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -94,8 +95,9 @@ public class RunningInstanceToNodeMetadataTest {
|
|||
RunningInstance server = firstInstanceFromResource("/describe_instances_running.xml");
|
||||
|
||||
assertEquals(parser.apply(server), new NodeMetadataBuilder().state(NodeState.RUNNING).publicAddresses(
|
||||
ImmutableSet.<String> of()).privateAddresses(ImmutableSet.of("10.243.42.70")).publicAddresses(ImmutableSet.of("174.129.81.68")).tag("NOTAG#i-0799056f")
|
||||
.imageId("us-east-1/ami-82e4b5c7").id("us-east-1/i-0799056f").providerId("i-0799056f").build());
|
||||
ImmutableSet.<String> of()).privateAddresses(ImmutableSet.of("10.243.42.70")).publicAddresses(
|
||||
ImmutableSet.of("174.129.81.68")).tag("NOTAG#i-0799056f").imageId("us-east-1/ami-82e4b5c7").id(
|
||||
"us-east-1/i-0799056f").providerId("i-0799056f").build());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -106,8 +108,9 @@ public class RunningInstanceToNodeMetadataTest {
|
|||
RunningInstance server = firstInstanceFromResource("/describe_instances_running.xml");
|
||||
|
||||
assertEquals(parser.apply(server), new NodeMetadataBuilder().state(NodeState.RUNNING).privateAddresses(
|
||||
ImmutableSet.of("10.243.42.70")).publicAddresses(ImmutableSet.of("174.129.81.68")).tag("NOTAG#i-0799056f").imageId("us-east-1/ami-82e4b5c7").id(
|
||||
"us-east-1/i-0799056f").providerId("i-0799056f").location(provider).build());
|
||||
ImmutableSet.of("10.243.42.70")).publicAddresses(ImmutableSet.of("174.129.81.68")).tag(
|
||||
"NOTAG#i-0799056f").imageId("us-east-1/ami-82e4b5c7").id("us-east-1/i-0799056f")
|
||||
.providerId("i-0799056f").location(provider).build());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -118,11 +121,11 @@ public class RunningInstanceToNodeMetadataTest {
|
|||
RunningInstance server = firstInstanceFromResource("/describe_instances_running.xml");
|
||||
|
||||
assertEquals(parser.apply(server), new NodeMetadataBuilder().state(NodeState.RUNNING).privateAddresses(
|
||||
ImmutableSet.of("10.243.42.70")).publicAddresses(ImmutableSet.of("174.129.81.68")).tag("NOTAG#i-0799056f").imageId("us-east-1/ami-82e4b5c7")
|
||||
.operatingSystem(
|
||||
new OperatingSystemBuilder().family(OsFamily.UNRECOGNIZED).version("").arch("paravirtual")
|
||||
.description("137112412989/amzn-ami-0.9.7-beta.i386-ebs").is64Bit(false).build()).id(
|
||||
"us-east-1/i-0799056f").providerId("i-0799056f").location(provider).build());
|
||||
ImmutableSet.of("10.243.42.70")).publicAddresses(ImmutableSet.of("174.129.81.68")).tag(
|
||||
"NOTAG#i-0799056f").imageId("us-east-1/ami-82e4b5c7").operatingSystem(
|
||||
new OperatingSystemBuilder().family(OsFamily.UNRECOGNIZED).version("").arch("paravirtual").description(
|
||||
"137112412989/amzn-ami-0.9.7-beta.i386-ebs").is64Bit(false).build()).id("us-east-1/i-0799056f")
|
||||
.providerId("i-0799056f").location(provider).build());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -134,8 +137,8 @@ public class RunningInstanceToNodeMetadataTest {
|
|||
RunningInstance server = firstInstanceFromResource("/describe_instances_running.xml");
|
||||
|
||||
assertEquals(parser.apply(server), new NodeMetadataBuilder().state(NodeState.RUNNING).privateAddresses(
|
||||
ImmutableSet.of("10.243.42.70")).publicAddresses(ImmutableSet.of("174.129.81.68")).tag("NOTAG#i-0799056f").imageId("us-east-1/ami-82e4b5c7").hardware(
|
||||
m1_small().build()).operatingSystem(
|
||||
ImmutableSet.of("10.243.42.70")).publicAddresses(ImmutableSet.of("174.129.81.68")).tag(
|
||||
"NOTAG#i-0799056f").imageId("us-east-1/ami-82e4b5c7").hardware(m1_small().build()).operatingSystem(
|
||||
new OperatingSystemBuilder().family(OsFamily.UNRECOGNIZED).version("").arch("paravirtual").description(
|
||||
"137112412989/amzn-ami-0.9.7-beta.i386-ebs").is64Bit(false).build()).id("us-east-1/i-0799056f")
|
||||
.providerId("i-0799056f").location(provider).build());
|
||||
|
|
|
@ -32,8 +32,6 @@ import java.util.concurrent.ConcurrentMap;
|
|||
|
||||
import javax.inject.Provider;
|
||||
|
||||
import org.jclouds.ec2.compute.domain.RegionAndName;
|
||||
import org.jclouds.ec2.compute.options.EC2TemplateOptions;
|
||||
import org.jclouds.collect.Memoized;
|
||||
import org.jclouds.compute.domain.Hardware;
|
||||
import org.jclouds.compute.domain.Image;
|
||||
|
@ -43,8 +41,10 @@ import org.jclouds.compute.domain.internal.TemplateBuilderImpl;
|
|||
import org.jclouds.compute.domain.internal.TemplateBuilderImplTest;
|
||||
import org.jclouds.compute.options.TemplateOptions;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationBuilder;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
import org.jclouds.ec2.compute.domain.RegionAndName;
|
||||
import org.jclouds.ec2.compute.options.EC2TemplateOptions;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
|
@ -89,7 +89,7 @@ public class EC2TemplateBuilderImplTest extends TemplateBuilderImplTest {
|
|||
@SuppressWarnings("unchecked")
|
||||
@Test
|
||||
public void testParseOnDemand() {
|
||||
Location location = new LocationImpl(LocationScope.REGION, "region", "region", null);
|
||||
Location location = new LocationBuilder().scope(LocationScope.REGION).id("region").description("region").build();
|
||||
|
||||
Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet
|
||||
.<Location> of(location));
|
||||
|
@ -142,7 +142,7 @@ public class EC2TemplateBuilderImplTest extends TemplateBuilderImplTest {
|
|||
@SuppressWarnings("unchecked")
|
||||
@Test
|
||||
public void testParseOnDemandWithoutRegionEncodedIntoId() {
|
||||
Location location = new LocationImpl(LocationScope.REGION, "region", "region", null);
|
||||
Location location = new LocationBuilder().scope(LocationScope.REGION).id("region").description("region").build();
|
||||
|
||||
Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet
|
||||
.<Location> of(location));
|
||||
|
@ -179,7 +179,7 @@ public class EC2TemplateBuilderImplTest extends TemplateBuilderImplTest {
|
|||
@SuppressWarnings("unchecked")
|
||||
@Test(expectedExceptions = NoSuchElementException.class)
|
||||
public void testParseOnDemandNotFound() {
|
||||
Location location = new LocationImpl(LocationScope.REGION, "region", "region", null);
|
||||
Location location = new LocationBuilder().scope(LocationScope.REGION).id("region").description("region").build();
|
||||
|
||||
Supplier<Set<? extends Location>> locations = Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet
|
||||
.<Location> of(location));
|
||||
|
|
|
@ -39,8 +39,8 @@ import org.jclouds.compute.domain.Template;
|
|||
import org.jclouds.compute.util.ComputeUtils;
|
||||
import org.jclouds.domain.Credentials;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationBuilder;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
import org.jclouds.ec2.EC2Client;
|
||||
import org.jclouds.ec2.compute.functions.RunningInstanceToNodeMetadata;
|
||||
import org.jclouds.ec2.compute.options.EC2TemplateOptions;
|
||||
|
@ -154,10 +154,12 @@ public class EC2RunNodesAndAddToSetStrategyTest {
|
|||
verifyStrategy(strategy);
|
||||
}
|
||||
|
||||
private static final Location REGION_AP_SOUTHEAST_1 = new LocationImpl(LocationScope.REGION, Region.AP_SOUTHEAST_1,
|
||||
Region.AP_SOUTHEAST_1, new LocationImpl(LocationScope.PROVIDER, "ec2", "ec2", null));
|
||||
private static final Location ZONE_AP_SOUTHEAST_1A = new LocationImpl(LocationScope.ZONE,
|
||||
AvailabilityZone.AP_SOUTHEAST_1A, AvailabilityZone.AP_SOUTHEAST_1A, REGION_AP_SOUTHEAST_1);
|
||||
private static final Location REGION_AP_SOUTHEAST_1 = new LocationBuilder().scope(LocationScope.REGION).id(
|
||||
Region.AP_SOUTHEAST_1).description(Region.AP_SOUTHEAST_1).parent(
|
||||
new LocationBuilder().scope(LocationScope.PROVIDER).id("ec2").description("ec2").build()).build();
|
||||
private static final Location ZONE_AP_SOUTHEAST_1A = new LocationBuilder().scope(LocationScope.ZONE).id(
|
||||
AvailabilityZone.AP_SOUTHEAST_1A).description(AvailabilityZone.AP_SOUTHEAST_1A).parent(
|
||||
REGION_AP_SOUTHEAST_1).build();
|
||||
|
||||
// /////////////////////////////////////////////////////////////////////
|
||||
@SuppressWarnings("unchecked")
|
||||
|
|
|
@ -6,7 +6,6 @@ import static com.google.common.collect.Iterables.filter;
|
|||
import static org.jclouds.concurrent.FutureIterables.transformParallel;
|
||||
import static org.jclouds.elasticstack.util.Servers.small;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Future;
|
||||
|
@ -29,8 +28,6 @@ import org.jclouds.compute.domain.internal.VolumeImpl;
|
|||
import org.jclouds.compute.reference.ComputeServiceConstants;
|
||||
import org.jclouds.domain.Credentials;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
import org.jclouds.elasticstack.ElasticStackAsyncClient;
|
||||
import org.jclouds.elasticstack.ElasticStackClient;
|
||||
import org.jclouds.elasticstack.domain.Device;
|
||||
|
@ -42,7 +39,7 @@ import org.jclouds.elasticstack.domain.ServerInfo;
|
|||
import org.jclouds.elasticstack.domain.ServerStatus;
|
||||
import org.jclouds.elasticstack.domain.WellKnownImage;
|
||||
import org.jclouds.elasticstack.reference.ElasticStackConstants;
|
||||
import org.jclouds.location.Provider;
|
||||
import org.jclouds.location.suppliers.JustProvider;
|
||||
import org.jclouds.logging.Logger;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
|
@ -64,8 +61,7 @@ public class ElasticStackComputeServiceAdapter implements
|
|||
private final Predicate<DriveInfo> driveNotClaimed;
|
||||
private final Map<String, WellKnownImage> preinstalledImages;
|
||||
private final Map<String, DriveInfo> cache;
|
||||
private final String providerName;
|
||||
private final URI providerURI;
|
||||
private final JustProvider locationSupplier;
|
||||
private final String defaultVncPassword;
|
||||
private final ExecutorService executor;
|
||||
|
||||
|
@ -75,15 +71,14 @@ public class ElasticStackComputeServiceAdapter implements
|
|||
|
||||
@Inject
|
||||
public ElasticStackComputeServiceAdapter(ElasticStackClient client, ElasticStackAsyncClient aclient,
|
||||
Predicate<DriveInfo> driveNotClaimed, @Provider String providerName, @Provider URI providerURI,
|
||||
Predicate<DriveInfo> driveNotClaimed, JustProvider locationSupplier,
|
||||
Map<String, WellKnownImage> preinstalledImages, Map<String, DriveInfo> cache,
|
||||
@Named(ElasticStackConstants.PROPERTY_VNC_PASSWORD) String defaultVncPassword,
|
||||
@Named(Constants.PROPERTY_USER_THREADS) ExecutorService executor) {
|
||||
this.client = checkNotNull(client, "client");
|
||||
this.aclient = checkNotNull(aclient, "aclient");
|
||||
this.driveNotClaimed = checkNotNull(driveNotClaimed, "driveNotClaimed");
|
||||
this.providerName = checkNotNull(providerName, "providerName");
|
||||
this.providerURI = checkNotNull(providerURI, "providerURI");
|
||||
this.locationSupplier = checkNotNull(locationSupplier, "locationSupplier");
|
||||
this.preinstalledImages = checkNotNull(preinstalledImages, "preinstalledImages");
|
||||
this.cache = checkNotNull(cache, "cache");
|
||||
this.defaultVncPassword = checkNotNull(defaultVncPassword, "defaultVncPassword");
|
||||
|
@ -168,11 +163,11 @@ public class ElasticStackComputeServiceAdapter implements
|
|||
public Iterable<ServerInfo> listNodes() {
|
||||
return (Iterable<ServerInfo>) client.listServerInfo();
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public Iterable<Location> listLocations() {
|
||||
return ImmutableSet.<Location> of(new LocationImpl(LocationScope.PROVIDER, providerName, providerURI
|
||||
.toASCIIString(), null));
|
||||
return (Iterable<Location>) locationSupplier.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -52,12 +52,14 @@ import org.jclouds.elasticstack.predicates.DriveClaimed;
|
|||
import org.jclouds.functions.IdentityFunction;
|
||||
import org.jclouds.json.Json;
|
||||
import org.jclouds.location.Provider;
|
||||
import org.jclouds.location.suppliers.OnlyLocationOrFirstZone;
|
||||
import org.jclouds.predicates.RetryablePredicate;
|
||||
import org.jclouds.util.Strings2;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.base.Predicates;
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.collect.MapMaker;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.inject.Provides;
|
||||
|
@ -97,6 +99,8 @@ public class ElasticStackComputeServiceContextModule
|
|||
}).to(FindImageForId.class);
|
||||
bind(new TypeLiteral<Function<DriveInfo, Image>>() {
|
||||
}).to(WellKnownImageToImage.class);
|
||||
bind(new TypeLiteral<Supplier<Location>>() {
|
||||
}).to(OnlyLocationOrFirstZone.class);
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
|
|
@ -76,8 +76,6 @@ public class BindServerToPlainTextStringTest {
|
|||
protected void configure() {
|
||||
bind(new TypeLiteral<Function<Server, Map<String, String>>>() {
|
||||
}).to(ServerToMap.class);
|
||||
bind(new TypeLiteral<Function<Server, Map<String, String>>>() {
|
||||
}).to(ServerToMap.class);
|
||||
}
|
||||
|
||||
}).getInstance(BindServerToPlainTextString.class);
|
||||
|
|
|
@ -19,8 +19,6 @@
|
|||
|
||||
package org.jclouds.filesystem.config;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.jclouds.blobstore.AsyncBlobStore;
|
||||
import org.jclouds.blobstore.BlobStore;
|
||||
import org.jclouds.blobstore.BlobStoreContext;
|
||||
|
@ -29,10 +27,6 @@ import org.jclouds.blobstore.config.BlobStoreMapModule;
|
|||
import org.jclouds.blobstore.config.BlobStoreObjectModule;
|
||||
import org.jclouds.blobstore.internal.BlobStoreContextImpl;
|
||||
import org.jclouds.blobstore.util.BlobUtils;
|
||||
import org.jclouds.collect.Memoized;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
import org.jclouds.filesystem.FilesystemBlobStore;
|
||||
import org.jclouds.filesystem.predicates.validators.FilesystemBlobKeyValidator;
|
||||
import org.jclouds.filesystem.predicates.validators.FilesystemContainerNameValidator;
|
||||
|
@ -41,10 +35,8 @@ import org.jclouds.filesystem.predicates.validators.internal.FilesystemContainer
|
|||
import org.jclouds.filesystem.strategy.FilesystemStorageStrategy;
|
||||
import org.jclouds.filesystem.strategy.internal.FilesystemStorageStrategyImpl;
|
||||
import org.jclouds.filesystem.util.internal.FileSystemBlobUtilsImpl;
|
||||
import org.jclouds.location.config.JustProviderLocationModule;
|
||||
|
||||
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.Provides;
|
||||
import com.google.inject.Scopes;
|
||||
|
@ -69,6 +61,7 @@ public class FilesystemBlobStoreContextModule extends AbstractModule {
|
|||
bind(BlobUtils.class).to(FileSystemBlobUtilsImpl.class);
|
||||
bind(FilesystemBlobKeyValidator.class).to(FilesystemBlobKeyValidatorImpl.class);
|
||||
bind(FilesystemContainerNameValidator.class).to(FilesystemContainerNameValidatorImpl.class);
|
||||
install(new JustProviderLocationModule());
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
@ -77,18 +70,4 @@ public class FilesystemBlobStoreContextModule extends AbstractModule {
|
|||
return in;
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@Memoized
|
||||
Supplier<Set<? extends Location>> provideLocations(Supplier<Location> defaultLocation) {
|
||||
return Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet.of(defaultLocation.get()));
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
Supplier<Location> provideDefaultLocation() {
|
||||
return Suppliers
|
||||
.<Location> ofInstance(new LocationImpl(LocationScope.PROVIDER, "filesystem", "filesystem", null));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -19,17 +19,6 @@
|
|||
|
||||
package org.jclouds.s3.blobstore.config;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.s3.S3AsyncClient;
|
||||
import org.jclouds.s3.S3Client;
|
||||
import org.jclouds.s3.blobstore.S3AsyncBlobStore;
|
||||
import org.jclouds.s3.blobstore.S3BlobRequestSigner;
|
||||
import org.jclouds.s3.blobstore.S3BlobStore;
|
||||
import org.jclouds.s3.blobstore.functions.LocationFromBucketLocation;
|
||||
import org.jclouds.s3.domain.BucketMetadata;
|
||||
import org.jclouds.blobstore.AsyncBlobStore;
|
||||
import org.jclouds.blobstore.BlobRequestSigner;
|
||||
import org.jclouds.blobstore.BlobStore;
|
||||
|
@ -37,20 +26,18 @@ import org.jclouds.blobstore.BlobStoreContext;
|
|||
import org.jclouds.blobstore.attr.ConsistencyModel;
|
||||
import org.jclouds.blobstore.config.BlobStoreMapModule;
|
||||
import org.jclouds.blobstore.internal.BlobStoreContextImpl;
|
||||
import org.jclouds.collect.Memoized;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
import org.jclouds.location.Provider;
|
||||
import org.jclouds.location.Region;
|
||||
import org.jclouds.location.suppliers.OnlyLocationOrFirstZoneOrRegionMatchingRegionId;
|
||||
import org.jclouds.location.config.RegionsLocationModule;
|
||||
import org.jclouds.s3.S3AsyncClient;
|
||||
import org.jclouds.s3.S3Client;
|
||||
import org.jclouds.s3.blobstore.S3AsyncBlobStore;
|
||||
import org.jclouds.s3.blobstore.S3BlobRequestSigner;
|
||||
import org.jclouds.s3.blobstore.S3BlobStore;
|
||||
import org.jclouds.s3.blobstore.functions.LocationFromBucketLocation;
|
||||
import org.jclouds.s3.domain.BucketMetadata;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.base.Suppliers;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.Provides;
|
||||
import com.google.inject.Scopes;
|
||||
import com.google.inject.TypeLiteral;
|
||||
|
||||
|
@ -64,9 +51,7 @@ public class S3BlobStoreContextModule extends AbstractModule {
|
|||
@Override
|
||||
protected void configure() {
|
||||
install(new BlobStoreMapModule());
|
||||
bind(new TypeLiteral<Supplier<Location>>() {
|
||||
}).to(new TypeLiteral<OnlyLocationOrFirstZoneOrRegionMatchingRegionId>() {
|
||||
});
|
||||
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);
|
||||
|
@ -81,15 +66,5 @@ public class S3BlobStoreContextModule extends AbstractModule {
|
|||
}).to(LocationFromBucketLocation.class);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@Memoized
|
||||
Supplier<Set<? extends Location>> provideLocations(@Region Set<String> regions, @Provider String providerName) {
|
||||
Set<Location> locations = Sets.newHashSet();
|
||||
Location s3 = new LocationImpl(LocationScope.PROVIDER, providerName, providerName, null);
|
||||
for (String zone : regions) {
|
||||
locations.add(new LocationImpl(LocationScope.REGION, zone.toString(), zone.toString(), s3));
|
||||
}
|
||||
return Suppliers.<Set<? extends Location>> ofInstance(locations);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@ import static com.google.common.base.Preconditions.checkArgument;
|
|||
|
||||
import java.util.Set;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.annotation.Resource;
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
@ -49,14 +50,16 @@ public class BindRegionToXmlPayload extends BindToStringPayload {
|
|||
private final Set<String> regions;
|
||||
|
||||
@Inject
|
||||
BindRegionToXmlPayload(@org.jclouds.location.Region String defaultRegion,
|
||||
@org.jclouds.location.Region Set<String> regions) {
|
||||
BindRegionToXmlPayload(@org.jclouds.location.Region @Nullable String defaultRegion,
|
||||
@org.jclouds.location.Region Set<String> regions) {
|
||||
this.defaultRegion = defaultRegion;
|
||||
this.regions = regions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <R extends HttpRequest> R bindToRequest(R request, Object input) {
|
||||
if (defaultRegion == null)
|
||||
return request;
|
||||
input = input == null ? defaultRegion : input;
|
||||
checkArgument(input instanceof String, "this binder is only valid for Region!");
|
||||
String constraint = (String) input;
|
||||
|
@ -70,10 +73,9 @@ public class BindRegionToXmlPayload extends BindToStringPayload {
|
|||
logger.warn("region %s not in %s ", constraint, regions);
|
||||
value = constraint;
|
||||
}
|
||||
String payload = String
|
||||
.format(
|
||||
"<CreateBucketConfiguration><LocationConstraint>%s</LocationConstraint></CreateBucketConfiguration>",
|
||||
value);
|
||||
String payload = String.format(
|
||||
"<CreateBucketConfiguration><LocationConstraint>%s</LocationConstraint></CreateBucketConfiguration>",
|
||||
value);
|
||||
request = super.bindToRequest(request, payload);
|
||||
request.getPayload().getContentMetadata().setContentType(MediaType.TEXT_XML);
|
||||
return request;
|
||||
|
|
|
@ -388,26 +388,7 @@ public class S3AsyncClientTest extends BaseS3AsyncClientTest {
|
|||
|
||||
checkFilters(request);
|
||||
}
|
||||
|
||||
public void testPutBucketEu() throws ArrayIndexOutOfBoundsException, SecurityException, IllegalArgumentException,
|
||||
NoSuchMethodException, IOException {
|
||||
Method method = S3AsyncClient.class.getMethod("putBucketInRegion", String.class, String.class, Array.newInstance(
|
||||
PutBucketOptions.class, 0).getClass());
|
||||
HttpRequest request = processor.createRequest(method, "EU", "bucket");
|
||||
|
||||
assertRequestLineEquals(request, "PUT https://bucket." + url + "/ HTTP/1.1");
|
||||
assertNonPayloadHeadersEqual(request, "Host: bucket." + url + "\n");
|
||||
assertPayloadEquals(request,
|
||||
"<CreateBucketConfiguration><LocationConstraint>EU</LocationConstraint></CreateBucketConfiguration>",
|
||||
"text/xml", false);
|
||||
|
||||
assertResponseParserClassEquals(method, request, ReturnTrueIf2xx.class);
|
||||
assertSaxResponseParserClassEquals(method, null);
|
||||
assertExceptionParserClassEquals(method, ReturnFalseIfBucketAlreadyOwnedByYouOrIllegalState.class);
|
||||
|
||||
checkFilters(request);
|
||||
}
|
||||
|
||||
|
||||
public void testPutObject() throws ArrayIndexOutOfBoundsException, SecurityException, IllegalArgumentException,
|
||||
NoSuchMethodException, IOException {
|
||||
|
||||
|
|
|
@ -37,6 +37,20 @@ import javax.inject.Singleton;
|
|||
|
||||
import org.jclouds.Constants;
|
||||
import org.jclouds.aws.domain.Region;
|
||||
import org.jclouds.blobstore.AsyncBlobStore;
|
||||
import org.jclouds.blobstore.KeyNotFoundException;
|
||||
import org.jclouds.blobstore.TransientAsyncBlobStore;
|
||||
import org.jclouds.blobstore.domain.Blob;
|
||||
import org.jclouds.blobstore.domain.BlobMetadata;
|
||||
import org.jclouds.blobstore.domain.MutableBlobMetadata;
|
||||
import org.jclouds.blobstore.functions.HttpGetOptionsListToGetOptions;
|
||||
import org.jclouds.blobstore.options.ListContainerOptions;
|
||||
import org.jclouds.concurrent.Futures;
|
||||
import org.jclouds.date.DateService;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationBuilder;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.http.options.GetOptions;
|
||||
import org.jclouds.s3.S3AsyncClient;
|
||||
import org.jclouds.s3.blobstore.S3AsyncBlobStore;
|
||||
import org.jclouds.s3.blobstore.functions.BlobToObject;
|
||||
|
@ -59,20 +73,6 @@ import org.jclouds.s3.options.CopyObjectOptions;
|
|||
import org.jclouds.s3.options.ListBucketOptions;
|
||||
import org.jclouds.s3.options.PutBucketOptions;
|
||||
import org.jclouds.s3.options.PutObjectOptions;
|
||||
import org.jclouds.blobstore.AsyncBlobStore;
|
||||
import org.jclouds.blobstore.KeyNotFoundException;
|
||||
import org.jclouds.blobstore.TransientAsyncBlobStore;
|
||||
import org.jclouds.blobstore.domain.Blob;
|
||||
import org.jclouds.blobstore.domain.BlobMetadata;
|
||||
import org.jclouds.blobstore.domain.MutableBlobMetadata;
|
||||
import org.jclouds.blobstore.functions.HttpGetOptionsListToGetOptions;
|
||||
import org.jclouds.blobstore.options.ListContainerOptions;
|
||||
import org.jclouds.concurrent.Futures;
|
||||
import org.jclouds.date.DateService;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
import org.jclouds.http.options.GetOptions;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.collect.Iterables;
|
||||
|
@ -140,7 +140,8 @@ public class StubS3AsyncClient implements S3AsyncClient {
|
|||
region = region == null ? Region.US_STANDARD : region;
|
||||
final PutBucketOptions options = (optionsList.length == 0) ? new PutBucketOptions() : optionsList[0];
|
||||
keyToAcl.put(name, options.getAcl());
|
||||
return blobStore.createContainerInLocation(new LocationImpl(LocationScope.REGION, region, region, null), name);
|
||||
return blobStore.createContainerInLocation(new LocationBuilder().scope(LocationScope.REGION).id(region)
|
||||
.description(region).build(), name);
|
||||
}
|
||||
|
||||
public ListenableFuture<ListBucketResponse> listBucket(final String name, ListBucketOptions... optionsList) {
|
||||
|
|
|
@ -19,10 +19,6 @@
|
|||
|
||||
package org.jclouds.openstack.swift.blobstore.config;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.blobstore.AsyncBlobStore;
|
||||
import org.jclouds.blobstore.BlobRequestSigner;
|
||||
import org.jclouds.blobstore.BlobStore;
|
||||
|
@ -30,22 +26,14 @@ import org.jclouds.blobstore.BlobStoreContext;
|
|||
import org.jclouds.blobstore.attr.ConsistencyModel;
|
||||
import org.jclouds.blobstore.config.BlobStoreMapModule;
|
||||
import org.jclouds.blobstore.internal.BlobStoreContextImpl;
|
||||
import org.jclouds.collect.Memoized;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.location.Region;
|
||||
import org.jclouds.location.config.ProvideRegionsViaProperties;
|
||||
import org.jclouds.location.suppliers.SupplyPredefinedRegions;
|
||||
import org.jclouds.location.config.JustProviderLocationModule;
|
||||
import org.jclouds.openstack.swift.CommonSwiftAsyncClient;
|
||||
import org.jclouds.openstack.swift.CommonSwiftClient;
|
||||
import org.jclouds.openstack.swift.blobstore.SwiftAsyncBlobStore;
|
||||
import org.jclouds.openstack.swift.blobstore.SwiftBlobRequestSigner;
|
||||
import org.jclouds.openstack.swift.blobstore.SwiftBlobStore;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.base.Suppliers;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.Provides;
|
||||
import com.google.inject.Scopes;
|
||||
import com.google.inject.TypeLiteral;
|
||||
|
||||
|
@ -60,12 +48,7 @@ public class SwiftBlobStoreContextModule extends AbstractModule {
|
|||
@Override
|
||||
protected void configure() {
|
||||
install(new BlobStoreMapModule());
|
||||
bind(new TypeLiteral<Supplier<Set<? extends Location>>>() {
|
||||
}).annotatedWith(Memoized.class).to(new TypeLiteral<SupplyPredefinedRegions>() {
|
||||
});
|
||||
bind(new TypeLiteral<Set<String>>() {
|
||||
}).annotatedWith(Region.class).toProvider(ProvideRegionsViaProperties.class).in(Scopes.SINGLETON);
|
||||
|
||||
install(new JustProviderLocationModule());
|
||||
bind(ConsistencyModel.class).toInstance(ConsistencyModel.STRICT);
|
||||
bind(AsyncBlobStore.class).to(SwiftAsyncBlobStore.class).in(Scopes.SINGLETON);
|
||||
bind(BlobStore.class).to(SwiftBlobStore.class).in(Scopes.SINGLETON);
|
||||
|
@ -74,10 +57,5 @@ public class SwiftBlobStoreContextModule extends AbstractModule {
|
|||
bind(BlobRequestSigner.class).to(SwiftBlobRequestSigner.class);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
protected Supplier<Location> getLocation(@Memoized Supplier<Set<? extends Location>> locations) {
|
||||
return Suppliers.<Location> ofInstance(Iterables.get(locations.get(), 0));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
|
||||
package org.jclouds.blobstore.config;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
|
||||
|
@ -34,15 +33,9 @@ import org.jclouds.blobstore.TransientBlobRequestSigner;
|
|||
import org.jclouds.blobstore.attr.ConsistencyModel;
|
||||
import org.jclouds.blobstore.domain.Blob;
|
||||
import org.jclouds.blobstore.internal.BlobStoreContextImpl;
|
||||
import org.jclouds.collect.Memoized;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
import org.jclouds.location.Provider;
|
||||
import org.jclouds.location.config.JustProviderLocationModule;
|
||||
|
||||
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.Provides;
|
||||
import com.google.inject.Scopes;
|
||||
|
@ -70,6 +63,7 @@ public class TransientBlobStoreContextModule extends AbstractModule {
|
|||
}).toInstance(containerToLocation);
|
||||
install(new BlobStoreObjectModule());
|
||||
install(new BlobStoreMapModule());
|
||||
install(new JustProviderLocationModule());
|
||||
bind(ConsistencyModel.class).toInstance(ConsistencyModel.STRICT);
|
||||
bind(BlobRequestSigner.class).to(TransientBlobRequestSigner.class);
|
||||
}
|
||||
|
@ -79,18 +73,4 @@ public class TransientBlobStoreContextModule extends AbstractModule {
|
|||
BlobStore provide(TransientBlobStore in) {
|
||||
return in;
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@Memoized
|
||||
Supplier<Set<? extends Location>> provideLocations(Supplier<Location> defaultLocation) {
|
||||
return Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet.of(defaultLocation.get()));
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
Supplier<Location> provideDefaultLocation(@Provider String providerName) {
|
||||
return Suppliers
|
||||
.<Location> ofInstance(new LocationImpl(LocationScope.PROVIDER, providerName, providerName, null));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ import org.jclouds.domain.LocationScope;
|
|||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Iterables;
|
||||
|
||||
/**
|
||||
|
@ -61,11 +62,9 @@ public class BaseServiceIntegrationTest extends BaseBlobStoreIntegrationTest {
|
|||
PageSet<? extends StorageMetadata> list = context.getBlobStore().list();
|
||||
assert Iterables.any(list, new Predicate<StorageMetadata>() {
|
||||
public boolean apply(StorageMetadata md) {
|
||||
return containerName.equals(md.getName())
|
||||
&& location.equals(md.getLocation());
|
||||
return containerName.equals(md.getName()) && location.equals(md.getLocation());
|
||||
}
|
||||
}) : String.format("container %s/%s not found in list %s", location,
|
||||
containerName, list);
|
||||
}) : String.format("container %s/%s not found in list %s", location, containerName, list);
|
||||
}
|
||||
|
||||
});
|
||||
|
@ -75,10 +74,14 @@ public class BaseServiceIntegrationTest extends BaseBlobStoreIntegrationTest {
|
|||
}
|
||||
}
|
||||
|
||||
protected Set<String> getIso3166Codes() {
|
||||
return ImmutableSet.<String> of();
|
||||
}
|
||||
|
||||
@Test(groups = { "integration", "live" })
|
||||
public void testGetAssignableLocations() throws Exception {
|
||||
for (Location location : context.getBlobStore()
|
||||
.listAssignableLocations()) {
|
||||
assertProvider(context.getProviderSpecificContext());
|
||||
for (Location location : context.getBlobStore().listAssignableLocations()) {
|
||||
System.err.printf("location %s%n", location);
|
||||
assert location.getId() != null : location;
|
||||
assert location != location.getParent() : location;
|
||||
|
@ -89,6 +92,9 @@ public class BaseServiceIntegrationTest extends BaseBlobStoreIntegrationTest {
|
|||
break;
|
||||
case REGION:
|
||||
assertProvider(location.getParent());
|
||||
assert location.getIso3166Codes().size() == 0
|
||||
|| location.getParent().getIso3166Codes().containsAll(location.getIso3166Codes()) : location
|
||||
+ " ||" + location.getParent();
|
||||
break;
|
||||
case ZONE:
|
||||
Location provider = location.getParent().getParent();
|
||||
|
@ -96,6 +102,9 @@ public class BaseServiceIntegrationTest extends BaseBlobStoreIntegrationTest {
|
|||
if (provider == null)
|
||||
provider = location.getParent();
|
||||
assertProvider(provider);
|
||||
assert location.getIso3166Codes().size() == 0
|
||||
|| location.getParent().getIso3166Codes().containsAll(location.getIso3166Codes()) : location
|
||||
+ " ||" + location.getParent();
|
||||
break;
|
||||
case HOST:
|
||||
Location provider2 = location.getParent().getParent().getParent();
|
||||
|
@ -108,9 +117,10 @@ public class BaseServiceIntegrationTest extends BaseBlobStoreIntegrationTest {
|
|||
}
|
||||
}
|
||||
|
||||
public void assertProvider(Location provider) {
|
||||
void assertProvider(Location provider) {
|
||||
assertEquals(provider.getScope(), LocationScope.PROVIDER);
|
||||
assertEquals(provider.getParent(), null);
|
||||
assertEquals(provider.getIso3166Codes(), getIso3166Codes());
|
||||
}
|
||||
|
||||
}
|
|
@ -25,6 +25,7 @@ import java.net.URI;
|
|||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.aws.handlers.AWSClientErrorRetryHandler;
|
||||
|
@ -79,12 +80,13 @@ public class AWSRestClientModule<S, A> extends RestClientModule<S, A> {
|
|||
|
||||
@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) {
|
||||
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);
|
||||
"failed to find region for current endpoint %s in %s; choosing first: %s", uri, map, region);
|
||||
region = get(map.keySet(), 0);
|
||||
}
|
||||
return region;
|
||||
|
|
|
@ -51,7 +51,7 @@ import com.google.inject.name.Names;
|
|||
public class FormSignerTest {
|
||||
@SuppressWarnings("unchecked")
|
||||
public static final RestContextSpec<Map, List> DUMMY_SPEC = new RestContextSpec<Map, List>("provider", "endpoint",
|
||||
"apiVersion", "identity", "credential", Map.class, List.class, PropertiesBuilder.class,
|
||||
"apiVersion", "", "identity", "credential", Map.class, List.class, PropertiesBuilder.class,
|
||||
(Class) RestContextBuilder.class, ImmutableList.<Module> of(new MockModule(), new NullLoggingModule(),
|
||||
new AbstractModule() {
|
||||
@Override
|
||||
|
|
|
@ -139,8 +139,9 @@ public class SharedKeyLiteAuthenticationTest {
|
|||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static final RestContextSpec<Map, List> DUMMY_SPEC = new RestContextSpec<Map, List>("provider", "endpoint",
|
||||
"apiVersion", "identity", "credential", Map.class, List.class, PropertiesBuilder.class,
|
||||
"apiVersion", "", "identity", "credential", Map.class, List.class, PropertiesBuilder.class,
|
||||
(Class) RestContextBuilder.class, ImmutableList.<Module> of(new MockModule(), new NullLoggingModule(),
|
||||
new AzureStorageRestClientModule<Exception, RuntimeException>(Exception.class, RuntimeException.class)));
|
||||
new AzureStorageRestClientModule<Exception, RuntimeException>(Exception.class,
|
||||
RuntimeException.class)));
|
||||
|
||||
}
|
|
@ -63,8 +63,8 @@ public class OpenStackAuthAsyncClientTest extends RestClientTest<OpenStackAuthAs
|
|||
|
||||
@Override
|
||||
public RestContextSpec<OpenStackAuthClient, OpenStackAuthAsyncClient> createContextSpec() {
|
||||
return contextSpec("test", "http://localhost:8080", "1.0", "identity", "credential", OpenStackAuthClient.class,
|
||||
OpenStackAuthAsyncClient.class);
|
||||
return contextSpec("test", "http://localhost:8080", "1.0", "", "identity", "credential",
|
||||
OpenStackAuthClient.class, OpenStackAuthAsyncClient.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -27,6 +27,7 @@ import org.jclouds.compute.config.BaseComputeServiceContextModule;
|
|||
import org.jclouds.compute.config.BindComputeStrategiesByClass;
|
||||
import org.jclouds.compute.config.BindComputeSuppliersByClass;
|
||||
import org.jclouds.compute.domain.NodeState;
|
||||
import org.jclouds.location.config.LocationModule;
|
||||
import org.jclouds.vcloud.domain.Status;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
|
@ -42,13 +43,13 @@ import com.google.inject.Provides;
|
|||
public abstract class CommonVCloudComputeServiceContextModule extends BaseComputeServiceContextModule {
|
||||
|
||||
@VisibleForTesting
|
||||
static final Map<Status, NodeState> vAppStatusToNodeState = ImmutableMap.<Status, NodeState> builder()
|
||||
.put(Status.OFF, NodeState.SUSPENDED).put(Status.ON, NodeState.RUNNING)
|
||||
.put(Status.RESOLVED, NodeState.PENDING).put(Status.ERROR, NodeState.ERROR)
|
||||
.put(Status.UNRECOGNIZED, NodeState.UNRECOGNIZED).put(Status.DEPLOYED, NodeState.PENDING)
|
||||
.put(Status.INCONSISTENT, NodeState.PENDING).put(Status.UNKNOWN, NodeState.UNRECOGNIZED)
|
||||
.put(Status.MIXED, NodeState.PENDING).put(Status.WAITING_FOR_INPUT, NodeState.PENDING)
|
||||
.put(Status.SUSPENDED, NodeState.SUSPENDED).put(Status.UNRESOLVED, NodeState.PENDING).build();
|
||||
static final Map<Status, NodeState> vAppStatusToNodeState = ImmutableMap.<Status, NodeState> builder().put(
|
||||
Status.OFF, NodeState.SUSPENDED).put(Status.ON, NodeState.RUNNING).put(Status.RESOLVED, NodeState.PENDING)
|
||||
.put(Status.ERROR, NodeState.ERROR).put(Status.UNRECOGNIZED, NodeState.UNRECOGNIZED).put(Status.DEPLOYED,
|
||||
NodeState.PENDING).put(Status.INCONSISTENT, NodeState.PENDING).put(Status.UNKNOWN,
|
||||
NodeState.UNRECOGNIZED).put(Status.MIXED, NodeState.PENDING).put(Status.WAITING_FOR_INPUT,
|
||||
NodeState.PENDING).put(Status.SUSPENDED, NodeState.SUSPENDED).put(Status.UNRESOLVED,
|
||||
NodeState.PENDING).build();
|
||||
|
||||
@Singleton
|
||||
@Provides
|
||||
|
|
|
@ -19,6 +19,9 @@
|
|||
|
||||
package org.jclouds.vcloud.compute.suppliers;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
|
@ -26,43 +29,65 @@ import javax.inject.Inject;
|
|||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationBuilder;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
import org.jclouds.location.Iso3166;
|
||||
import org.jclouds.location.Provider;
|
||||
import org.jclouds.location.suppliers.JustProvider;
|
||||
import org.jclouds.vcloud.domain.Org;
|
||||
import org.jclouds.vcloud.domain.ReferenceType;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.collect.Sets;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.ImmutableSet.Builder;
|
||||
|
||||
/**
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
@Singleton
|
||||
public class OrgAndVDCToLocationSupplier implements Supplier<Set<? extends Location>> {
|
||||
private final String providerName;
|
||||
public class OrgAndVDCToLocationSupplier extends JustProvider {
|
||||
|
||||
private final Supplier<Map<String, ReferenceType>> orgNameToResource;
|
||||
private final Supplier<Map<String, ? extends Org>> orgNameToVDCResource;
|
||||
private final Map<String, Set<String>> isoCodesById;
|
||||
|
||||
@Inject
|
||||
OrgAndVDCToLocationSupplier(@org.jclouds.location.Provider String providerName,
|
||||
OrgAndVDCToLocationSupplier(@Iso3166 Set<String> isoCodes, @Provider String providerName, @Provider URI endpoint,
|
||||
@org.jclouds.vcloud.endpoints.Org Supplier<Map<String, ReferenceType>> orgNameToResource,
|
||||
Supplier<Map<String, ? extends Org>> orgNameToVDCResource) {
|
||||
this.providerName = providerName;
|
||||
this.orgNameToResource = orgNameToResource;
|
||||
this.orgNameToVDCResource = orgNameToVDCResource;
|
||||
Supplier<Map<String, ? extends Org>> orgNameToVDCResource, @Iso3166 Map<String, Set<String>> isoCodesById) {
|
||||
super(isoCodes, providerName, endpoint);
|
||||
this.orgNameToResource = checkNotNull(orgNameToResource, "orgNameToResource");
|
||||
this.orgNameToVDCResource = checkNotNull(orgNameToVDCResource, "orgNameToVDCResource");
|
||||
this.isoCodesById = checkNotNull(isoCodesById, "isoCodesById");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<? extends Location> get() {
|
||||
Location provider = new LocationImpl(LocationScope.PROVIDER, providerName, providerName, null);
|
||||
Set<Location> locations = Sets.newLinkedHashSet();
|
||||
return buildJustProviderOrVDCs().build();
|
||||
}
|
||||
|
||||
for (ReferenceType org : orgNameToResource.get().values()) {
|
||||
Location orgL = new LocationImpl(LocationScope.REGION, org.getHref().toASCIIString(), org.getName(), provider);
|
||||
for (ReferenceType vdc : orgNameToVDCResource.get().get(org.getName()).getVDCs().values()) {
|
||||
locations.add(new LocationImpl(LocationScope.ZONE, vdc.getHref().toASCIIString(), vdc.getName(), orgL));
|
||||
protected Builder<Location> buildJustProviderOrVDCs() {
|
||||
Builder<Location> locations = ImmutableSet.builder();
|
||||
Location provider = Iterables.getOnlyElement(super.get());
|
||||
if (orgNameToResource.get().size() == 0)
|
||||
return locations.add(provider);
|
||||
else
|
||||
for (ReferenceType org : orgNameToResource.get().values()) {
|
||||
LocationBuilder builder = new LocationBuilder().scope(LocationScope.REGION).id(
|
||||
org.getHref().toASCIIString()).description((org.getName())).parent(provider);
|
||||
if (isoCodesById.containsKey(org.getHref().toASCIIString()))
|
||||
builder.iso3166Codes(isoCodesById.get(org.getHref().toASCIIString()));
|
||||
Location orgL = builder.build();
|
||||
for (ReferenceType vdc : orgNameToVDCResource.get().get(org.getName()).getVDCs().values()) {
|
||||
builder = new LocationBuilder().scope(LocationScope.ZONE).id(vdc.getHref().toASCIIString()).description(
|
||||
(vdc.getName())).parent(orgL);
|
||||
if (isoCodesById.containsKey(vdc.getHref().toASCIIString()))
|
||||
builder.iso3166Codes(isoCodesById.get(vdc.getHref().toASCIIString()));
|
||||
locations.add(builder.build());
|
||||
}
|
||||
}
|
||||
}
|
||||
return locations;
|
||||
}
|
||||
|
||||
}
|
|
@ -60,8 +60,7 @@ public class VCloudLoginAsyncClientTest extends RestClientTest<VCloudLoginAsyncC
|
|||
HttpRequest request = processor.createRequest(method);
|
||||
|
||||
assertEquals(request.getRequestLine(), "POST http://localhost:8080/login HTTP/1.1");
|
||||
assertNonPayloadHeadersEqual(request, HttpHeaders.ACCEPT
|
||||
+ ": application/vnd.vmware.vcloud.orgList+xml\n");
|
||||
assertNonPayloadHeadersEqual(request, HttpHeaders.ACCEPT + ": application/vnd.vmware.vcloud.orgList+xml\n");
|
||||
assertPayloadEquals(request, null, null, false);
|
||||
|
||||
assertResponseParserClassEquals(method, request, ParseLoginResponseFromHeaders.class);
|
||||
|
@ -100,16 +99,16 @@ public class VCloudLoginAsyncClientTest extends RestClientTest<VCloudLoginAsyncC
|
|||
|
||||
};
|
||||
}
|
||||
|
||||
@Timeout(duration = 10, timeUnit = TimeUnit.SECONDS)
|
||||
public interface VCloudLoginClient {
|
||||
|
||||
VCloudSession login();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public RestContextSpec<VCloudLoginClient, VCloudLoginAsyncClient> createContextSpec() {
|
||||
return contextSpec("test", "http://localhost:8080/login", "1", "identity", "credential", VCloudLoginClient.class,
|
||||
VCloudLoginAsyncClient.class);
|
||||
return contextSpec("test", "http://localhost:8080/login", "1", "", "identity", "credential",
|
||||
VCloudLoginClient.class, VCloudLoginAsyncClient.class);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,7 +39,6 @@ import org.testng.annotations.Test;
|
|||
|
||||
import com.google.inject.TypeLiteral;
|
||||
|
||||
|
||||
/**
|
||||
* Tests behavior of {@code VCloudVersionsAsyncClient}
|
||||
*
|
||||
|
@ -83,8 +82,8 @@ public class VCloudVersionsAsyncClientTest extends RestClientTest<VCloudVersions
|
|||
|
||||
@Override
|
||||
public RestContextSpec<VCloudVersionsClient, VCloudVersionsAsyncClient> createContextSpec() {
|
||||
return contextSpec("test", "http://localhost:8080", "1", "identity", "credential", VCloudVersionsClient.class,
|
||||
VCloudVersionsAsyncClient.class);
|
||||
return contextSpec("test", "http://localhost:8080", "1", "", "identity", "credential",
|
||||
VCloudVersionsClient.class, VCloudVersionsAsyncClient.class);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -65,7 +65,7 @@
|
|||
(.createContext (ComputeServiceContextFactory.) spec))
|
||||
|
||||
(^RestContextSpec defn context-spec [^StandaloneComputeServiceContextModule module]
|
||||
(StandaloneComputeServiceContextSpec. "servermanager", "http://host", "1", "identity", "credential", module, (ImmutableSet/of)))
|
||||
(StandaloneComputeServiceContextSpec. "servermanager", "http://host", "1", "", "identity", "credential", module, (ImmutableSet/of)))
|
||||
|
||||
(defrecord NodeListComputeService
|
||||
[node-list]
|
||||
|
|
|
@ -29,25 +29,26 @@ import com.google.inject.Module;
|
|||
* @author Adrian Cole
|
||||
*/
|
||||
public class StandaloneComputeServiceContextSpec<D, N, H, I, L> extends RestContextSpec<D, D> {
|
||||
public StandaloneComputeServiceContextSpec(String provider, String endpoint, String apiVersion, String identity,
|
||||
String credential, Class<D> driverClass,
|
||||
Class<? extends StandaloneComputeServiceContextBuilder<D>> contextBuilderClass) {
|
||||
this(provider, endpoint, apiVersion, identity, credential, driverClass, contextBuilderClass, ImmutableSet
|
||||
.<Module> of());
|
||||
public StandaloneComputeServiceContextSpec(String provider, String endpoint, String apiVersion, String iso3166Codes,
|
||||
String identity, String credential, Class<D> driverClass,
|
||||
Class<? extends StandaloneComputeServiceContextBuilder<D>> contextBuilderClass) {
|
||||
this(provider, endpoint, apiVersion, iso3166Codes, identity, credential, driverClass, contextBuilderClass,
|
||||
ImmutableSet.<Module> of());
|
||||
}
|
||||
|
||||
public StandaloneComputeServiceContextSpec(String provider, String endpoint, String apiVersion, String identity,
|
||||
String credential, Class<D> driverClass,
|
||||
Class<? extends StandaloneComputeServiceContextBuilder<D>> contextBuilderClass, Iterable<Module> modules) {
|
||||
this(provider, endpoint, apiVersion, identity, credential, driverClass, PropertiesBuilder.class,
|
||||
contextBuilderClass, modules);
|
||||
public StandaloneComputeServiceContextSpec(String provider, String endpoint, String apiVersion, String iso3166Codes,
|
||||
String identity, String credential, Class<D> driverClass,
|
||||
Class<? extends StandaloneComputeServiceContextBuilder<D>> contextBuilderClass, Iterable<Module> modules) {
|
||||
this(provider, endpoint, apiVersion, iso3166Codes, identity, credential, driverClass, PropertiesBuilder.class,
|
||||
contextBuilderClass, modules);
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
public StandaloneComputeServiceContextSpec(String provider, String endpoint, String apiVersion, String identity,
|
||||
String credential, Class<D> driverClass, Class<? extends PropertiesBuilder> propertiesBuilderClass,
|
||||
Class<? extends StandaloneComputeServiceContextBuilder<D>> contextBuilderClass, Iterable<Module> modules) {
|
||||
super(provider, endpoint, apiVersion, identity, credential, driverClass, driverClass,
|
||||
(Class) propertiesBuilderClass, (Class) contextBuilderClass, modules);
|
||||
@SuppressWarnings( { "unchecked", "rawtypes" })
|
||||
public StandaloneComputeServiceContextSpec(String provider, String endpoint, String apiVersion, String iso3166Codes,
|
||||
String identity, String credential, Class<D> driverClass,
|
||||
Class<? extends PropertiesBuilder> propertiesBuilderClass,
|
||||
Class<? extends StandaloneComputeServiceContextBuilder<D>> contextBuilderClass, Iterable<Module> modules) {
|
||||
super(provider, endpoint, apiVersion, iso3166Codes, identity, credential, driverClass, driverClass,
|
||||
(Class) propertiesBuilderClass, (Class) contextBuilderClass, modules);
|
||||
}
|
||||
}
|
|
@ -49,8 +49,8 @@ import org.jclouds.compute.options.TemplateOptions;
|
|||
import org.jclouds.compute.reference.ComputeServiceConstants;
|
||||
import org.jclouds.compute.strategy.CustomizeNodeAndAddToGoodMapOrPutExceptionIntoBadMap;
|
||||
import org.jclouds.compute.strategy.InitializeRunScriptOnNodeOrPlaceInBadMap;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.json.Json;
|
||||
import org.jclouds.location.config.LocationModule;
|
||||
import org.jclouds.rest.AuthorizationException;
|
||||
import org.jclouds.rest.suppliers.RetryOnTimeOutButNotOnAuthorizationExceptionSupplier;
|
||||
import org.jclouds.scriptbuilder.domain.Statement;
|
||||
|
@ -76,6 +76,7 @@ import com.google.inject.name.Names;
|
|||
public abstract class BaseComputeServiceContextModule extends AbstractModule {
|
||||
@Override
|
||||
protected void configure() {
|
||||
install(new LocationModule(authException));
|
||||
install(new ComputeServiceTimeoutsModule());
|
||||
bind(new TypeLiteral<Function<NodeMetadata, SshClient>>() {
|
||||
}).to(CreateSshClientOncePortIsListeningOnNode.class);
|
||||
|
@ -127,9 +128,9 @@ public abstract class BaseComputeServiceContextModule extends AbstractModule {
|
|||
checkNotNull(node, "node");
|
||||
checkNotNull(runScript, "runScript");
|
||||
checkNotNull(options, "options");
|
||||
return !options.shouldWrapInInitScript() ? factory.exec(node, runScript, options)
|
||||
: (options.shouldBlockOnComplete() ? factory.backgroundAndBlockOnComplete(node, runScript, options)
|
||||
: factory.background(node, runScript, options));
|
||||
return !options.shouldWrapInInitScript() ? factory.exec(node, runScript, options) : (options
|
||||
.shouldBlockOnComplete() ? factory.backgroundAndBlockOnComplete(node, runScript, options) : factory
|
||||
.background(node, runScript, options));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -206,41 +207,6 @@ public abstract class BaseComputeServiceContextModule extends AbstractModule {
|
|||
});
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
protected Supplier<Map<String, ? extends Location>> provideLocationMap(
|
||||
@Memoized Supplier<Set<? extends Location>> locations) {
|
||||
return Suppliers.compose(new Function<Set<? extends Location>, Map<String, ? extends Location>>() {
|
||||
|
||||
@Override
|
||||
public Map<String, ? extends Location> apply(Set<? extends Location> from) {
|
||||
return Maps.uniqueIndex(from, new Function<Location, String>() {
|
||||
|
||||
@Override
|
||||
public String apply(Location from) {
|
||||
return from.getId();
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
}, locations);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@Memoized
|
||||
protected Supplier<Set<? extends Location>> supplyLocationCache(@Named(PROPERTY_SESSION_INTERVAL) long seconds,
|
||||
final Supplier<Set<? extends Location>> locationSupplier) {
|
||||
return new RetryOnTimeOutButNotOnAuthorizationExceptionSupplier<Set<? extends Location>>(authException, seconds,
|
||||
new Supplier<Set<? extends Location>>() {
|
||||
@Override
|
||||
public Set<? extends Location> get() {
|
||||
return locationSupplier.get();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
protected Supplier<Map<String, ? extends Hardware>> provideSizeMap(@Memoized Supplier<Set<? extends Hardware>> sizes) {
|
||||
|
|
|
@ -19,14 +19,11 @@
|
|||
|
||||
package org.jclouds.compute.config;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
import static com.google.common.collect.Iterables.transform;
|
||||
import static com.google.common.collect.Sets.newHashSet;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.collect.TransformingSetSupplier;
|
||||
import org.jclouds.compute.ComputeServiceAdapter;
|
||||
import org.jclouds.compute.ComputeServiceContext;
|
||||
import org.jclouds.compute.domain.Hardware;
|
||||
|
@ -41,7 +38,6 @@ import org.jclouds.compute.strategy.ResumeNodeStrategy;
|
|||
import org.jclouds.compute.strategy.SuspendNodeStrategy;
|
||||
import org.jclouds.compute.strategy.impl.AdaptingComputeServiceStrategies;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.location.suppliers.OnlyLocationOrFirstZone;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Supplier;
|
||||
|
@ -64,36 +60,34 @@ public class ComputeServiceAdapterContextModule<S, A, N, H, I, L> extends BaseCo
|
|||
this.asyncClientType = asyncClientType;
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
@SuppressWarnings( { "unchecked", "rawtypes" })
|
||||
@Override
|
||||
protected void configure() {
|
||||
super.configure();
|
||||
bindDefaultLocation();
|
||||
bind(new TypeLiteral<ComputeServiceContext>() {
|
||||
}).to((TypeLiteral) TypeLiteral.get(Types.newParameterizedType(ComputeServiceContextImpl.class, syncClientType,
|
||||
asyncClientType))).in(Scopes.SINGLETON);
|
||||
}).to(
|
||||
(TypeLiteral) TypeLiteral.get(Types.newParameterizedType(ComputeServiceContextImpl.class,
|
||||
syncClientType, asyncClientType))).in(Scopes.SINGLETON);
|
||||
}
|
||||
|
||||
public class TransformingSetSupplier<F, T> implements Supplier<Set<? extends T>> {
|
||||
private final Supplier<Iterable<F>> backingSupplier;
|
||||
private final Function<F, T> converter;
|
||||
@Provides
|
||||
@Singleton
|
||||
protected Supplier<Set<? extends Location>> provideLocations(final ComputeServiceAdapter<N, H, I, L> adapter,
|
||||
Function<L, Location> transformer) {
|
||||
return new TransformingSetSupplier<L, Location>(new Supplier<Iterable<L>>() {
|
||||
|
||||
public TransformingSetSupplier(Supplier<Iterable<F>> backingSupplier, Function<F, T> converter) {
|
||||
this.backingSupplier = checkNotNull(backingSupplier, "backingSupplier");
|
||||
this.converter = checkNotNull(converter, "converter");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<? extends T> get() {
|
||||
return newHashSet(transform(backingSupplier.get(), converter));
|
||||
}
|
||||
@Override
|
||||
public Iterable<L> get() {
|
||||
return adapter.listLocations();
|
||||
}
|
||||
|
||||
}, transformer);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
protected Supplier<Set<? extends Hardware>> provideHardware(final ComputeServiceAdapter<N, H, I, L> adapter,
|
||||
Function<H, Hardware> transformer) {
|
||||
Function<H, Hardware> transformer) {
|
||||
return new TransformingSetSupplier<H, Hardware>(new Supplier<Iterable<H>>() {
|
||||
|
||||
@Override
|
||||
|
@ -107,7 +101,7 @@ public class ComputeServiceAdapterContextModule<S, A, N, H, I, L> extends BaseCo
|
|||
@Provides
|
||||
@Singleton
|
||||
protected Supplier<Set<? extends Image>> provideImages(final ComputeServiceAdapter<N, H, I, L> adapter,
|
||||
Function<I, Image> transformer) {
|
||||
Function<I, Image> transformer) {
|
||||
return new TransformingSetSupplier<I, Image>(new Supplier<Iterable<I>>() {
|
||||
|
||||
@Override
|
||||
|
@ -118,25 +112,6 @@ public class ComputeServiceAdapterContextModule<S, A, N, H, I, L> extends BaseCo
|
|||
}, transformer);
|
||||
}
|
||||
|
||||
protected void bindDefaultLocation() {
|
||||
bind(new TypeLiteral<Supplier<Location>>() {
|
||||
}).to(OnlyLocationOrFirstZone.class);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
protected Supplier<Set<? extends Location>> provideLocations(final ComputeServiceAdapter<N, H, I, L> adapter,
|
||||
Function<L, Location> transformer) {
|
||||
return new TransformingSetSupplier<L, Location>(new Supplier<Iterable<L>>() {
|
||||
|
||||
@Override
|
||||
public Iterable<L> get() {
|
||||
return adapter.listLocations();
|
||||
}
|
||||
|
||||
}, transformer);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
protected AddNodeWithTagStrategy defineAddNodeWithTagStrategy(AdaptingComputeServiceStrategies<N, H, I, L> in) {
|
||||
|
|
|
@ -155,4 +155,5 @@ public interface TemplateBuilder {
|
|||
* options such as inbound ports and run scripts.
|
||||
*/
|
||||
TemplateBuilder options(TemplateOptions options);
|
||||
|
||||
}
|
|
@ -140,7 +140,8 @@ public class TemplateBuilderImpl implements TemplateBuilder {
|
|||
boolean returnVal = true;
|
||||
if (location != null && input.getLocation() != null)
|
||||
returnVal = location.equals(input.getLocation()) || location.getParent() != null
|
||||
&& location.getParent().equals(input.getLocation());
|
||||
&& location.getParent().equals(input.getLocation()) || location.getParent().getParent() != null
|
||||
&& location.getParent().getParent().equals(input.getLocation());
|
||||
return returnVal;
|
||||
}
|
||||
|
||||
|
@ -497,19 +498,24 @@ public class TemplateBuilderImpl implements TemplateBuilder {
|
|||
*/
|
||||
@Override
|
||||
public TemplateBuilder locationId(final String locationId) {
|
||||
this.location = Iterables.find(locations.get(), new Predicate<Location>() {
|
||||
Set<? extends Location> locations = this.locations.get();
|
||||
try {
|
||||
this.location = Iterables.find(locations, new Predicate<Location>() {
|
||||
|
||||
@Override
|
||||
public boolean apply(Location input) {
|
||||
return input.getId().equals(locationId);
|
||||
}
|
||||
@Override
|
||||
public boolean apply(Location input) {
|
||||
return input.getId().equals(locationId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "locationId(" + locationId + ")";
|
||||
}
|
||||
@Override
|
||||
public String toString() {
|
||||
return "locationId(" + locationId + ")";
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
} catch (NoSuchElementException e) {
|
||||
throw new NoSuchElementException(String.format("location id %s not found in: %s", locationId, locations));
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
|
@ -20,8 +20,8 @@
|
|||
package org.jclouds.compute.stub.config;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.concurrent.ConcurrentMap;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
@ -41,8 +41,7 @@ import org.jclouds.compute.domain.OsFamily;
|
|||
import org.jclouds.compute.domain.Template;
|
||||
import org.jclouds.domain.Credentials;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
import org.jclouds.location.suppliers.JustProvider;
|
||||
import org.jclouds.rest.ResourceNotFoundException;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
|
@ -62,27 +61,27 @@ public class StubComputeServiceAdapter implements JCloudsNativeComputeServiceAda
|
|||
private final String publicIpPrefix;
|
||||
private final String privateIpPrefix;
|
||||
private final String passwordPrefix;
|
||||
private final String providerName;
|
||||
private final Supplier<Set<? extends Location>> locationSupplier;
|
||||
private final Map<OsFamily, Map<String, String>> osToVersionMap;
|
||||
|
||||
@Inject
|
||||
public StubComputeServiceAdapter(ConcurrentMap<String, NodeMetadata> nodes, Supplier<Location> location,
|
||||
@Named("NODE_ID") Provider<Integer> idProvider, @Named("PUBLIC_IP_PREFIX") String publicIpPrefix,
|
||||
@Named("PRIVATE_IP_PREFIX") String privateIpPrefix, @Named("PASSWORD_PREFIX") String passwordPrefix,
|
||||
@org.jclouds.location.Provider String providerName, Map<OsFamily, Map<String, String>> osToVersionMap) {
|
||||
@Named("NODE_ID") Provider<Integer> idProvider, @Named("PUBLIC_IP_PREFIX") String publicIpPrefix,
|
||||
@Named("PRIVATE_IP_PREFIX") String privateIpPrefix, @Named("PASSWORD_PREFIX") String passwordPrefix,
|
||||
JustProvider locationSupplier, Map<OsFamily, Map<String, String>> osToVersionMap) {
|
||||
this.nodes = nodes;
|
||||
this.location = location;
|
||||
this.idProvider = idProvider;
|
||||
this.publicIpPrefix = publicIpPrefix;
|
||||
this.privateIpPrefix = privateIpPrefix;
|
||||
this.passwordPrefix = passwordPrefix;
|
||||
this.providerName = providerName;
|
||||
this.locationSupplier = locationSupplier;
|
||||
this.osToVersionMap = osToVersionMap;
|
||||
}
|
||||
|
||||
@Override
|
||||
public NodeMetadata runNodeWithTagAndNameAndStoreCredentials(String tag, String name, Template template,
|
||||
Map<String, Credentials> credentialStore) {
|
||||
Map<String, Credentials> credentialStore) {
|
||||
NodeMetadataBuilder builder = new NodeMetadataBuilder();
|
||||
String id = idProvider.get() + "";
|
||||
builder.ids(id);
|
||||
|
@ -105,25 +104,22 @@ public class StubComputeServiceAdapter implements JCloudsNativeComputeServiceAda
|
|||
@Override
|
||||
public Iterable<Hardware> listHardwareProfiles() {
|
||||
return ImmutableSet.<Hardware> of(StubComputeServiceDependenciesModule.stub("small", 1, 1740, 160),
|
||||
StubComputeServiceDependenciesModule.stub("medium", 4, 7680, 850),
|
||||
StubComputeServiceDependenciesModule.stub("large", 8, 15360, 1690));
|
||||
StubComputeServiceDependenciesModule.stub("medium", 4, 7680, 850), StubComputeServiceDependenciesModule
|
||||
.stub("large", 8, 15360, 1690));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Iterable<Image> listImages() {
|
||||
Location zone = location.get().getParent();
|
||||
String parentId = zone.getId();
|
||||
Credentials defaultCredentials = new Credentials("root", null);
|
||||
Set<Image> images = Sets.newLinkedHashSet();
|
||||
int id = 1;
|
||||
for (boolean is64Bit : new boolean[] { true, false })
|
||||
for (Entry<OsFamily, Map<String, String>> osVersions : this.osToVersionMap.entrySet()) {
|
||||
for (String version : Sets.newHashSet(osVersions.getValue().values())) {
|
||||
for (String version : Sets.newLinkedHashSet(osVersions.getValue().values())) {
|
||||
String desc = String.format("stub %s %s", osVersions.getKey(), is64Bit);
|
||||
images.add(new ImageBuilder().providerId(id + "").name(osVersions.getKey().name())
|
||||
.id(parentId + "/" + id++).location(zone)
|
||||
.operatingSystem(new OperatingSystem(osVersions.getKey(), desc, version, null, desc, is64Bit))
|
||||
.description(desc).defaultCredentials(defaultCredentials).build());
|
||||
images.add(new ImageBuilder().ids(id++ + "").name(osVersions.getKey().name()).location(location.get())
|
||||
.operatingSystem(new OperatingSystem(osVersions.getKey(), desc, version, null, desc, is64Bit))
|
||||
.description(desc).defaultCredentials(defaultCredentials).build());
|
||||
}
|
||||
}
|
||||
return images;
|
||||
|
@ -134,13 +130,10 @@ public class StubComputeServiceAdapter implements JCloudsNativeComputeServiceAda
|
|||
return nodes.values();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public Iterable<Location> listLocations() {
|
||||
Location provider = new LocationImpl(LocationScope.PROVIDER, providerName, providerName, null);
|
||||
Location region = new LocationImpl(LocationScope.REGION, providerName + "region", providerName + "region",
|
||||
provider);
|
||||
return ImmutableSet.<Location> of(new LocationImpl(LocationScope.ZONE, providerName + "zone", providerName
|
||||
+ "zone", region));
|
||||
return (Iterable<Location>) locationSupplier.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -26,8 +26,12 @@ import javax.inject.Singleton;
|
|||
import org.jclouds.compute.config.JCloudsNativeComputeServiceAdapterContextModule;
|
||||
import org.jclouds.compute.domain.NodeMetadata;
|
||||
import org.jclouds.concurrent.SingleThreaded;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.location.suppliers.OnlyLocationOrFirstZone;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.inject.Provides;
|
||||
import com.google.inject.TypeLiteral;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -36,7 +40,7 @@ import com.google.inject.Provides;
|
|||
@SuppressWarnings("rawtypes")
|
||||
@SingleThreaded
|
||||
public class StubComputeServiceContextModule extends
|
||||
JCloudsNativeComputeServiceAdapterContextModule<ConcurrentMap, ConcurrentMap> {
|
||||
JCloudsNativeComputeServiceAdapterContextModule<ConcurrentMap, ConcurrentMap> {
|
||||
|
||||
public StubComputeServiceContextModule() {
|
||||
super(ConcurrentMap.class, ConcurrentMap.class, StubComputeServiceAdapter.class);
|
||||
|
@ -51,6 +55,8 @@ public class StubComputeServiceContextModule extends
|
|||
@Override
|
||||
protected void configure() {
|
||||
install(new StubComputeServiceDependenciesModule());
|
||||
bind(new TypeLiteral<Supplier<Location>>() {
|
||||
}).to(OnlyLocationOrFirstZone.class);
|
||||
super.configure();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -39,6 +39,8 @@ import org.jclouds.compute.domain.Template;
|
|||
import org.jclouds.compute.domain.TemplateBuilder;
|
||||
import org.jclouds.compute.domain.os.OsFamilyVersion64Bit;
|
||||
import org.jclouds.compute.reference.ComputeServiceConstants;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.json.Json;
|
||||
import org.jclouds.json.config.GsonModule;
|
||||
import org.jclouds.logging.log4j.config.Log4JLoggingModule;
|
||||
|
@ -174,6 +176,53 @@ public abstract class BaseTemplateBuilderLiveTest {
|
|||
assertEquals(getCores(defaultTemplate.getHardware()), 1.0d);
|
||||
}
|
||||
|
||||
protected abstract Set<String> getIso3166Codes();
|
||||
|
||||
@Test(groups = { "integration", "live" })
|
||||
public void testGetAssignableLocations() throws Exception {
|
||||
assertProvider(context.getProviderSpecificContext());
|
||||
for (Location location : context.getComputeService().listAssignableLocations()) {
|
||||
System.err.printf("location %s%n", location);
|
||||
assert location.getId() != null : location;
|
||||
assert location != location.getParent() : location;
|
||||
assert location.getScope() != null : location;
|
||||
switch (location.getScope()) {
|
||||
case PROVIDER:
|
||||
assertProvider(location);
|
||||
break;
|
||||
case REGION:
|
||||
assertProvider(location.getParent());
|
||||
assert location.getIso3166Codes().size() == 0
|
||||
|| location.getParent().getIso3166Codes().containsAll(location.getIso3166Codes()) : location
|
||||
+ " ||" + location.getParent();
|
||||
break;
|
||||
case ZONE:
|
||||
Location provider = location.getParent().getParent();
|
||||
// zone can be a direct descendant of provider
|
||||
if (provider == null)
|
||||
provider = location.getParent();
|
||||
assertProvider(provider);
|
||||
assert location.getIso3166Codes().size() == 0
|
||||
|| location.getParent().getIso3166Codes().containsAll(location.getIso3166Codes()) : location
|
||||
+ " ||" + location.getParent();
|
||||
break;
|
||||
case HOST:
|
||||
Location provider2 = location.getParent().getParent().getParent();
|
||||
// zone can be a direct descendant of provider
|
||||
if (provider2 == null)
|
||||
provider2 = location.getParent().getParent();
|
||||
assertProvider(provider2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void assertProvider(Location provider) {
|
||||
assertEquals(provider.getScope(), LocationScope.PROVIDER);
|
||||
assertEquals(provider.getParent(), null);
|
||||
assertEquals(provider.getIso3166Codes(), getIso3166Codes());
|
||||
}
|
||||
|
||||
@AfterTest
|
||||
protected void cleanup() throws InterruptedException, ExecutionException, TimeoutException {
|
||||
context.close();
|
||||
|
|
|
@ -43,9 +43,9 @@ public class ComputeServiceContextFactoryTest {
|
|||
public void testStandalone() {
|
||||
@SuppressWarnings("rawtypes")
|
||||
ComputeServiceContext context = new ComputeServiceContextFactory()
|
||||
.createContext(new StandaloneComputeServiceContextSpec<ConcurrentMap, NodeMetadata, Hardware, Image, Location>(
|
||||
"stub", "stub", "1", "identity", "credential", ConcurrentMap.class,
|
||||
StubComputeServiceContextBuilder.class, ImmutableSet.<Module> of()));
|
||||
.createContext(new StandaloneComputeServiceContextSpec<ConcurrentMap, NodeMetadata, Hardware, Image, Location>(
|
||||
"stub", "stub", "1", "", "identity", "credential", ConcurrentMap.class,
|
||||
StubComputeServiceContextBuilder.class, ImmutableSet.<Module> of()));
|
||||
|
||||
context.getComputeService().listNodes();
|
||||
}
|
||||
|
|
|
@ -19,8 +19,12 @@
|
|||
|
||||
package org.jclouds.compute;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
/**
|
||||
*
|
||||
*
|
||||
|
@ -38,4 +42,9 @@ public class StubTemplateBuilderIntegrationTest extends BaseTemplateBuilderLiveT
|
|||
identity = "stub";
|
||||
credential = "stub";
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Set<String> getIso3166Codes() {
|
||||
return ImmutableSet.<String> of();
|
||||
}
|
||||
}
|
|
@ -19,6 +19,9 @@
|
|||
|
||||
package org.jclouds;
|
||||
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.location.reference.LocationConstants;
|
||||
|
||||
/**
|
||||
* Constants used in jclouds services.
|
||||
*
|
||||
|
@ -194,6 +197,7 @@ public interface Constants {
|
|||
* api.
|
||||
*/
|
||||
public static final String PROPERTY_ENDPOINT = "jclouds.endpoint";
|
||||
|
||||
/**
|
||||
* String property.
|
||||
* <p/>
|
||||
|
@ -201,6 +205,15 @@ public interface Constants {
|
|||
*/
|
||||
public static final String PROPERTY_IDENTITY = "jclouds.identity";
|
||||
|
||||
/**
|
||||
* String property. default("")
|
||||
* <p/>
|
||||
* comma-delimited iso 3166 codes; ex. US-CA,US
|
||||
*
|
||||
* @see Location#getIso3166Codes
|
||||
*/
|
||||
public static final String PROPERTY_ISO3166_CODES = "jclouds." + LocationConstants.ISO3166_CODES;
|
||||
|
||||
/**
|
||||
* String property.
|
||||
* <p/>
|
||||
|
|
|
@ -25,6 +25,7 @@ import static org.jclouds.Constants.PROPERTY_CREDENTIAL;
|
|||
import static org.jclouds.Constants.PROPERTY_ENDPOINT;
|
||||
import static org.jclouds.Constants.PROPERTY_IDENTITY;
|
||||
import static org.jclouds.Constants.PROPERTY_IO_WORKER_THREADS;
|
||||
import static org.jclouds.Constants.PROPERTY_ISO3166_CODES;
|
||||
import static org.jclouds.Constants.PROPERTY_MAX_CONNECTIONS_PER_CONTEXT;
|
||||
import static org.jclouds.Constants.PROPERTY_MAX_CONNECTIONS_PER_HOST;
|
||||
import static org.jclouds.Constants.PROPERTY_MAX_CONNECTION_REUSE;
|
||||
|
@ -48,6 +49,7 @@ import java.util.Properties;
|
|||
import javax.annotation.Nullable;
|
||||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.common.base.Joiner;
|
||||
|
||||
/**
|
||||
* Builds properties used in Http engines
|
||||
|
@ -201,6 +203,7 @@ public class PropertiesBuilder {
|
|||
|
||||
protected Properties defaultProperties() {
|
||||
Properties props = new Properties();
|
||||
props.setProperty(PROPERTY_ISO3166_CODES, "");
|
||||
props.setProperty(PROPERTY_MAX_CONNECTIONS_PER_CONTEXT, 20 + "");
|
||||
props.setProperty(PROPERTY_MAX_CONNECTIONS_PER_HOST, 0 + "");
|
||||
props.setProperty(PROPERTY_SO_TIMEOUT, 60000 + "");
|
||||
|
@ -228,6 +231,11 @@ public class PropertiesBuilder {
|
|||
return this;
|
||||
}
|
||||
|
||||
public PropertiesBuilder iso3166Codes(Iterable<String> codes) {
|
||||
properties.setProperty(PROPERTY_ISO3166_CODES, Joiner.on(',').join(codes));
|
||||
return this;
|
||||
}
|
||||
|
||||
public PropertiesBuilder apiVersion(String apiVersion) {
|
||||
properties.setProperty(PROPERTY_API_VERSION, apiVersion);
|
||||
return this;
|
||||
|
|
|
@ -21,7 +21,7 @@ package org.jclouds.collect;
|
|||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
import static com.google.common.collect.Iterables.transform;
|
||||
import static com.google.common.collect.Sets.newHashSet;
|
||||
import static com.google.common.collect.Sets.newLinkedHashSet;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
|
@ -43,7 +43,7 @@ public class TransformingSetSupplier<F, T> implements Supplier<Set<? extends T>>
|
|||
|
||||
@Override
|
||||
public Set<? extends T> get() {
|
||||
return newHashSet(transform(backingSupplier.get(), converter));
|
||||
return newLinkedHashSet(transform(backingSupplier.get(), converter));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -19,15 +19,18 @@
|
|||
|
||||
package org.jclouds.domain;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Running Operating system
|
||||
* Description of where a resource is running. Note this can be physical or virtual.
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
public interface Location {
|
||||
|
||||
/**
|
||||
* Scope of the location, ex. region, datacenter
|
||||
* Scope of the location, ex. region, zone, host
|
||||
*
|
||||
*/
|
||||
LocationScope getScope();
|
||||
|
@ -48,4 +51,16 @@ public interface Location {
|
|||
*/
|
||||
Location getParent();
|
||||
|
||||
/**
|
||||
* @return immutable set of metadata relating to this location
|
||||
*/
|
||||
Map<String, Object> getMetadata();
|
||||
|
||||
/**
|
||||
* @return if known, the IS0 3166 or 3166-2 divisions where this service may run. ex. a set of
|
||||
* strings like "US" or "US-CA"; otherwise returns an empty list.
|
||||
* @see <a
|
||||
* href="http://www.iso.org/iso/country_codes/background_on_iso_3166/what_is_iso_3166.htm">3166</a>
|
||||
*/
|
||||
Set<String> getIso3166Codes();
|
||||
}
|
|
@ -0,0 +1,77 @@
|
|||
/**
|
||||
*
|
||||
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||
*
|
||||
* ====================================================================
|
||||
* Licensed 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.domain;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
public class LocationBuilder {
|
||||
protected LocationScope scope;
|
||||
protected String id;
|
||||
protected String description;
|
||||
protected Location parent;
|
||||
protected Set<String> iso3166Codes = ImmutableSet.of();
|
||||
protected Map<String, Object> metadata = ImmutableMap.of();
|
||||
|
||||
public LocationBuilder scope(LocationScope scope) {
|
||||
this.scope = scope;
|
||||
return this;
|
||||
}
|
||||
|
||||
public LocationBuilder id(String id) {
|
||||
this.id = id;
|
||||
return this;
|
||||
}
|
||||
|
||||
public LocationBuilder description(String description) {
|
||||
this.description = description;
|
||||
return this;
|
||||
}
|
||||
|
||||
public LocationBuilder parent(Location parent) {
|
||||
this.parent = parent;
|
||||
return this;
|
||||
}
|
||||
|
||||
public LocationBuilder iso3166Codes(Iterable<String> iso3166Codes) {
|
||||
this.iso3166Codes = ImmutableSet.copyOf(checkNotNull(iso3166Codes, "iso3166Codes"));
|
||||
return this;
|
||||
}
|
||||
|
||||
public LocationBuilder metadata(Map<String, Object> metadata) {
|
||||
this.metadata = ImmutableMap.copyOf(checkNotNull(metadata, "metadata"));
|
||||
return this;
|
||||
}
|
||||
|
||||
public Location build() {
|
||||
return new LocationImpl(scope, id, description, parent, iso3166Codes, metadata);
|
||||
}
|
||||
}
|
|
@ -22,19 +22,22 @@ package org.jclouds.domain.internal;
|
|||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
/**
|
||||
* Idpayload of the object
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
public class LocationImpl implements Location, Serializable {
|
||||
|
||||
/** The serialVersionUID */
|
||||
private static final long serialVersionUID = -280558162576368264L;
|
||||
|
||||
|
@ -42,36 +45,75 @@ public class LocationImpl implements Location, Serializable {
|
|||
private final String id;
|
||||
private final String description;
|
||||
private final Location parent;
|
||||
private final Set<String> iso3166Codes;
|
||||
private final Map<String, Object> metadata;
|
||||
|
||||
public LocationImpl(LocationScope scope, String id, String description, @Nullable Location parent) {
|
||||
public LocationImpl(LocationScope scope, String id, String description, @Nullable Location parent,
|
||||
Iterable<String> iso3166Codes, Map<String, Object> metadata) {
|
||||
this.scope = checkNotNull(scope, "scope");
|
||||
this.id = checkNotNull(id, "id");
|
||||
this.description = checkNotNull(description, "description");
|
||||
this.metadata = ImmutableMap.copyOf(checkNotNull(metadata, "metadata"));
|
||||
this.iso3166Codes = ImmutableSet.copyOf(checkNotNull(iso3166Codes, "iso3166Codes"));
|
||||
this.parent = parent;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public LocationScope getScope() {
|
||||
return scope;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return description;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public Location getParent() {
|
||||
return parent;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public Set<String> getIso3166Codes() {
|
||||
return iso3166Codes;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritDoc}
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> getMetadata() {
|
||||
return metadata;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((description == null) ? 0 : description.hashCode());
|
||||
result = prime * result + ((id == null) ? 0 : id.hashCode());
|
||||
result = prime * result + ((iso3166Codes == null) ? 0 : iso3166Codes.hashCode());
|
||||
result = prime * result + ((metadata == null) ? 0 : metadata.hashCode());
|
||||
result = prime * result + ((parent == null) ? 0 : parent.hashCode());
|
||||
result = prime * result + ((scope == null) ? 0 : scope.hashCode());
|
||||
return result;
|
||||
|
@ -96,6 +138,16 @@ public class LocationImpl implements Location, Serializable {
|
|||
return false;
|
||||
} else if (!id.equals(other.id))
|
||||
return false;
|
||||
if (iso3166Codes == null) {
|
||||
if (other.iso3166Codes != null)
|
||||
return false;
|
||||
} else if (!iso3166Codes.equals(other.iso3166Codes))
|
||||
return false;
|
||||
if (metadata == null) {
|
||||
if (other.metadata != null)
|
||||
return false;
|
||||
} else if (!metadata.equals(other.metadata))
|
||||
return false;
|
||||
if (parent == null) {
|
||||
if (other.parent != null)
|
||||
return false;
|
||||
|
@ -112,7 +164,8 @@ public class LocationImpl implements Location, Serializable {
|
|||
@Override
|
||||
public String toString() {
|
||||
return "[id=" + id + ", scope=" + scope + ", description=" + description + ", parent="
|
||||
+ ((parent == null) ? null : parent.getId()) + "]";
|
||||
+ ((parent == null) ? null : parent.getId()) + ", iso3166Codes=" + iso3166Codes + ", metadata="
|
||||
+ metadata + "]";
|
||||
}
|
||||
|
||||
}
|
|
@ -17,26 +17,24 @@
|
|||
* ====================================================================
|
||||
*/
|
||||
|
||||
package org.jclouds.libvirt.compute.functions;
|
||||
package org.jclouds.location;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
import java.lang.annotation.ElementType;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
import org.jclouds.libvirt.Datacenter;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import javax.inject.Qualifier;
|
||||
|
||||
/**
|
||||
* Related to a Iso3166 code
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*
|
||||
*/
|
||||
@Singleton
|
||||
public class DatacenterToLocation implements Function<Datacenter, Location> {
|
||||
@Retention(value = RetentionPolicy.RUNTIME)
|
||||
@Target(value = { ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD })
|
||||
@Qualifier
|
||||
public @interface Iso3166 {
|
||||
|
||||
@Override
|
||||
public Location apply(Datacenter from) {
|
||||
return new LocationImpl(LocationScope.ZONE, from.id + "", from.name, null);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
|
@ -17,26 +17,40 @@
|
|||
* ====================================================================
|
||||
*/
|
||||
|
||||
package org.jclouds.libvirt.compute.functions;
|
||||
package org.jclouds.location.config;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
import org.jclouds.libvirt.Datacenter;
|
||||
import org.jclouds.location.suppliers.JustProvider;
|
||||
import org.jclouds.location.suppliers.OnlyLocationOrFirstZone;
|
||||
import org.jclouds.rest.AuthorizationException;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.inject.TypeLiteral;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*
|
||||
*/
|
||||
@Singleton
|
||||
public class LibvirtNodeToLocation implements Function<Datacenter, Location> {
|
||||
|
||||
@Override
|
||||
public Location apply(Datacenter from) {
|
||||
return new LocationImpl(LocationScope.ZONE, from.id + "", from.name, null);
|
||||
public class JustProviderLocationModule extends LocationModule {
|
||||
public JustProviderLocationModule() {
|
||||
super();
|
||||
}
|
||||
|
||||
}
|
||||
public JustProviderLocationModule(AtomicReference<AuthorizationException> authException) {
|
||||
super(authException);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(new TypeLiteral<Supplier<Set<? extends Location>>>() {
|
||||
}).to(JustProvider.class);
|
||||
bind(new TypeLiteral<Supplier<Location>>() {
|
||||
}).to(OnlyLocationOrFirstZone.class);
|
||||
super.configure();
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,96 @@
|
|||
/**
|
||||
*
|
||||
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||
*
|
||||
* ====================================================================
|
||||
* Licensed 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.location.config;
|
||||
|
||||
import static org.jclouds.Constants.PROPERTY_SESSION_INTERVAL;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.collect.Memoized;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.rest.AuthorizationException;
|
||||
import org.jclouds.rest.suppliers.RetryOnTimeOutButNotOnAuthorizationExceptionSupplier;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.base.Suppliers;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.inject.AbstractModule;
|
||||
import com.google.inject.Provides;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
public class LocationModule extends AbstractModule {
|
||||
protected final AtomicReference<AuthorizationException> authException;
|
||||
|
||||
public LocationModule() {
|
||||
this(new AtomicReference<AuthorizationException>());
|
||||
}
|
||||
|
||||
public LocationModule(AtomicReference<AuthorizationException> authException) {
|
||||
this.authException = authException;
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
protected Supplier<Map<String, ? extends Location>> provideLocationMap(
|
||||
@Memoized Supplier<Set<? extends Location>> locations) {
|
||||
return Suppliers.compose(new Function<Set<? extends Location>, Map<String, ? extends Location>>() {
|
||||
|
||||
@Override
|
||||
public Map<String, ? extends Location> apply(Set<? extends Location> from) {
|
||||
return Maps.uniqueIndex(from, new Function<Location, String>() {
|
||||
|
||||
@Override
|
||||
public String apply(Location from) {
|
||||
return from.getId();
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
}, locations);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@Memoized
|
||||
protected Supplier<Set<? extends Location>> supplyLocationCache(@Named(PROPERTY_SESSION_INTERVAL) long seconds,
|
||||
final Supplier<Set<? extends Location>> locationSupplier) {
|
||||
return new RetryOnTimeOutButNotOnAuthorizationExceptionSupplier<Set<? extends Location>>(authException, seconds,
|
||||
new Supplier<Set<? extends Location>>() {
|
||||
@Override
|
||||
public Set<? extends Location> get() {
|
||||
return locationSupplier.get();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void configure() {
|
||||
}
|
||||
}
|
|
@ -0,0 +1,86 @@
|
|||
/**
|
||||
*
|
||||
* Copyright (C) 2010 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||
*
|
||||
* ====================================================================
|
||||
* Licensed 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.location.config;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
import static com.google.inject.name.Names.named;
|
||||
import static org.jclouds.location.reference.LocationConstants.ISO3166_CODES;
|
||||
import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGION;
|
||||
import static org.jclouds.location.reference.LocationConstants.PROPERTY_ZONE;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.location.Iso3166;
|
||||
|
||||
import com.google.common.base.Splitter;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.ImmutableMap.Builder;
|
||||
import com.google.inject.ConfigurationException;
|
||||
import com.google.inject.Injector;
|
||||
import com.google.inject.Key;
|
||||
|
||||
/**
|
||||
*
|
||||
* looks for properties bound to the naming conventions jclouds.region.{@code regionId}
|
||||
* .iso3166-codes and jclouds.zone.{@code zoneId}.iso3166-codes
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
@Singleton
|
||||
public class ProvideIso3166CodesByLocationIdViaProperties implements javax.inject.Provider<Map<String, Set<String>>> {
|
||||
|
||||
private final Injector injector;
|
||||
|
||||
@Inject
|
||||
ProvideIso3166CodesByLocationIdViaProperties(Injector injector) {
|
||||
this.injector = checkNotNull(injector, "injector");
|
||||
}
|
||||
|
||||
@Singleton
|
||||
@Iso3166
|
||||
@Override
|
||||
public Map<String, Set<String>> get() {
|
||||
Builder<String, Set<String>> codes = ImmutableMap.<String, Set<String>> builder();
|
||||
for (String key : ImmutableSet.of(PROPERTY_REGION, PROPERTY_ZONE))
|
||||
try {
|
||||
String regionString = injector.getInstance(Key.get(String.class, named(key + "s")));
|
||||
for (String region : Splitter.on(',').split(regionString)) {
|
||||
try {
|
||||
codes.put(region, ImmutableSet.copyOf(Splitter.on(',')
|
||||
.split(
|
||||
injector.getInstance(Key.get(String.class, named(key + "." + region + "."
|
||||
+ ISO3166_CODES))))));
|
||||
} catch (ConfigurationException e) {
|
||||
// this happens if regions property isn't set
|
||||
// services not run by AWS may not have regions, so this is ok.
|
||||
}
|
||||
}
|
||||
} 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 codes.build();
|
||||
}
|
||||
}
|
|
@ -19,6 +19,7 @@
|
|||
|
||||
package org.jclouds.location.config;
|
||||
|
||||
import static org.jclouds.location.reference.LocationConstants.ENDPOINT;
|
||||
import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGION;
|
||||
import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGIONS;
|
||||
|
||||
|
@ -28,7 +29,6 @@ import java.util.Map;
|
|||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.location.Provider;
|
||||
import org.jclouds.location.Region;
|
||||
|
||||
import com.google.common.base.Splitter;
|
||||
|
@ -41,7 +41,7 @@ import com.google.inject.name.Names;
|
|||
|
||||
/**
|
||||
*
|
||||
* looks for properties bound to the naming convention jclouds.location.region.{@code regionId}.endpoint
|
||||
* looks for properties bound to the naming convention jclouds.region.{@code regionId}.endpoint
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
|
@ -63,17 +63,14 @@ public class ProvideRegionToURIViaProperties implements javax.inject.Provider<Ma
|
|||
String regionString = injector.getInstance(Key.get(String.class, Names.named(PROPERTY_REGIONS)));
|
||||
Builder<String, URI> regions = ImmutableMap.<String, URI> builder();
|
||||
for (String region : Splitter.on(',').split(regionString)) {
|
||||
regions.put(
|
||||
region,
|
||||
URI.create(injector.getInstance(Key.get(String.class,
|
||||
Names.named(PROPERTY_REGION + "." + region + ".endpoint")))));
|
||||
regions.put(region, URI.create(injector.getInstance(Key.get(String.class, Names.named(PROPERTY_REGION + "."
|
||||
+ region + "." + ENDPOINT)))));
|
||||
}
|
||||
return regions.build();
|
||||
} 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 ImmutableMap.of(injector.getInstance(Key.get(String.class, Provider.class)),
|
||||
injector.getInstance(Key.get(URI.class, Provider.class)));
|
||||
return ImmutableMap.of();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -19,38 +19,29 @@
|
|||
|
||||
package org.jclouds.location.config;
|
||||
|
||||
import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGIONS;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Named;
|
||||
import javax.inject.Singleton;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.location.suppliers.OnlyLocationOrFirstZoneOrRegionMatchingRegionId;
|
||||
import org.jclouds.location.suppliers.RegionToProviderOrJustProvider;
|
||||
|
||||
import org.jclouds.location.Region;
|
||||
|
||||
import com.google.common.base.Splitter;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.inject.TypeLiteral;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*
|
||||
*/
|
||||
@Singleton
|
||||
public class ProvideRegionsViaProperties implements javax.inject.Provider<Set<String>> {
|
||||
public class RegionsLocationModule extends LocationModule {
|
||||
|
||||
private final Set<String> regions;
|
||||
|
||||
@Inject
|
||||
ProvideRegionsViaProperties(@Named(PROPERTY_REGIONS) String regions) {
|
||||
this.regions = ImmutableSet.copyOf(Splitter.on(',').split(regions));
|
||||
}
|
||||
|
||||
@Singleton
|
||||
@Region
|
||||
@Override
|
||||
public Set<String> get() {
|
||||
return regions;
|
||||
protected void configure() {
|
||||
bind(new TypeLiteral<Supplier<Set<? extends Location>>>() {
|
||||
}).to(RegionToProviderOrJustProvider.class);
|
||||
bind(new TypeLiteral<Supplier<Location>>() {
|
||||
}).to(OnlyLocationOrFirstZoneOrRegionMatchingRegionId.class);
|
||||
super.configure();
|
||||
}
|
||||
|
||||
}
|
|
@ -24,6 +24,10 @@ package org.jclouds.location.reference;
|
|||
* @author Adrian Cole
|
||||
*/
|
||||
public interface LocationConstants {
|
||||
public static final String PROPERTY_REGIONS = "jclouds.location.regions";
|
||||
public static final String PROPERTY_REGION = "jclouds.location.region";
|
||||
public static final String ENDPOINT = "endpoint";
|
||||
public static final String ISO3166_CODES = "iso3166-codes";
|
||||
public static final String PROPERTY_REGIONS = "jclouds.regions";
|
||||
public static final String PROPERTY_REGION = "jclouds.region";
|
||||
public static final String PROPERTY_ZONES = "jclouds.zones";
|
||||
public static final String PROPERTY_ZONE = "jclouds.zone";
|
||||
}
|
||||
|
|
|
@ -19,6 +19,8 @@
|
|||
|
||||
package org.jclouds.location.suppliers;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.Set;
|
||||
|
||||
|
@ -26,39 +28,35 @@ import javax.inject.Inject;
|
|||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationBuilder;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
import org.jclouds.location.Iso3166;
|
||||
import org.jclouds.location.Provider;
|
||||
import org.jclouds.location.Region;
|
||||
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.ImmutableSet.Builder;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
@Singleton
|
||||
public class SupplyPredefinedRegions implements Supplier<Set<? extends Location>> {
|
||||
private final Set<String> regions;
|
||||
public class JustProvider implements Supplier<Set<? extends Location>> {
|
||||
private final String providerName;
|
||||
private final URI endpoint;
|
||||
private final Set<String> isoCodes;
|
||||
|
||||
@Inject
|
||||
SupplyPredefinedRegions(@Region Set<String> regions, @Provider String providerName, @Provider URI endpoint) {
|
||||
this.regions = regions;
|
||||
this.providerName = providerName;
|
||||
this.endpoint = endpoint;
|
||||
public JustProvider(@Iso3166 Set<String> isoCodes, @Provider String providerName, @Provider URI endpoint) {
|
||||
this.providerName = checkNotNull(providerName, "providerName");
|
||||
this.endpoint = checkNotNull(endpoint, "endpoint");
|
||||
this.isoCodes = checkNotNull(isoCodes, "isoCodes");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<? extends Location> get() {
|
||||
Builder<Location> locations = ImmutableSet.builder();
|
||||
Location provider = new LocationImpl(LocationScope.PROVIDER, providerName, endpoint.toASCIIString(), null);
|
||||
for (String zone : regions) {
|
||||
locations.add(new LocationImpl(LocationScope.REGION, zone.toString(), zone.toString(), provider));
|
||||
}
|
||||
return locations.build();
|
||||
return ImmutableSet.of(new LocationBuilder().scope(LocationScope.PROVIDER).id(providerName).description(
|
||||
endpoint.toASCIIString()).iso3166Codes(isoCodes).build());
|
||||
}
|
||||
|
||||
}
|
|
@ -36,6 +36,8 @@ import org.jclouds.location.Region;
|
|||
import com.google.common.base.Predicate;
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.inject.Injector;
|
||||
import com.google.inject.Key;
|
||||
|
||||
/**
|
||||
* @author Adrian Cole
|
||||
|
@ -55,12 +57,12 @@ public class OnlyLocationOrFirstZoneOrRegionMatchingRegionId implements Supplier
|
|||
@Override
|
||||
public boolean apply(Location input) {
|
||||
switch (input.getScope()) {
|
||||
case ZONE:
|
||||
return input.getParent().getId().equals(region);
|
||||
case REGION:
|
||||
return input.getId().equals(region);
|
||||
default:
|
||||
return false;
|
||||
case ZONE:
|
||||
return input.getParent().getId().equals(region);
|
||||
case REGION:
|
||||
return input.getId().equals(region);
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -70,13 +72,13 @@ public class OnlyLocationOrFirstZoneOrRegionMatchingRegionId implements Supplier
|
|||
}
|
||||
}
|
||||
|
||||
private final IsRegionAndIdEqualsOrIsZoneParentIdEquals matcher;
|
||||
private final Injector injector;
|
||||
private final Supplier<Set<? extends Location>> locationsSupplier;
|
||||
|
||||
@Inject
|
||||
OnlyLocationOrFirstZoneOrRegionMatchingRegionId(IsRegionAndIdEqualsOrIsZoneParentIdEquals matcher,
|
||||
@Memoized Supplier<Set<? extends Location>> locationsSupplier) {
|
||||
this.matcher = checkNotNull(matcher, "matcher");
|
||||
OnlyLocationOrFirstZoneOrRegionMatchingRegionId(Injector injector,
|
||||
@Memoized Supplier<Set<? extends Location>> locationsSupplier) {
|
||||
this.injector = checkNotNull(injector, "injector");
|
||||
this.locationsSupplier = checkNotNull(locationsSupplier, "locationsSupplier");
|
||||
}
|
||||
|
||||
|
@ -86,7 +88,12 @@ public class OnlyLocationOrFirstZoneOrRegionMatchingRegionId implements Supplier
|
|||
Set<? extends Location> locations = locationsSupplier.get();
|
||||
if (locationsSupplier.get().size() == 1)
|
||||
return getOnlyElement(locationsSupplier.get());
|
||||
IsRegionAndIdEqualsOrIsZoneParentIdEquals matcher = null;
|
||||
try {
|
||||
String region = injector.getInstance(Key.get(String.class, Region.class));
|
||||
if (region == null)
|
||||
return Iterables.get(locationsSupplier.get(), 0);
|
||||
matcher = injector.getInstance(IsRegionAndIdEqualsOrIsZoneParentIdEquals.class);
|
||||
Location toReturn = Iterables.find(locations, matcher);
|
||||
return toReturn.getScope() == LocationScope.REGION ? toReturn : toReturn.getParent();
|
||||
} catch (NoSuchElementException e) {
|
||||
|
|
|
@ -21,50 +21,60 @@ package org.jclouds.location.suppliers;
|
|||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationBuilder;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
import org.jclouds.location.Iso3166;
|
||||
import org.jclouds.location.Provider;
|
||||
import org.jclouds.location.Region;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.ImmutableSet.Builder;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
@Singleton
|
||||
public class RegionToProviderOrJustProvider implements Supplier<Set<? extends Location>> {
|
||||
public class RegionToProviderOrJustProvider extends JustProvider {
|
||||
private final Set<String> regions;
|
||||
private final String providerName;
|
||||
private final Map<String, Set<String>> isoCodesById;
|
||||
|
||||
@Inject
|
||||
RegionToProviderOrJustProvider(@Region Set<String> regions, @Provider String providerName) {
|
||||
public RegionToProviderOrJustProvider(@Iso3166 Set<String> isoCodes, @Provider String providerName,
|
||||
@Provider URI endpoint, @Region Set<String> regions, @Iso3166 Map<String, Set<String>> isoCodesById) {
|
||||
super(isoCodes, providerName, endpoint);
|
||||
this.regions = checkNotNull(regions, "regions");
|
||||
this.providerName = checkNotNull(providerName, "providerName");
|
||||
this.isoCodesById = checkNotNull(isoCodesById, "isoCodesById");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<? extends Location> get() {
|
||||
final Location provider = new LocationImpl(LocationScope.PROVIDER, providerName, providerName, null);
|
||||
return buildJustProviderOrRegions().build();
|
||||
}
|
||||
|
||||
protected Builder<Location> buildJustProviderOrRegions() {
|
||||
Builder<Location> locations = ImmutableSet.builder();
|
||||
Location provider = Iterables.getOnlyElement(super.get());
|
||||
if (regions.size() == 0)
|
||||
return ImmutableSet.of(provider);
|
||||
return ImmutableSet.<Location> copyOf(Iterables.transform(regions, new Function<String, Location>() {
|
||||
|
||||
@Override
|
||||
public Location apply(String input) {
|
||||
return new LocationImpl(LocationScope.REGION, input, input, provider);
|
||||
return locations.add(provider);
|
||||
else
|
||||
for (String region : regions) {
|
||||
LocationBuilder builder = new LocationBuilder().scope(LocationScope.REGION).id(region).description(region)
|
||||
.parent(provider);
|
||||
if (isoCodesById.containsKey(region))
|
||||
builder.iso3166Codes(isoCodesById.get(region));
|
||||
locations.add(builder.build());
|
||||
}
|
||||
|
||||
}));
|
||||
return locations;
|
||||
}
|
||||
|
||||
}
|
|
@ -21,8 +21,8 @@ package org.jclouds.location.suppliers;
|
|||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
import static com.google.common.collect.Maps.uniqueIndex;
|
||||
import static com.google.common.collect.Sets.newLinkedHashSet;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
|
@ -30,50 +30,61 @@ import javax.inject.Inject;
|
|||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationBuilder;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
import org.jclouds.location.Iso3166;
|
||||
import org.jclouds.location.Provider;
|
||||
import org.jclouds.location.Zone;
|
||||
|
||||
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.ImmutableSet.Builder;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
@Singleton
|
||||
public class ZoneToRegionToProviderOrJustProvider implements Supplier<Set<? extends Location>> {
|
||||
public class ZoneToRegionToProviderOrJustProvider extends RegionToProviderOrJustProvider {
|
||||
private final Map<String, String> zoneToRegion;
|
||||
private final String providerName;
|
||||
private Map<String, Set<String>> isoCodesById;
|
||||
|
||||
@Inject
|
||||
ZoneToRegionToProviderOrJustProvider(@Zone Map<String, String> zoneToRegion, @Provider String providerName) {
|
||||
this.zoneToRegion = checkNotNull(zoneToRegion, "zoneToRegion");
|
||||
this.providerName = checkNotNull(providerName, "providerName");
|
||||
ZoneToRegionToProviderOrJustProvider(@Iso3166 Set<String> isoCodes, @Provider String providerName,
|
||||
@Provider URI endpoint, @Iso3166 Map<String, Set<String>> isoCodesById,
|
||||
@Zone Map<String, String> zoneToRegion) {
|
||||
super(isoCodes, providerName, endpoint, ImmutableSet.copyOf(checkNotNull(zoneToRegion, "zoneToRegion").values()),
|
||||
isoCodesById);
|
||||
this.zoneToRegion = zoneToRegion;
|
||||
this.isoCodesById = checkNotNull(isoCodesById, "isoCodesById");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<? extends Location> get() {
|
||||
Location provider = new LocationImpl(LocationScope.PROVIDER, providerName, providerName, null);
|
||||
if (zoneToRegion.size() == 0)
|
||||
return ImmutableSet.of(provider);
|
||||
Set<Location> providers = newLinkedHashSet();
|
||||
for (String region : newLinkedHashSet(zoneToRegion.values())) {
|
||||
providers.add(new LocationImpl(LocationScope.REGION, region, region, provider));
|
||||
}
|
||||
ImmutableMap<String, Location> idToLocation = uniqueIndex(providers, new Function<Location, String>() {
|
||||
Builder<Location> locations = buildJustProviderOrRegions();
|
||||
ImmutableMap<String, Location> idToLocation = uniqueIndex(locations.build(), new Function<Location, String>() {
|
||||
@Override
|
||||
public String apply(Location from) {
|
||||
return from.getId();
|
||||
}
|
||||
});
|
||||
if (zoneToRegion.size() == 1)
|
||||
return locations.build();
|
||||
for (String zone : zoneToRegion.keySet()) {
|
||||
providers.add(new LocationImpl(LocationScope.ZONE, zone, zone, idToLocation.get(zoneToRegion.get(zone))));
|
||||
Location parent = idToLocation.get(zoneToRegion.get(zone));
|
||||
LocationBuilder builder = new LocationBuilder().scope(LocationScope.ZONE).id(zone).description(zone).parent(
|
||||
parent);
|
||||
if (isoCodesById.containsKey(zone))
|
||||
builder.iso3166Codes(isoCodesById.get(zone));
|
||||
// be cautious.. only inherit iso codes if the parent is a region
|
||||
// regions may be added dynamically, and we prefer to inherit an
|
||||
// empty set of codes from a region, then a provider, whose code
|
||||
// are likely hard-coded.
|
||||
else if (parent.getScope() == LocationScope.REGION)
|
||||
builder.iso3166Codes(parent.getIso3166Codes());
|
||||
locations.add(builder.build());
|
||||
}
|
||||
return providers;
|
||||
return locations.build();
|
||||
}
|
||||
|
||||
}
|
|
@ -24,6 +24,7 @@ import java.util.Map;
|
|||
import java.util.concurrent.Future;
|
||||
|
||||
import org.jclouds.domain.Credentials;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.rest.internal.RestContextImpl;
|
||||
|
||||
import com.google.common.annotations.Beta;
|
||||
|
@ -40,7 +41,7 @@ import com.google.inject.ImplementedBy;
|
|||
*
|
||||
*/
|
||||
@ImplementedBy(RestContextImpl.class)
|
||||
public interface RestContext<S, A> {
|
||||
public interface RestContext<S, A> extends Location {
|
||||
|
||||
/**
|
||||
* low-level api to the cloud. Threadsafe implementations will return a singleton.
|
||||
|
@ -59,6 +60,10 @@ public interface RestContext<S, A> {
|
|||
|
||||
URI getEndpoint();
|
||||
|
||||
String getApiVersion();
|
||||
|
||||
String getIdentity();
|
||||
|
||||
/**
|
||||
* retrieves a list of credentials for resources created within this context, keyed on {@code id}
|
||||
* of the resource. We are testing this approach for resources such as compute nodes, where you
|
||||
|
@ -71,12 +76,6 @@ public interface RestContext<S, A> {
|
|||
@Beta
|
||||
Map<String, Credentials> credentialStore();
|
||||
|
||||
String getIdentity();
|
||||
|
||||
String getProvider();
|
||||
|
||||
String getApiVersion();
|
||||
|
||||
Utils getUtils();
|
||||
|
||||
/**
|
||||
|
|
|
@ -20,17 +20,30 @@
|
|||
package org.jclouds.rest;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkNotNull;
|
||||
import static com.google.common.base.Predicates.equalTo;
|
||||
import static com.google.common.base.Predicates.instanceOf;
|
||||
import static com.google.common.base.Predicates.not;
|
||||
import static com.google.common.base.Splitter.on;
|
||||
import static com.google.common.collect.Iterables.addAll;
|
||||
import static com.google.common.collect.Iterables.any;
|
||||
import static com.google.common.collect.Iterables.filter;
|
||||
import static com.google.inject.Scopes.SINGLETON;
|
||||
import static com.google.inject.name.Names.bindProperties;
|
||||
import static com.google.inject.util.Types.newParameterizedType;
|
||||
import static org.jclouds.Constants.PROPERTY_API;
|
||||
import static org.jclouds.Constants.PROPERTY_API_VERSION;
|
||||
import static org.jclouds.Constants.PROPERTY_CREDENTIAL;
|
||||
import static org.jclouds.Constants.PROPERTY_ENDPOINT;
|
||||
import static org.jclouds.Constants.PROPERTY_IDENTITY;
|
||||
import static org.jclouds.Constants.PROPERTY_ISO3166_CODES;
|
||||
import static org.jclouds.Constants.PROPERTY_PROVIDER;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
|
@ -41,7 +54,9 @@ import org.jclouds.concurrent.config.ExecutorServiceModule;
|
|||
import org.jclouds.http.RequiresHttp;
|
||||
import org.jclouds.http.config.ConfiguresHttpCommandExecutorService;
|
||||
import org.jclouds.http.config.JavaUrlHttpCommandExecutorServiceModule;
|
||||
import org.jclouds.location.Iso3166;
|
||||
import org.jclouds.location.Provider;
|
||||
import org.jclouds.location.config.ProvideIso3166CodesByLocationIdViaProperties;
|
||||
import org.jclouds.logging.config.LoggingModule;
|
||||
import org.jclouds.logging.jdk.config.JDKLoggingModule;
|
||||
import org.jclouds.rest.annotations.Api;
|
||||
|
@ -55,17 +70,13 @@ import org.jclouds.rest.internal.RestContextImpl;
|
|||
|
||||
import com.google.common.annotations.VisibleForTesting;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.base.Predicates;
|
||||
import com.google.common.collect.Iterables;
|
||||
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.Key;
|
||||
import com.google.inject.Module;
|
||||
import com.google.inject.Scopes;
|
||||
import com.google.inject.TypeLiteral;
|
||||
import com.google.inject.name.Names;
|
||||
import com.google.inject.util.Types;
|
||||
|
||||
/**
|
||||
* Creates {@link RestContext} or {@link Injector} instances based on the most commonly requested
|
||||
|
@ -94,18 +105,25 @@ public class RestContextBuilder<S, A> {
|
|||
Properties toBind = new Properties();
|
||||
toBind.putAll(checkNotNull(properties, "properties"));
|
||||
toBind.putAll(System.getProperties());
|
||||
Names.bindProperties(binder(), toBind);
|
||||
bindProperties(binder(), toBind);
|
||||
bind(String.class).annotatedWith(Provider.class).toInstance(
|
||||
checkNotNull(toBind.getProperty(PROPERTY_PROVIDER), PROPERTY_PROVIDER));
|
||||
checkNotNull(toBind.getProperty(PROPERTY_PROVIDER), PROPERTY_PROVIDER));
|
||||
bind(URI.class).annotatedWith(Provider.class).toInstance(
|
||||
URI.create(checkNotNull(toBind.getProperty(PROPERTY_ENDPOINT), PROPERTY_ENDPOINT)));
|
||||
URI.create(checkNotNull(toBind.getProperty(PROPERTY_ENDPOINT), PROPERTY_ENDPOINT)));
|
||||
bind(new TypeLiteral<Set<String>>() {
|
||||
}).annotatedWith(Iso3166.class).toInstance(
|
||||
ImmutableSet.copyOf(filter(on(',').split(
|
||||
checkNotNull(toBind.getProperty(PROPERTY_ISO3166_CODES), PROPERTY_ISO3166_CODES)),
|
||||
not(equalTo("")))));
|
||||
bind(new TypeLiteral<Map<String, Set<String>>>() {
|
||||
}).annotatedWith(Iso3166.class).toProvider(ProvideIso3166CodesByLocationIdViaProperties.class);
|
||||
if (toBind.containsKey(PROPERTY_API))
|
||||
bind(String.class).annotatedWith(Api.class).toInstance(toBind.getProperty(PROPERTY_API));
|
||||
if (toBind.containsKey(PROPERTY_API_VERSION))
|
||||
bind(String.class).annotatedWith(ApiVersion.class).toInstance(toBind.getProperty(PROPERTY_API_VERSION));
|
||||
if (toBind.containsKey(PROPERTY_IDENTITY))
|
||||
bind(String.class).annotatedWith(Identity.class).toInstance(
|
||||
checkNotNull(toBind.getProperty(PROPERTY_IDENTITY), PROPERTY_IDENTITY));
|
||||
checkNotNull(toBind.getProperty(PROPERTY_IDENTITY), PROPERTY_IDENTITY));
|
||||
if (toBind.containsKey(PROPERTY_CREDENTIAL))
|
||||
bind(String.class).annotatedWith(Credential.class).toInstance(toBind.getProperty(PROPERTY_CREDENTIAL));
|
||||
}
|
||||
|
@ -124,7 +142,7 @@ public class RestContextBuilder<S, A> {
|
|||
}
|
||||
|
||||
public RestContextBuilder<S, A> withModules(Iterable<Module> modules) {
|
||||
Iterables.addAll(this.modules, modules);
|
||||
addAll(this.modules, modules);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
@ -142,7 +160,7 @@ public class RestContextBuilder<S, A> {
|
|||
|
||||
@VisibleForTesting
|
||||
protected void addLoggingModuleIfNotPresent(List<Module> modules) {
|
||||
if (!Iterables.any(modules, Predicates.instanceOf(LoggingModule.class)))
|
||||
if (!any(modules, instanceOf(LoggingModule.class)))
|
||||
modules.add(new JDKLoggingModule());
|
||||
}
|
||||
|
||||
|
@ -153,7 +171,7 @@ public class RestContextBuilder<S, A> {
|
|||
}
|
||||
|
||||
private boolean nothingConfiguresAnHttpService(List<Module> modules) {
|
||||
return (!Iterables.any(modules, new Predicate<Module>() {
|
||||
return (!any(modules, new Predicate<Module>() {
|
||||
public boolean apply(Module input) {
|
||||
return input.getClass().isAnnotationPresent(ConfiguresHttpCommandExecutorService.class);
|
||||
}
|
||||
|
@ -163,7 +181,7 @@ public class RestContextBuilder<S, A> {
|
|||
|
||||
@VisibleForTesting
|
||||
protected void addContextModuleIfNotPresent(List<Module> modules) {
|
||||
if (!Iterables.any(modules, new Predicate<Module>() {
|
||||
if (!any(modules, new Predicate<Module>() {
|
||||
public boolean apply(Module input) {
|
||||
return input.getClass().isAnnotationPresent(ConfiguresRestContext.class);
|
||||
}
|
||||
|
@ -177,20 +195,20 @@ public class RestContextBuilder<S, A> {
|
|||
protected void addContextModule(List<Module> modules) {
|
||||
modules.add(new AbstractModule() {
|
||||
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
@SuppressWarnings( { "unchecked", "rawtypes" })
|
||||
@Override
|
||||
protected void configure() {
|
||||
bind(
|
||||
(TypeLiteral) TypeLiteral.get(Types.newParameterizedType(RestContext.class, syncClientType,
|
||||
asyncClientType))).to(
|
||||
TypeLiteral.get(Types.newParameterizedType(RestContextImpl.class, syncClientType, asyncClientType)))
|
||||
.in(Scopes.SINGLETON);
|
||||
(TypeLiteral) TypeLiteral.get(newParameterizedType(RestContext.class, syncClientType,
|
||||
asyncClientType))).to(
|
||||
TypeLiteral.get(newParameterizedType(RestContextImpl.class, syncClientType, asyncClientType))).in(
|
||||
SINGLETON);
|
||||
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return String.format("configure rest context %s->%s", syncClientType.getSimpleName(),
|
||||
asyncClientType.getSimpleName());
|
||||
return String.format("configure rest context %s->%s", syncClientType.getSimpleName(), asyncClientType
|
||||
.getSimpleName());
|
||||
}
|
||||
|
||||
});
|
||||
|
@ -208,7 +226,7 @@ public class RestContextBuilder<S, A> {
|
|||
}
|
||||
|
||||
private boolean atLeastOneModuleRequiresHttp(List<Module> modules) {
|
||||
return Iterables.any(modules, new Predicate<Module>() {
|
||||
return any(modules, new Predicate<Module>() {
|
||||
public boolean apply(Module input) {
|
||||
return input.getClass().isAnnotationPresent(RequiresHttp.class);
|
||||
}
|
||||
|
@ -223,7 +241,7 @@ public class RestContextBuilder<S, A> {
|
|||
}
|
||||
|
||||
private boolean restClientModulePresent(List<Module> modules) {
|
||||
return Iterables.any(modules, new Predicate<Module>() {
|
||||
return any(modules, new Predicate<Module>() {
|
||||
public boolean apply(Module input) {
|
||||
return input.getClass().isAnnotationPresent(ConfiguresRestClient.class);
|
||||
}
|
||||
|
@ -237,20 +255,20 @@ public class RestContextBuilder<S, A> {
|
|||
|
||||
@VisibleForTesting
|
||||
protected void addExecutorServiceIfNotPresent(List<Module> modules) {
|
||||
if (!Iterables.any(modules, new Predicate<Module>() {
|
||||
if (!any(modules, new Predicate<Module>() {
|
||||
public boolean apply(Module input) {
|
||||
return input.getClass().isAnnotationPresent(ConfiguresExecutorService.class);
|
||||
}
|
||||
}
|
||||
|
||||
)) {
|
||||
if (Iterables.any(modules, new Predicate<Module>() {
|
||||
if (any(modules, new Predicate<Module>() {
|
||||
public boolean apply(Module input) {
|
||||
return input.getClass().isAnnotationPresent(SingleThreaded.class);
|
||||
}
|
||||
})) {
|
||||
modules.add(new ExecutorServiceModule(MoreExecutors.sameThreadExecutor(), MoreExecutors
|
||||
.sameThreadExecutor()));
|
||||
.sameThreadExecutor()));
|
||||
} else {
|
||||
modules.add(new ExecutorServiceModule());
|
||||
}
|
||||
|
@ -259,7 +277,7 @@ public class RestContextBuilder<S, A> {
|
|||
|
||||
@VisibleForTesting
|
||||
protected void addCredentialStoreIfNotPresent(List<Module> modules) {
|
||||
if (!Iterables.any(modules, new Predicate<Module>() {
|
||||
if (!any(modules, new Predicate<Module>() {
|
||||
public boolean apply(Module input) {
|
||||
return input.getClass().isAnnotationPresent(ConfiguresCredentialStore.class);
|
||||
}
|
||||
|
@ -278,7 +296,7 @@ public class RestContextBuilder<S, A> {
|
|||
@SuppressWarnings("unchecked")
|
||||
public <T extends RestContext<S, A>> T buildContext() {
|
||||
Injector injector = buildInjector();
|
||||
return (T) injector.getInstance(Key.get(Types.newParameterizedType(RestContext.class, syncClientType,
|
||||
asyncClientType)));
|
||||
return (T) injector
|
||||
.getInstance(Key.get(newParameterizedType(RestContext.class, syncClientType, asyncClientType)));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,12 +35,14 @@ import javax.annotation.Nullable;
|
|||
import javax.inject.Inject;
|
||||
|
||||
import org.jclouds.PropertiesBuilder;
|
||||
import org.jclouds.location.reference.LocationConstants;
|
||||
import org.jclouds.util.Modules2;
|
||||
import org.jclouds.util.Strings2;
|
||||
|
||||
import com.google.common.base.Charsets;
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Joiner;
|
||||
import com.google.common.base.Splitter;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.io.Files;
|
||||
import com.google.inject.Module;
|
||||
|
@ -70,23 +72,24 @@ import com.google.inject.Module;
|
|||
public class RestContextFactory {
|
||||
|
||||
public static <S, A> RestContextSpec<S, A> contextSpec(String provider, String endpoint, String apiVersion,
|
||||
String identity, String credential, Class<S> sync, Class<A> async,
|
||||
Class<PropertiesBuilder> propertiesBuilderClass, Class<RestContextBuilder<S, A>> contextBuilderClass,
|
||||
Iterable<Module> modules) {
|
||||
return new RestContextSpec<S, A>(provider, endpoint, apiVersion, identity, credential, sync, async,
|
||||
propertiesBuilderClass, contextBuilderClass, modules);
|
||||
String iso3166Codes, String identity, String credential, Class<S> sync, Class<A> async,
|
||||
Class<PropertiesBuilder> propertiesBuilderClass, Class<RestContextBuilder<S, A>> contextBuilderClass,
|
||||
Iterable<Module> modules) {
|
||||
return new RestContextSpec<S, A>(provider, endpoint, apiVersion, iso3166Codes, identity, credential, sync, async,
|
||||
propertiesBuilderClass, contextBuilderClass, modules);
|
||||
}
|
||||
|
||||
public static <S, A> RestContextSpec<S, A> contextSpec(String provider, String endpoint, String apiVersion,
|
||||
String identity, String credential, Class<S> sync, Class<A> async) {
|
||||
return new RestContextSpec<S, A>(provider, endpoint, apiVersion, identity, credential, sync, async);
|
||||
String iso3166Codes, String identity, String credential, Class<S> sync, Class<A> async) {
|
||||
return new RestContextSpec<S, A>(provider, endpoint, apiVersion, iso3166Codes, identity, credential, sync, async);
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
@SuppressWarnings( { "unchecked", "rawtypes" })
|
||||
public static <S, A> RestContextSpec<S, A> contextSpec(String provider, String endpoint, String apiVersion,
|
||||
String identity, String credential, Class<S> sync, Class<A> async, Iterable<Module> modules) {
|
||||
return new RestContextSpec<S, A>(provider, endpoint, apiVersion, identity, credential, sync, async,
|
||||
PropertiesBuilder.class, (Class) RestContextBuilder.class, modules);
|
||||
String iso3166Codes, String identity, String credential, Class<S> sync, Class<A> async,
|
||||
Iterable<Module> modules) {
|
||||
return new RestContextSpec<S, A>(provider, endpoint, apiVersion, iso3166Codes, identity, credential, sync, async,
|
||||
PropertiesBuilder.class, (Class) RestContextBuilder.class, modules);
|
||||
}
|
||||
|
||||
private final static Properties NO_PROPERTIES = new Properties();
|
||||
|
@ -177,9 +180,9 @@ public class RestContextFactory {
|
|||
|
||||
/**
|
||||
*
|
||||
* Identity will be found by searching {@code jclouds.identity} failing that
|
||||
* {@code provider.identity} where provider corresponds to the parameter. Same pattern is used
|
||||
* for credential ({@code jclouds.credential} failing that {@code provider.credential}).
|
||||
* Identity will be found by searching {@code jclouds.identity} failing that {@code
|
||||
* provider.identity} where provider corresponds to the parameter. Same pattern is used for
|
||||
* credential ({@code jclouds.credential} failing that {@code provider.credential}).
|
||||
*
|
||||
* @param <S>
|
||||
* Type of the provider specific client
|
||||
|
@ -195,18 +198,18 @@ public class RestContextFactory {
|
|||
* properties to pass to the context.
|
||||
*/
|
||||
public <S, A> RestContextBuilder<S, A> createContextBuilder(String provider, Iterable<? extends Module> wiring,
|
||||
Properties overrides) {
|
||||
Properties overrides) {
|
||||
return createContextBuilder(provider, null, null, wiring, overrides);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <S, A> RestContextBuilder<S, A> createContextBuilder(String provider, @Nullable String identity,
|
||||
@Nullable String credential, Properties properties) {
|
||||
@Nullable String credential, Properties properties) {
|
||||
return createContextBuilder(provider, identity, credential, EMPTY_LIST, properties);
|
||||
}
|
||||
|
||||
public <S, A> RestContextBuilder<S, A> createContextBuilder(String provider, @Nullable String identity,
|
||||
@Nullable String credential, Iterable<? extends Module> wiring) {
|
||||
@Nullable String credential, Iterable<? extends Module> wiring) {
|
||||
return createContextBuilder(provider, identity, credential, wiring, NO_PROPERTIES);
|
||||
}
|
||||
|
||||
|
@ -226,7 +229,7 @@ public class RestContextFactory {
|
|||
* @return initialized context ready for use
|
||||
*/
|
||||
public <S, A> RestContextBuilder<S, A> createContextBuilder(String providerName, @Nullable String identity,
|
||||
@Nullable String credential, Iterable<? extends Module> wiring, Properties _overrides) {
|
||||
@Nullable String credential, Iterable<? extends Module> wiring, Properties _overrides) {
|
||||
checkNotNull(wiring, "wiring");
|
||||
RestContextSpec<S, A> contextSpec = createContextSpec(providerName, identity, credential, wiring, _overrides);
|
||||
return createContextBuilder(contextSpec, _overrides);
|
||||
|
@ -239,43 +242,44 @@ public class RestContextFactory {
|
|||
|
||||
props.setProperty(contextSpec.provider + ".endpoint", contextSpec.endpoint);
|
||||
props.setProperty(contextSpec.provider + ".apiversion", contextSpec.apiVersion);
|
||||
props.setProperty(contextSpec.provider + "." + LocationConstants.ISO3166_CODES, contextSpec.iso3166Codes);
|
||||
props.setProperty(contextSpec.provider + ".identity", contextSpec.identity);
|
||||
if (contextSpec.credential != null)
|
||||
props.setProperty(contextSpec.provider + ".credential", contextSpec.credential);
|
||||
if (contextSpec.sync != null) {
|
||||
props.setProperty(contextSpec.provider + ".sync", contextSpec.sync.getName());
|
||||
props.setProperty(contextSpec.provider + ".async", checkNotNull(contextSpec.async, "contextSpec.async")
|
||||
.getName());
|
||||
.getName());
|
||||
} else {
|
||||
props.setProperty(contextSpec.provider + ".contextbuilder",
|
||||
checkNotNull(contextSpec.contextBuilderClass, "contextSpec.contextBuilderClass").getName());
|
||||
props.setProperty(contextSpec.provider + ".contextbuilder", checkNotNull(contextSpec.contextBuilderClass,
|
||||
"contextSpec.contextBuilderClass").getName());
|
||||
|
||||
props.setProperty(contextSpec.provider + ".propertiesbuilder",
|
||||
checkNotNull(contextSpec.propertiesBuilderClass, "contextSpec.propertiesBuilderClass").getName());
|
||||
props.setProperty(contextSpec.provider + ".propertiesbuilder", checkNotNull(
|
||||
contextSpec.propertiesBuilderClass, "contextSpec.propertiesBuilderClass").getName());
|
||||
}
|
||||
if (size(contextSpec.modules) > 0) {
|
||||
props.setProperty(contextSpec.provider + ".modules",
|
||||
Joiner.on(',').join(transform(contextSpec.modules, new Function<Module, String>() {
|
||||
props.setProperty(contextSpec.provider + ".modules", Joiner.on(',').join(
|
||||
transform(contextSpec.modules, new Function<Module, String>() {
|
||||
|
||||
@Override
|
||||
public String apply(Module from) {
|
||||
return from.getClass().getName();
|
||||
}
|
||||
@Override
|
||||
public String apply(Module from) {
|
||||
return from.getClass().getName();
|
||||
}
|
||||
|
||||
})));
|
||||
})));
|
||||
}
|
||||
return props;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <S, A> RestContextSpec<S, A> createContextSpec(String providerName, String identity, String credential,
|
||||
Properties _overrides) {
|
||||
Properties _overrides) {
|
||||
return createContextSpec(providerName, identity, credential, EMPTY_LIST, _overrides);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <S, A> RestContextSpec<S, A> createContextSpec(String providerName, String identity, String credential,
|
||||
Iterable<? extends Module> wiring, Properties _overrides) {
|
||||
Iterable<? extends Module> wiring, Properties _overrides) {
|
||||
checkNotNull(providerName, "providerName");
|
||||
checkNotNull(_overrides, "overrides");
|
||||
|
||||
|
@ -283,11 +287,12 @@ public class RestContextFactory {
|
|||
props.putAll(this.properties);
|
||||
props.putAll(_overrides);
|
||||
|
||||
String endpoint = props.getProperty(providerName + ".endpoint", null);
|
||||
String endpoint = props.getProperty(providerName + "." + LocationConstants.ENDPOINT, null);
|
||||
String iso3166Codes = props.getProperty(providerName + "." + LocationConstants.ISO3166_CODES, null);
|
||||
String apiVersion = props.getProperty(providerName + ".apiversion", null);
|
||||
identity = props.getProperty(providerName + ".identity", props.getProperty("jclouds.identity", identity));
|
||||
credential = loadCredentialOrDefault(props, providerName + ".credential",
|
||||
loadCredentialOrDefault(props, "jclouds.credential", credential));
|
||||
credential = loadCredentialOrDefault(props, providerName + ".credential", loadCredentialOrDefault(props,
|
||||
"jclouds.credential", credential));
|
||||
String syncClassName = props.getProperty(providerName + ".sync", null);
|
||||
String asyncClassName = props.getProperty(providerName + ".async", null);
|
||||
Iterable<Module> modules = concat(Modules2.modulesForProviderInProperties(providerName, props), wiring);
|
||||
|
@ -306,8 +311,8 @@ public class RestContextFactory {
|
|||
assert false : "exception should have propogated " + e;
|
||||
return null;
|
||||
}
|
||||
RestContextSpec<S, A> contextSpec = new RestContextSpec<S, A>(providerName, endpoint, apiVersion, identity,
|
||||
credential, sync, async, propertiesBuilderClass, contextBuilderClass, modules);
|
||||
RestContextSpec<S, A> contextSpec = new RestContextSpec<S, A>(providerName, endpoint, apiVersion, iso3166Codes,
|
||||
identity, credential, sync, async, propertiesBuilderClass, contextBuilderClass, modules);
|
||||
return contextSpec;
|
||||
}
|
||||
|
||||
|
@ -316,8 +321,8 @@ public class RestContextFactory {
|
|||
return properties.getProperty(property);
|
||||
else if (properties.containsKey(property + ".resource"))
|
||||
try {
|
||||
return Strings2.toStringAndClose(RestContextFactory.class.getResourceAsStream(properties.getProperty(property
|
||||
+ ".resource")));
|
||||
return Strings2.toStringAndClose(RestContextFactory.class.getResourceAsStream(properties
|
||||
.getProperty(property + ".resource")));
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException("error reading resource: " + properties.getProperty(property + ".resource"));
|
||||
}
|
||||
|
@ -337,31 +342,33 @@ public class RestContextFactory {
|
|||
|
||||
@SuppressWarnings("unchecked")
|
||||
public static <S, A> RestContextBuilder<S, A> createContextBuilder(RestContextSpec<S, A> contextSpec,
|
||||
Properties overrides) {
|
||||
Properties overrides) {
|
||||
return createContextBuilder(contextSpec, EMPTY_LIST, overrides);
|
||||
}
|
||||
|
||||
public static <S, A> RestContextBuilder<S, A> createContextBuilder(RestContextSpec<S, A> contextSpec,
|
||||
Iterable<Module> modules) {
|
||||
Iterable<Module> modules) {
|
||||
return createContextBuilder(contextSpec, modules, NO_PROPERTIES);
|
||||
}
|
||||
|
||||
public static <S, A> RestContextBuilder<S, A> createContextBuilder(RestContextSpec<S, A> contextSpec,
|
||||
Iterable<Module> modules, Properties overrides) {
|
||||
Iterable<Module> modules, Properties overrides) {
|
||||
try {
|
||||
PropertiesBuilder builder = contextSpec.propertiesBuilderClass.getConstructor(Properties.class).newInstance(
|
||||
overrides);
|
||||
overrides);
|
||||
|
||||
builder.provider(contextSpec.provider);
|
||||
if (contextSpec.apiVersion != null)
|
||||
builder.apiVersion(contextSpec.apiVersion);
|
||||
if (contextSpec.iso3166Codes != null)
|
||||
builder.iso3166Codes(Splitter.on('.').split(contextSpec.iso3166Codes));
|
||||
if (contextSpec.identity != null)
|
||||
builder.credentials(contextSpec.identity, contextSpec.credential);
|
||||
if (contextSpec.endpoint != null)
|
||||
builder.endpoint(contextSpec.endpoint);
|
||||
|
||||
RestContextBuilder<S, A> contextBuilder = Providers.initContextBuilder(contextSpec.contextBuilderClass,
|
||||
contextSpec.sync, contextSpec.async, builder.build());
|
||||
contextSpec.sync, contextSpec.async, builder.build());
|
||||
|
||||
contextBuilder.withModules(concat(modules, contextSpec.modules));
|
||||
|
||||
|
@ -399,7 +406,7 @@ public class RestContextFactory {
|
|||
* @see RestContextFactory#createContextBuilder(String, Iterable)
|
||||
*/
|
||||
public <S, A> RestContext<S, A> createContext(String provider, Iterable<? extends Module> wiring,
|
||||
Properties overrides) {
|
||||
Properties overrides) {
|
||||
RestContextBuilder<S, A> builder = createContextBuilder(provider, wiring, overrides);
|
||||
return buildContextUnwrappingExceptions(builder);
|
||||
}
|
||||
|
@ -408,7 +415,7 @@ public class RestContextFactory {
|
|||
* @see RestContextFactory#createContextBuilder(String, String,String, Properties)
|
||||
*/
|
||||
public <S, A> RestContext<S, A> createContext(String provider, @Nullable String identity,
|
||||
@Nullable String credential, Properties properties) {
|
||||
@Nullable String credential, Properties properties) {
|
||||
RestContextBuilder<S, A> builder = createContextBuilder(provider, identity, credential, properties);
|
||||
return buildContextUnwrappingExceptions(builder);
|
||||
}
|
||||
|
@ -417,7 +424,7 @@ public class RestContextFactory {
|
|||
* @see RestContextFactory#createContextBuilder(String, String,String, Iterable)
|
||||
*/
|
||||
public <S, A> RestContext<S, A> createContext(String provider, @Nullable String identity,
|
||||
@Nullable String credential, Iterable<? extends Module> wiring) {
|
||||
@Nullable String credential, Iterable<? extends Module> wiring) {
|
||||
RestContextBuilder<S, A> builder = createContextBuilder(provider, identity, credential, wiring);
|
||||
return buildContextUnwrappingExceptions(builder);
|
||||
}
|
||||
|
@ -426,7 +433,7 @@ public class RestContextFactory {
|
|||
* @see RestContextFactory#createContextBuilder(String, String,String, Iterable, Properties)
|
||||
*/
|
||||
public <S, A> RestContext<S, A> createContext(String provider, @Nullable String identity,
|
||||
@Nullable String credential, Iterable<? extends Module> wiring, Properties overrides) {
|
||||
@Nullable String credential, Iterable<? extends Module> wiring, Properties overrides) {
|
||||
RestContextBuilder<S, A> builder = createContextBuilder(provider, identity, credential, wiring, overrides);
|
||||
return buildContextUnwrappingExceptions(builder);
|
||||
}
|
||||
|
@ -459,7 +466,7 @@ public class RestContextFactory {
|
|||
* @see RestContextFactory#createContextBuilder(RestContextSpec, Iterable, Properties)
|
||||
*/
|
||||
public static <S, A> RestContext<S, A> createContext(RestContextSpec<S, A> contextSpec, Iterable<Module> modules,
|
||||
Properties overrides) {
|
||||
Properties overrides) {
|
||||
RestContextBuilder<S, A> builder = createContextBuilder(contextSpec, modules, overrides);
|
||||
return buildContextUnwrappingExceptions(builder);
|
||||
}
|
||||
|
|
|
@ -36,6 +36,7 @@ public class RestContextSpec<S, A> {
|
|||
protected final String provider;
|
||||
protected final String endpoint;
|
||||
protected final String apiVersion;
|
||||
protected final String iso3166Codes;
|
||||
protected final String identity;
|
||||
protected final String credential;
|
||||
protected final Class<S> sync;
|
||||
|
@ -44,30 +45,31 @@ public class RestContextSpec<S, A> {
|
|||
protected final Class<RestContextBuilder<S, A>> contextBuilderClass;
|
||||
protected final Iterable<Module> modules;
|
||||
|
||||
public RestContextSpec(String provider, String endpoint, String apiVersion, String identity, String credential,
|
||||
Class<S> sync, Class<A> async, Class<PropertiesBuilder> propertiesBuilderClass,
|
||||
Class<RestContextBuilder<S, A>> contextBuilderClass, Iterable<Module> modules) {
|
||||
public RestContextSpec(String provider, String endpoint, String apiVersion, String iso3166Codes, String identity,
|
||||
String credential, Class<S> sync, Class<A> async, Class<PropertiesBuilder> propertiesBuilderClass,
|
||||
Class<RestContextBuilder<S, A>> contextBuilderClass, Iterable<Module> modules) {
|
||||
this.provider = checkNotNull(provider, "provider");
|
||||
this.endpoint = endpoint;
|
||||
this.apiVersion = apiVersion;
|
||||
this.identity = identity;
|
||||
this.credential = credential;
|
||||
this.iso3166Codes = iso3166Codes;
|
||||
this.sync = sync;
|
||||
this.async = async;
|
||||
checkArgument(RestContextBuilder.class.isAssignableFrom(contextBuilderClass), contextBuilderClass.getName()
|
||||
+ " is not a subclass of " + RestContextBuilder.class.getName());
|
||||
+ " is not a subclass of " + RestContextBuilder.class.getName());
|
||||
checkArgument(PropertiesBuilder.class.isAssignableFrom(propertiesBuilderClass), propertiesBuilderClass.getName()
|
||||
+ " is not a subclass of " + PropertiesBuilder.class.getName());
|
||||
+ " is not a subclass of " + PropertiesBuilder.class.getName());
|
||||
this.propertiesBuilderClass = propertiesBuilderClass;
|
||||
this.contextBuilderClass = contextBuilderClass;
|
||||
this.modules = ImmutableList.copyOf(modules);
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
public RestContextSpec(String provider, String endpoint, String apiVersion, String identity, String credential,
|
||||
Class<S> sync, Class<A> async) {
|
||||
this(provider, endpoint, apiVersion, identity, credential, sync, async, PropertiesBuilder.class,
|
||||
(Class) RestContextBuilder.class, EMPTY_LIST);
|
||||
@SuppressWarnings( { "unchecked", "rawtypes" })
|
||||
public RestContextSpec(String provider, String endpoint, String apiVersion, String iso3166Codes, String identity,
|
||||
String credential, Class<S> sync, Class<A> async) {
|
||||
this(provider, endpoint, apiVersion, iso3166Codes, identity, credential, sync, async, PropertiesBuilder.class,
|
||||
(Class) RestContextBuilder.class, EMPTY_LIST);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -76,8 +78,8 @@ public class RestContextSpec<S, A> {
|
|||
*/
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hashCode(provider, endpoint, apiVersion, identity, credential, sync, async,
|
||||
propertiesBuilderClass, contextBuilderClass, modules);
|
||||
return Objects.hashCode(provider, endpoint, apiVersion, iso3166Codes, identity, credential, sync, async,
|
||||
propertiesBuilderClass, contextBuilderClass, modules);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -97,10 +99,10 @@ public class RestContextSpec<S, A> {
|
|||
*/
|
||||
@Override
|
||||
public String toString() {
|
||||
return Objects.toStringHelper(this).add("provider", provider).add("endpoint", endpoint)
|
||||
.add("apiVersion", apiVersion).add("identity", identity).add("sync", sync).add("async", async)
|
||||
.add("propertiesBuilderClass", propertiesBuilderClass).add("contextBuilderClass", contextBuilderClass)
|
||||
.add("modules", modules).toString();
|
||||
return Objects.toStringHelper(this).add("provider", provider).add("endpoint", endpoint).add("apiVersion",
|
||||
apiVersion).add("iso3166Codes", iso3166Codes).add("identity", identity).add("sync", sync).add("async",
|
||||
async).add("propertiesBuilderClass", propertiesBuilderClass).add("contextBuilderClass",
|
||||
contextBuilderClass).add("modules", modules).toString();
|
||||
}
|
||||
|
||||
}
|
|
@ -22,12 +22,16 @@ package org.jclouds.rest.internal;
|
|||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.inject.Inject;
|
||||
|
||||
import org.jclouds.domain.Credentials;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.lifecycle.Closer;
|
||||
import org.jclouds.location.Iso3166;
|
||||
import org.jclouds.location.Provider;
|
||||
import org.jclouds.logging.Logger;
|
||||
import org.jclouds.rest.RestContext;
|
||||
|
@ -35,6 +39,7 @@ import org.jclouds.rest.Utils;
|
|||
import org.jclouds.rest.annotations.ApiVersion;
|
||||
import org.jclouds.rest.annotations.Identity;
|
||||
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.inject.Injector;
|
||||
import com.google.inject.Key;
|
||||
import com.google.inject.Singleton;
|
||||
|
@ -57,11 +62,12 @@ public class RestContextImpl<S, A> implements RestContext<S, A> {
|
|||
private final String apiVersion;
|
||||
private final Utils utils;
|
||||
private final Map<String, Credentials> credentialStore;
|
||||
private final Set<String> iso3166Codes;
|
||||
|
||||
@Inject
|
||||
protected RestContextImpl(Closer closer, Map<String, Credentials> credentialStore, Utils utils, Injector injector,
|
||||
TypeLiteral<S> syncApi, TypeLiteral<A> asyncApi, @Provider URI endpoint, @Provider String provider,
|
||||
@Identity String identity, @ApiVersion String apiVersion) {
|
||||
TypeLiteral<S> syncApi, TypeLiteral<A> asyncApi, @Provider URI endpoint, @Provider String provider,
|
||||
@Identity String identity, @ApiVersion String apiVersion, @Iso3166 Set<String> iso3166Codes) {
|
||||
this.credentialStore = credentialStore;
|
||||
this.utils = utils;
|
||||
this.asyncApi = injector.getInstance(Key.get(asyncApi));
|
||||
|
@ -71,6 +77,7 @@ public class RestContextImpl<S, A> implements RestContext<S, A> {
|
|||
this.identity = identity;
|
||||
this.provider = provider;
|
||||
this.apiVersion = apiVersion;
|
||||
this.iso3166Codes = iso3166Codes;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -122,11 +129,6 @@ public class RestContextImpl<S, A> implements RestContext<S, A> {
|
|||
return apiVersion;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getProvider() {
|
||||
return provider;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
|
@ -172,8 +174,8 @@ public class RestContextImpl<S, A> implements RestContext<S, A> {
|
|||
|
||||
@Override
|
||||
public String toString() {
|
||||
return " [provider=" + provider + ", endpoint=" + endpoint + ", apiVersion=" + apiVersion + ", identity="
|
||||
+ identity + "]";
|
||||
return " [id=" + provider + ", endpoint=" + endpoint + ", apiVersion=" + apiVersion + ", identity=" + identity
|
||||
+ ", iso3166Codes=" + iso3166Codes + "]";
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -185,4 +187,34 @@ public class RestContextImpl<S, A> implements RestContext<S, A> {
|
|||
public Map<String, Credentials> credentialStore() {
|
||||
return credentialStore;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDescription() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getId() {
|
||||
return provider;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<String> getIso3166Codes() {
|
||||
return iso3166Codes;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> getMetadata() {
|
||||
return ImmutableMap.<String, Object> of("endpoint", endpoint, "apiVersion", apiVersion, "identity", identity);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Location getParent() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LocationScope getScope() {
|
||||
return LocationScope.PROVIDER;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -166,7 +166,7 @@ swift.contextbuilder=org.jclouds.openstack.swift.SwiftContextBuilder
|
|||
swift.propertiesbuilder=org.jclouds.openstack.swift.SwiftPropertiesBuilder
|
||||
|
||||
cloudfiles.contextbuilder=org.jclouds.cloudfiles.CloudFilesContextBuilder
|
||||
cloudfiles.propertiesbuilder=org.jclouds.cloudfiles.CloudFilesPropertiesBuilder
|
||||
cloudfiles.propertiesbuilder=org.jclouds.openstack.swift.SwiftPropertiesBuilder
|
||||
|
||||
cloudfiles-us.contextbuilder=org.jclouds.cloudfiles.CloudFilesContextBuilder
|
||||
cloudfiles-us.propertiesbuilder=org.jclouds.rackspace.cloudfiles.CloudFilesUSPropertiesBuilder
|
||||
|
|
|
@ -266,7 +266,7 @@ public abstract class BaseJettyTest {
|
|||
properties.setProperty(Constants.PROPERTY_TRUST_ALL_CERTS, "true");
|
||||
properties.setProperty(Constants.PROPERTY_RELAX_HOSTNAME, "true");
|
||||
RestContextSpec<IntegrationTestClient, IntegrationTestAsyncClient> contextSpec = contextSpec("test",
|
||||
"http://localhost:" + testPort, "1", "identity", null, IntegrationTestClient.class,
|
||||
"http://localhost:" + testPort, "1", "", "identity", null, IntegrationTestClient.class,
|
||||
IntegrationTestAsyncClient.class, ImmutableSet.<Module> copyOf(connectionModules));
|
||||
return createContextBuilder(contextSpec, properties);
|
||||
}
|
||||
|
|
|
@ -51,12 +51,12 @@ public class InputParamValidatorTest {
|
|||
@SkipEncoding('/')
|
||||
class InputParamValidatorForm {
|
||||
@POST
|
||||
@ParamValidators( { AllLowerCaseValidator.class })
|
||||
@ParamValidators( { AllLowerCaseValidator.class })
|
||||
public void allParamsValidated(@PathParam("param1") String param1, @PathParam("param2") String param2) {
|
||||
}
|
||||
|
||||
@POST
|
||||
public void oneParamValidated(@PathParam("param1") String param1,
|
||||
public void oneParamValidated(@PathParam("param1") String param1,
|
||||
@ParamValidators( { AllLowerCaseValidator.class }) @PathParam("param2") String param2) {
|
||||
}
|
||||
}
|
||||
|
@ -142,7 +142,7 @@ public class InputParamValidatorTest {
|
|||
void setupFactory() {
|
||||
|
||||
RestContextSpec<IntegrationTestClient, IntegrationTestAsyncClient> contextSpec = contextSpec("test",
|
||||
"http://localhost:9999", "1", "userFoo", null, IntegrationTestClient.class,
|
||||
"http://localhost:9999", "1", "", "userFoo", null, IntegrationTestClient.class,
|
||||
IntegrationTestAsyncClient.class);
|
||||
|
||||
injector = createContextBuilder(contextSpec).buildInjector();
|
||||
|
|
|
@ -54,19 +54,22 @@ public class RestContextFactoryTest {
|
|||
|
||||
public void testBuilder() {
|
||||
RestContextSpec<IntegrationTestClient, IntegrationTestAsyncClient> contextSpec = contextSpec(provider,
|
||||
"http://localhost", "1", "dummy", null, IntegrationTestClient.class, IntegrationTestAsyncClient.class);
|
||||
"http://localhost", "1", "", "dummy", null, IntegrationTestClient.class,
|
||||
IntegrationTestAsyncClient.class);
|
||||
|
||||
createContextBuilder(contextSpec);
|
||||
}
|
||||
|
||||
public void testBuilderProperties() {
|
||||
public void testBuilderPropertiesWithIso3166() {
|
||||
RestContextSpec<IntegrationTestClient, IntegrationTestAsyncClient> contextSpec = contextSpec(provider,
|
||||
"http://localhost", "1", "dummy", null, IntegrationTestClient.class, IntegrationTestAsyncClient.class);
|
||||
"http://localhost", "1", "US-CA", "dummy", null, IntegrationTestClient.class,
|
||||
IntegrationTestAsyncClient.class);
|
||||
|
||||
Properties props = RestContextFactory.toProperties(contextSpec);
|
||||
assertEquals(props.getProperty("test.endpoint"), "http://localhost");
|
||||
assertEquals(props.getProperty("test.apiversion"), "1");
|
||||
assertEquals(props.getProperty("test.identity"), "dummy");
|
||||
assertEquals(props.getProperty("test.iso3166-codes"), "US-CA");
|
||||
assertEquals(props.getProperty("test.credential"), null);
|
||||
assertEquals(props.getProperty("test.sync"), IntegrationTestClient.class.getName());
|
||||
assertEquals(props.getProperty("test.async"), IntegrationTestAsyncClient.class.getName());
|
||||
|
@ -79,8 +82,8 @@ public class RestContextFactoryTest {
|
|||
|
||||
public void testBuilderPropertiesWithCredential() {
|
||||
RestContextSpec<IntegrationTestClient, IntegrationTestAsyncClient> contextSpec = contextSpec(provider,
|
||||
"http://localhost", "1", "dummy", "credential", IntegrationTestClient.class,
|
||||
IntegrationTestAsyncClient.class);
|
||||
"http://localhost", "1", "", "dummy", "credential", IntegrationTestClient.class,
|
||||
IntegrationTestAsyncClient.class);
|
||||
|
||||
Properties props = RestContextFactory.toProperties(contextSpec);
|
||||
assertEquals(props.getProperty("test.endpoint"), "http://localhost");
|
||||
|
@ -100,8 +103,8 @@ public class RestContextFactoryTest {
|
|||
public void testBuilderPropertiesWithContextBuilder() {
|
||||
@SuppressWarnings("rawtypes")
|
||||
RestContextSpec<IntegrationTestClient, IntegrationTestAsyncClient> contextSpec = contextSpec(provider,
|
||||
"http://localhost", "1", "dummy", null, (Class) null, (Class) null, PropertiesBuilder.class,
|
||||
(Class) IntegrationTestContextBuilder.class, Collections.EMPTY_LIST);
|
||||
"http://localhost", "1", "", "dummy", null, (Class) null, (Class) null, PropertiesBuilder.class,
|
||||
(Class) IntegrationTestContextBuilder.class, Collections.EMPTY_LIST);
|
||||
|
||||
Properties props = RestContextFactory.toProperties(contextSpec);
|
||||
assertEquals(props.getProperty("test.endpoint"), "http://localhost");
|
||||
|
@ -121,8 +124,8 @@ public class RestContextFactoryTest {
|
|||
public void testBuilderPropertiesWithModule() {
|
||||
@SuppressWarnings("rawtypes")
|
||||
RestContextSpec<IntegrationTestClient, IntegrationTestAsyncClient> contextSpec = contextSpec(provider,
|
||||
"http://localhost", "1", "dummy", null, (Class) null, (Class) null, PropertiesBuilder.class,
|
||||
(Class) IntegrationTestContextBuilder.class, Collections.<Module> singleton(new A()));
|
||||
"http://localhost", "1", "", "dummy", null, (Class) null, (Class) null, PropertiesBuilder.class,
|
||||
(Class) IntegrationTestContextBuilder.class, Collections.<Module> singleton(new A()));
|
||||
|
||||
Properties props = RestContextFactory.toProperties(contextSpec);
|
||||
assertEquals(props.getProperty("test.endpoint"), "http://localhost");
|
||||
|
@ -142,8 +145,8 @@ public class RestContextFactoryTest {
|
|||
public void testBuilderPropertiesWithModules() {
|
||||
@SuppressWarnings("rawtypes")
|
||||
RestContextSpec<IntegrationTestClient, IntegrationTestAsyncClient> contextSpec = contextSpec(provider,
|
||||
"http://localhost", "1", "dummy", null, (Class) null, (Class) null, PropertiesBuilder.class,
|
||||
(Class) IntegrationTestContextBuilder.class, Arrays.<Module> asList(new A(), new B()));
|
||||
"http://localhost", "1", "", "dummy", null, (Class) null, (Class) null, PropertiesBuilder.class,
|
||||
(Class) IntegrationTestContextBuilder.class, Arrays.<Module> asList(new A(), new B()));
|
||||
|
||||
Properties props = RestContextFactory.toProperties(contextSpec);
|
||||
assertEquals(props.getProperty("test.endpoint"), "http://localhost");
|
||||
|
@ -155,7 +158,7 @@ public class RestContextFactoryTest {
|
|||
assertEquals(props.getProperty("test.propertiesbuilder"), PropertiesBuilder.class.getName());
|
||||
assertEquals(props.getProperty("test.contextbuilder"), IntegrationTestContextBuilder.class.getName());
|
||||
assertEquals(props.getProperty("test.modules"),
|
||||
"org.jclouds.rest.RestContextFactoryTest$A,org.jclouds.rest.RestContextFactoryTest$B");
|
||||
"org.jclouds.rest.RestContextFactoryTest$A,org.jclouds.rest.RestContextFactoryTest$B");
|
||||
|
||||
new RestContextFactory().createContext(provider, props);
|
||||
}
|
||||
|
@ -164,21 +167,24 @@ public class RestContextFactoryTest {
|
|||
Properties props = new Properties();
|
||||
props.setProperty("test.endpoint", "http://localhost");
|
||||
props.setProperty("test.apiversion", "1");
|
||||
props.setProperty("test.iso3166-codes", "US");
|
||||
props.setProperty("jclouds.identity", "foo");
|
||||
props.setProperty("jclouds.credential", "bar");
|
||||
|
||||
props.setProperty("test.propertiesbuilder", PropertiesBuilder.class.getName());
|
||||
props.setProperty("test.contextbuilder", IntegrationTestContextBuilder.class.getName());
|
||||
props.setProperty("jclouds.modules",
|
||||
"org.jclouds.rest.RestContextFactoryTest$A,org.jclouds.rest.RestContextFactoryTest$B");
|
||||
"org.jclouds.rest.RestContextFactoryTest$A,org.jclouds.rest.RestContextFactoryTest$B");
|
||||
|
||||
new RestContextFactory() {
|
||||
|
||||
@SuppressWarnings("hiding")
|
||||
@Override
|
||||
public <S, A> RestContextSpec<S, A> createContextSpec(String providerName, String identity, String credential,
|
||||
Iterable<? extends Module> wiring, Properties _overrides) {
|
||||
RestContextSpec<S, A> spec = super.createContextSpec(providerName, identity, credential, wiring, _overrides);
|
||||
Iterable<? extends Module> wiring, Properties _overrides) {
|
||||
RestContextSpec<S, A> spec = super
|
||||
.createContextSpec(providerName, identity, credential, wiring, _overrides);
|
||||
assertEquals(spec.iso3166Codes, "US");
|
||||
assertEquals(spec.identity, "foo");
|
||||
assertEquals(spec.credential, "bar");
|
||||
assertEquals(Iterables.size(spec.modules), 2);
|
||||
|
@ -189,28 +195,31 @@ public class RestContextFactoryTest {
|
|||
}
|
||||
|
||||
public void testBuilderPropertiesJCloudsScopeWithProviderIdentityAndFileCredential() throws IOException {
|
||||
|
||||
|
||||
File file = File.createTempFile("foo", "bar");
|
||||
file.deleteOnExit();
|
||||
Files.write("bar", file, Charsets.UTF_8);
|
||||
Properties props = new Properties();
|
||||
props.setProperty("test.endpoint", "http://localhost");
|
||||
props.setProperty("test.apiversion", "1");
|
||||
props.setProperty("test.iso3166-codes", "US");
|
||||
props.setProperty("test.identity", "foo");
|
||||
props.setProperty("test.credential.file", file.getAbsolutePath());
|
||||
|
||||
props.setProperty("test.propertiesbuilder", PropertiesBuilder.class.getName());
|
||||
props.setProperty("test.contextbuilder", IntegrationTestContextBuilder.class.getName());
|
||||
props.setProperty("jclouds.modules",
|
||||
"org.jclouds.rest.RestContextFactoryTest$A,org.jclouds.rest.RestContextFactoryTest$B");
|
||||
"org.jclouds.rest.RestContextFactoryTest$A,org.jclouds.rest.RestContextFactoryTest$B");
|
||||
|
||||
new RestContextFactory() {
|
||||
|
||||
@SuppressWarnings("hiding")
|
||||
@Override
|
||||
public <S, A> RestContextSpec<S, A> createContextSpec(String providerName, String identity, String credential,
|
||||
Iterable<? extends Module> wiring, Properties _overrides) {
|
||||
RestContextSpec<S, A> spec = super.createContextSpec(providerName, identity, credential, wiring, _overrides);
|
||||
Iterable<? extends Module> wiring, Properties _overrides) {
|
||||
RestContextSpec<S, A> spec = super
|
||||
.createContextSpec(providerName, identity, credential, wiring, _overrides);
|
||||
assertEquals(spec.iso3166Codes, "US");
|
||||
assertEquals(spec.identity, "foo");
|
||||
assertEquals(spec.credential, "bar");
|
||||
assertEquals(Iterables.size(spec.modules), 2);
|
||||
|
@ -241,16 +250,16 @@ public class RestContextFactoryTest {
|
|||
@SuppressWarnings("unchecked")
|
||||
@Test(expectedExceptions = IllegalArgumentException.class)
|
||||
public void testBuilderPropertiesWithWrongConfig() {
|
||||
@SuppressWarnings({ "unused", "rawtypes" })
|
||||
@SuppressWarnings( { "unused", "rawtypes" })
|
||||
RestContextSpec<IntegrationTestClient, IntegrationTestAsyncClient> contextSpec = contextSpec(provider,
|
||||
"http://localhost", "1", "dummy", null, (Class) null, (Class) null,
|
||||
(Class) IntegrationTestContextBuilder.class, (Class) PropertiesBuilder.class, Collections.EMPTY_LIST);
|
||||
"http://localhost", "1", "", "dummy", null, (Class) null, (Class) null,
|
||||
(Class) IntegrationTestContextBuilder.class, (Class) PropertiesBuilder.class, Collections.EMPTY_LIST);
|
||||
}
|
||||
|
||||
@RequiresHttp
|
||||
@ConfiguresRestClient
|
||||
public static class IntegrationTestRestClientModule extends
|
||||
RestClientModule<IntegrationTestClient, IntegrationTestAsyncClient> {
|
||||
RestClientModule<IntegrationTestClient, IntegrationTestAsyncClient> {
|
||||
|
||||
public IntegrationTestRestClientModule() {
|
||||
super(IntegrationTestClient.class, IntegrationTestAsyncClient.class);
|
||||
|
@ -259,7 +268,7 @@ public class RestContextFactoryTest {
|
|||
}
|
||||
|
||||
public static class IntegrationTestContextBuilder extends
|
||||
RestContextBuilder<IntegrationTestClient, IntegrationTestAsyncClient> {
|
||||
RestContextBuilder<IntegrationTestClient, IntegrationTestAsyncClient> {
|
||||
|
||||
public IntegrationTestContextBuilder(Properties props) {
|
||||
super(IntegrationTestClient.class, IntegrationTestAsyncClient.class, props);
|
||||
|
|
|
@ -280,8 +280,8 @@ public class RestAnnotationProcessorTest extends BaseRestClientTest {
|
|||
|
||||
private Injector injectorForClient() {
|
||||
|
||||
RestContextSpec<Caller, AsyncCaller> contextSpec = contextSpec("test", "http://localhost:9999", "1", "userfoo",
|
||||
null, Caller.class, AsyncCaller.class, ImmutableSet.<Module> of(new MockModule(),
|
||||
RestContextSpec<Caller, AsyncCaller> contextSpec = contextSpec("test", "http://localhost:9999", "1", "",
|
||||
"userfoo", null, Caller.class, AsyncCaller.class, ImmutableSet.<Module> of(new MockModule(),
|
||||
new NullLoggingModule(), new CallerCalleeModule()));
|
||||
|
||||
return createContextBuilder(contextSpec).buildInjector();
|
||||
|
@ -2100,8 +2100,8 @@ public class RestAnnotationProcessorTest extends BaseRestClientTest {
|
|||
|
||||
@BeforeClass
|
||||
void setupFactory() {
|
||||
RestContextSpec<String, Integer> contextSpec = contextSpec("test", "http://localhost:9999", "1", "userfoo", null,
|
||||
String.class, Integer.class, ImmutableSet.<Module> of(new MockModule(), new NullLoggingModule(),
|
||||
RestContextSpec<String, Integer> contextSpec = contextSpec("test", "http://localhost:9999", "1", "", "userfoo",
|
||||
null, String.class, Integer.class, ImmutableSet.<Module> of(new MockModule(), new NullLoggingModule(),
|
||||
new AbstractModule() {
|
||||
|
||||
@Override
|
||||
|
|
|
@ -19,13 +19,16 @@
|
|||
|
||||
package org.jclouds.aws.ec2;
|
||||
|
||||
import static org.jclouds.Constants.PROPERTY_ISO3166_CODES;
|
||||
import static org.jclouds.aws.domain.Region.AP_SOUTHEAST_1;
|
||||
import static org.jclouds.aws.domain.Region.EU_WEST_1;
|
||||
import static org.jclouds.aws.domain.Region.US_EAST_1;
|
||||
import static org.jclouds.aws.domain.Region.US_WEST_1;
|
||||
import static org.jclouds.aws.ec2.reference.AWSEC2Constants.PROPERTY_EC2_CC_AMIs;
|
||||
import static org.jclouds.compute.reference.ComputeServiceConstants.PROPERTY_TIMEOUT_NODE_SUSPENDED;
|
||||
import static org.jclouds.ec2.reference.EC2Constants.PROPERTY_EC2_AMI_OWNERS;
|
||||
import static org.jclouds.aws.ec2.reference.AWSEC2Constants.PROPERTY_EC2_CC_AMIs;
|
||||
import static org.jclouds.location.reference.LocationConstants.ISO3166_CODES;
|
||||
import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGION;
|
||||
import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGIONS;
|
||||
|
||||
import java.util.Properties;
|
||||
|
@ -40,11 +43,17 @@ import com.google.common.collect.ImmutableSet;
|
|||
* @author Adrian Cole
|
||||
*/
|
||||
public class AWSEC2PropertiesBuilder extends org.jclouds.ec2.EC2PropertiesBuilder {
|
||||
public static Set<String> DEFAULT_REGIONS = ImmutableSet.of(EU_WEST_1, US_EAST_1, US_WEST_1, AP_SOUTHEAST_1);
|
||||
public static Set<String> DEFAULT_REGIONS = ImmutableSet.of(US_EAST_1, US_WEST_1, EU_WEST_1, AP_SOUTHEAST_1);
|
||||
|
||||
@Override
|
||||
protected Properties defaultProperties() {
|
||||
Properties properties = super.defaultProperties();
|
||||
properties.setProperty(PROPERTY_ISO3166_CODES, "US-VA,US-CA,IE,SG");
|
||||
properties.setProperty(PROPERTY_REGION + "." + US_EAST_1 + "." + ISO3166_CODES, "US-VA");
|
||||
properties.setProperty(PROPERTY_REGION + "." + US_WEST_1 + "." + ISO3166_CODES, "US-CA");
|
||||
properties.setProperty(PROPERTY_REGION + "." + EU_WEST_1 + "." + ISO3166_CODES, "IE");
|
||||
properties.setProperty(PROPERTY_REGION + "." + AP_SOUTHEAST_1 + "." + ISO3166_CODES, "SG");
|
||||
|
||||
// sometimes, like in ec2, stop takes a very long time, perhaps
|
||||
// due to volume management. one example spent 2 minutes moving
|
||||
// from stopping->stopped state on an ec2 micro
|
||||
|
@ -53,7 +62,7 @@ public class AWSEC2PropertiesBuilder extends org.jclouds.ec2.EC2PropertiesBuilde
|
|||
// authorized key executes after ssh has started
|
||||
properties.setProperty("jclouds.ssh.max_retries", "7");
|
||||
properties.setProperty("jclouds.ssh.retryable_messages",
|
||||
"Auth fail,invalid data,End of IO Stream Read,Connection reset,socket is not established");
|
||||
"Auth fail,invalid data,End of IO Stream Read,Connection reset,socket is not established");
|
||||
properties.setProperty(PROPERTY_REGIONS, Joiner.on(',').join(DEFAULT_REGIONS));
|
||||
// amazon, alestic, canonical, and rightscale
|
||||
properties.setProperty(PROPERTY_EC2_AMI_OWNERS, "137112412989,063491364108,099720109477,411009282317");
|
||||
|
|
|
@ -20,11 +20,14 @@
|
|||
package org.jclouds.aws.ec2.compute;
|
||||
|
||||
import static org.jclouds.compute.util.ComputeServiceUtils.getCores;
|
||||
import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGIONS;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Properties;
|
||||
import java.util.Set;
|
||||
|
||||
import org.jclouds.aws.domain.Region;
|
||||
import org.jclouds.compute.BaseTemplateBuilderLiveTest;
|
||||
import org.jclouds.compute.ComputeServiceContext;
|
||||
import org.jclouds.compute.ComputeServiceContextFactory;
|
||||
|
@ -173,4 +176,40 @@ public class AWSEC2TemplateBuilderLiveTest extends BaseTemplateBuilderLiveTest {
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testTemplateBuilderWithLessRegions() throws IOException {
|
||||
ComputeServiceContext context = null;
|
||||
try {
|
||||
Properties overrides = setupProperties();
|
||||
// set regions to only 1
|
||||
overrides.setProperty(PROPERTY_REGIONS, Region.US_EAST_1);
|
||||
|
||||
context = new ComputeServiceContextFactory().createContext(provider, ImmutableSet
|
||||
.<Module> of(new Log4JLoggingModule()), overrides);
|
||||
|
||||
assert context.getComputeService().listImages().size() < this.context.getComputeService().listImages().size();
|
||||
|
||||
Template template = context.getComputeService().templateBuilder().imageId("us-east-1/ami-ccb35ea5").build();
|
||||
System.out.println(template.getHardware());
|
||||
assert (template.getImage().getProviderId().startsWith("ami-")) : template;
|
||||
assertEquals(template.getImage().getOperatingSystem().getVersion(), "5.4");
|
||||
assertEquals(template.getImage().getOperatingSystem().is64Bit(), true);
|
||||
assertEquals(template.getImage().getOperatingSystem().getFamily(), OsFamily.CENTOS);
|
||||
assertEquals(template.getImage().getVersion(), "4.4.10");
|
||||
assertEquals(template.getImage().getUserMetadata().get("rootDeviceType"), "instance-store");
|
||||
assertEquals(template.getLocation().getId(), "us-east-1");
|
||||
assertEquals(getCores(template.getHardware()), 2.0d);
|
||||
assertEquals(template.getHardware().getId(), "m1.large"); // because it is 64bit
|
||||
|
||||
} finally {
|
||||
if (context != null)
|
||||
context.close();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Set<String> getIso3166Codes() {
|
||||
return ImmutableSet.<String> of("US-VA", "US-CA", "IE", "SG");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -24,7 +24,6 @@ import static org.testng.Assert.assertEquals;
|
|||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import org.jclouds.aws.ec2.compute.strategy.AWSEC2ReviseParsedImage;
|
||||
import org.jclouds.compute.config.BaseComputeServiceContextModule;
|
||||
import org.jclouds.compute.domain.ImageBuilder;
|
||||
import org.jclouds.compute.domain.OperatingSystemBuilder;
|
||||
|
@ -32,8 +31,8 @@ import org.jclouds.compute.domain.OsFamily;
|
|||
import org.jclouds.compute.reference.ComputeServiceConstants;
|
||||
import org.jclouds.domain.Credentials;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationBuilder;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
import org.jclouds.ec2.compute.functions.EC2ImageParser;
|
||||
import org.jclouds.ec2.compute.strategy.EC2PopulateDefaultLoginCredentialsForImageStrategy;
|
||||
import org.jclouds.ec2.domain.Image;
|
||||
|
@ -127,11 +126,11 @@ public class AWSEC2ImageParserTest {
|
|||
|
||||
assertEquals(
|
||||
new Gson().toJson(Iterables.get(result, 1)),
|
||||
"{\"operatingSystem\":{\"family\":\"UBUNTU\",\"arch\":\"paravirtual\",\"version\":\"9.10\",\"description\":\"411009282317/RightImage_Ubuntu_9.10_x64_v4.5.3_EBS_Alpha\",\"is64Bit\":true},\"version\":\"4.5.3_EBS_Alpha\",\"description\":\"RightImage_Ubuntu_9.10_x64_v4.5.3_EBS_Alpha\",\"defaultCredentials\":{\"identity\":\"root\"},\"id\":\"us-east-1/ami-c19db6b5\",\"type\":\"IMAGE\",\"providerId\":\"ami-c19db6b5\",\"location\":{\"scope\":\"REGION\",\"id\":\"us-east-1\",\"description\":\"us-east-1\"},\"userMetadata\":{\"owner\":\"411009282317\",\"rootDeviceType\":\"ebs\"}}");
|
||||
"{\"operatingSystem\":{\"family\":\"UBUNTU\",\"arch\":\"paravirtual\",\"version\":\"9.10\",\"description\":\"411009282317/RightImage_Ubuntu_9.10_x64_v4.5.3_EBS_Alpha\",\"is64Bit\":true},\"version\":\"4.5.3_EBS_Alpha\",\"description\":\"RightImage_Ubuntu_9.10_x64_v4.5.3_EBS_Alpha\",\"defaultCredentials\":{\"identity\":\"root\"},\"id\":\"us-east-1/ami-c19db6b5\",\"type\":\"IMAGE\",\"providerId\":\"ami-c19db6b5\",\"location\":{\"scope\":\"REGION\",\"id\":\"us-east-1\",\"description\":\"us-east-1\",\"iso3166Codes\":[],\"metadata\":{}},\"userMetadata\":{\"owner\":\"411009282317\",\"rootDeviceType\":\"ebs\"}}");
|
||||
|
||||
assertEquals(
|
||||
new Gson().toJson(Iterables.get(result, 2)),
|
||||
"{\"operatingSystem\":{\"family\":\"WINDOWS\",\"arch\":\"hvm\",\"version\":\"2003\",\"description\":\"411009282317/RightImage Windows_2003_i386_v5.4.3\",\"is64Bit\":false},\"version\":\"5.4.3\",\"description\":\"Built by RightScale\",\"defaultCredentials\":{\"identity\":\"root\"},\"id\":\"us-east-1/ami-710c2605\",\"type\":\"IMAGE\",\"providerId\":\"ami-710c2605\",\"location\":{\"scope\":\"REGION\",\"id\":\"us-east-1\",\"description\":\"us-east-1\"},\"userMetadata\":{\"owner\":\"411009282317\",\"rootDeviceType\":\"ebs\"}}");
|
||||
"{\"operatingSystem\":{\"family\":\"WINDOWS\",\"arch\":\"hvm\",\"version\":\"2003\",\"description\":\"411009282317/RightImage Windows_2003_i386_v5.4.3\",\"is64Bit\":false},\"version\":\"5.4.3\",\"description\":\"Built by RightScale\",\"defaultCredentials\":{\"identity\":\"root\"},\"id\":\"us-east-1/ami-710c2605\",\"type\":\"IMAGE\",\"providerId\":\"ami-710c2605\",\"location\":{\"scope\":\"REGION\",\"id\":\"us-east-1\",\"description\":\"us-east-1\",\"iso3166Codes\":[],\"metadata\":{}},\"userMetadata\":{\"owner\":\"411009282317\",\"rootDeviceType\":\"ebs\"}}");
|
||||
}
|
||||
|
||||
public void testParseAmznImage() {
|
||||
|
@ -154,7 +153,8 @@ public class AWSEC2ImageParserTest {
|
|||
ImmutableMap.of("owner", "137112412989", "rootDeviceType", "ebs")).build());
|
||||
}
|
||||
|
||||
static Location defaultLocation = new LocationImpl(LocationScope.REGION, "us-east-1", "us-east-1", null);
|
||||
static Location defaultLocation = new LocationBuilder().scope(LocationScope.REGION).id("us-east-1").description(
|
||||
"us-east-1").build();
|
||||
|
||||
public static Set<org.jclouds.compute.domain.Image> convertImages(String resource) {
|
||||
|
||||
|
|
|
@ -20,10 +20,13 @@
|
|||
package org.jclouds.aws.s3;
|
||||
|
||||
import static org.jclouds.Constants.PROPERTY_ENDPOINT;
|
||||
import static org.jclouds.Constants.PROPERTY_ISO3166_CODES;
|
||||
import static org.jclouds.aws.domain.Region.AP_SOUTHEAST_1;
|
||||
import static org.jclouds.aws.domain.Region.EU_WEST_1;
|
||||
import static org.jclouds.aws.domain.Region.US_EAST_1;
|
||||
import static org.jclouds.aws.domain.Region.US_WEST_1;
|
||||
import static org.jclouds.location.reference.LocationConstants.ENDPOINT;
|
||||
import static org.jclouds.location.reference.LocationConstants.ISO3166_CODES;
|
||||
import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGION;
|
||||
import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGIONS;
|
||||
|
||||
|
@ -46,15 +49,20 @@ public class AWSS3PropertiesBuilder extends org.jclouds.s3.S3PropertiesBuilder {
|
|||
@Override
|
||||
protected Properties defaultProperties() {
|
||||
Properties properties = super.defaultProperties();
|
||||
properties.setProperty(PROPERTY_REGIONS,
|
||||
Joiner.on(',').join(Region.US_STANDARD, Region.US_WEST_1, "EU", Region.AP_SOUTHEAST_1));
|
||||
properties.setProperty(PROPERTY_ISO3166_CODES, "US,US-CA,IE,SG");
|
||||
properties.setProperty(PROPERTY_REGIONS, Joiner.on(',').join(Region.US_STANDARD, Region.US_WEST_1, "EU",
|
||||
Region.AP_SOUTHEAST_1));
|
||||
properties.setProperty(PROPERTY_ENDPOINT, "https://s3.amazonaws.com");
|
||||
properties.setProperty(PROPERTY_REGION + "." + Region.US_STANDARD + ".endpoint", "https://s3.amazonaws.com");
|
||||
properties.setProperty(PROPERTY_REGION + "." + Region.US_WEST_1 + ".endpoint",
|
||||
"https://s3-us-west-1.amazonaws.com");
|
||||
properties.setProperty(PROPERTY_REGION + "." + "EU" + ".endpoint", "https://s3-eu-west-1.amazonaws.com");
|
||||
properties.setProperty(PROPERTY_REGION + "." + Region.AP_SOUTHEAST_1 + ".endpoint",
|
||||
"https://s3-ap-southeast-1.amazonaws.com");
|
||||
properties.setProperty(PROPERTY_REGION + "." + Region.US_STANDARD + "." + ENDPOINT, "https://s3.amazonaws.com");
|
||||
properties.setProperty(PROPERTY_REGION + "." + Region.US_STANDARD + "." + ISO3166_CODES, "US");
|
||||
properties.setProperty(PROPERTY_REGION + "." + Region.US_WEST_1 + "." + ENDPOINT,
|
||||
"https://s3-us-west-1.amazonaws.com");
|
||||
properties.setProperty(PROPERTY_REGION + "." + Region.US_WEST_1 + "." + ISO3166_CODES, "US-CA");
|
||||
properties.setProperty(PROPERTY_REGION + "." + "EU" + "." + ENDPOINT, "https://s3-eu-west-1.amazonaws.com");
|
||||
properties.setProperty(PROPERTY_REGION + "." + "EU" + "." + ISO3166_CODES, "IE");
|
||||
properties.setProperty(PROPERTY_REGION + "." + Region.AP_SOUTHEAST_1 + "." + ENDPOINT,
|
||||
"https://s3-ap-southeast-1.amazonaws.com");
|
||||
properties.setProperty(PROPERTY_REGION + "." + Region.AP_SOUTHEAST_1 + "." + ISO3166_CODES, "SG");
|
||||
return properties;
|
||||
}
|
||||
|
||||
|
|
|
@ -19,6 +19,15 @@
|
|||
|
||||
package org.jclouds.aws.s3;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.lang.reflect.Array;
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
import org.jclouds.http.HttpRequest;
|
||||
import org.jclouds.http.functions.ReturnTrueIf2xx;
|
||||
import org.jclouds.s3.S3AsyncClient;
|
||||
import org.jclouds.s3.functions.ReturnFalseIfBucketAlreadyOwnedByYouOrIllegalState;
|
||||
import org.jclouds.s3.options.PutBucketOptions;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
/**
|
||||
|
@ -32,4 +41,22 @@ public class AWSS3AsyncClientTest extends org.jclouds.s3.S3AsyncClientTest {
|
|||
this.provider = "aws-s3";
|
||||
}
|
||||
|
||||
public void testPutBucketEu() throws ArrayIndexOutOfBoundsException, SecurityException, IllegalArgumentException,
|
||||
NoSuchMethodException, IOException {
|
||||
Method method = S3AsyncClient.class.getMethod("putBucketInRegion", String.class, String.class, Array.newInstance(
|
||||
PutBucketOptions.class, 0).getClass());
|
||||
HttpRequest request = processor.createRequest(method, "EU", "bucket");
|
||||
|
||||
assertRequestLineEquals(request, "PUT https://bucket." + url + "/ HTTP/1.1");
|
||||
assertNonPayloadHeadersEqual(request, "Host: bucket." + url + "\n");
|
||||
assertPayloadEquals(request,
|
||||
"<CreateBucketConfiguration><LocationConstraint>EU</LocationConstraint></CreateBucketConfiguration>",
|
||||
"text/xml", false);
|
||||
|
||||
assertResponseParserClassEquals(method, request, ReturnTrueIf2xx.class);
|
||||
assertSaxResponseParserClassEquals(method, null);
|
||||
assertExceptionParserClassEquals(method, ReturnFalseIfBucketAlreadyOwnedByYouOrIllegalState.class);
|
||||
|
||||
checkFilters(request);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,13 +19,21 @@
|
|||
|
||||
package org.jclouds.aws.s3.blobstore.integration;
|
||||
|
||||
import org.jclouds.blobstore.integration.internal.BaseServiceIntegrationTest;
|
||||
import java.util.Set;
|
||||
|
||||
import org.jclouds.s3.blobstore.integration.S3ServiceIntegrationLiveTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
/**
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
@Test(groups = "live", testName = "AWSS3ServiceIntegrationLiveTest")
|
||||
public class AWSS3ServiceIntegrationLiveTest extends BaseServiceIntegrationTest {
|
||||
@Test(groups = "live", testName = "AWSS3ServiceIntegrationLiveTest")
|
||||
public class AWSS3ServiceIntegrationLiveTest extends S3ServiceIntegrationLiveTest {
|
||||
@Override
|
||||
protected Set<String> getIso3166Codes() {
|
||||
return ImmutableSet.<String> of("US", "US-CA", "IE", "SG");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ package org.jclouds.azureblob;
|
|||
|
||||
import static org.jclouds.Constants.PROPERTY_API_VERSION;
|
||||
import static org.jclouds.Constants.PROPERTY_ENDPOINT;
|
||||
import static org.jclouds.Constants.PROPERTY_ISO3166_CODES;
|
||||
import static org.jclouds.blobstore.reference.BlobStoreConstants.PROPERTY_USER_METADATA_PREFIX;
|
||||
|
||||
import java.util.Properties;
|
||||
|
@ -39,6 +40,7 @@ public class AzureBlobPropertiesBuilder extends AzureStoragePropertiesBuilder {
|
|||
properties.setProperty(PROPERTY_USER_METADATA_PREFIX, "x-ms-meta-");
|
||||
properties.setProperty(PROPERTY_API_VERSION, "2009-09-19");
|
||||
properties.setProperty(PROPERTY_ENDPOINT, "https://{identity}.blob.core.windows.net");
|
||||
properties.setProperty(PROPERTY_ISO3166_CODES, "US-TX,US-IL,IE-D,SG,NL-NH,HK");
|
||||
return properties;
|
||||
}
|
||||
|
||||
|
|
|
@ -19,10 +19,6 @@
|
|||
|
||||
package org.jclouds.azureblob.blobstore.config;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import org.jclouds.azureblob.AzureBlobAsyncClient;
|
||||
import org.jclouds.azureblob.AzureBlobClient;
|
||||
import org.jclouds.azureblob.blobstore.AzureAsyncBlobStore;
|
||||
|
@ -37,17 +33,9 @@ import org.jclouds.blobstore.attr.ConsistencyModel;
|
|||
import org.jclouds.blobstore.config.BlobStoreMapModule;
|
||||
import org.jclouds.blobstore.internal.BlobStoreContextImpl;
|
||||
import org.jclouds.blobstore.strategy.ContainsValueInListStrategy;
|
||||
import org.jclouds.collect.Memoized;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
import org.jclouds.location.Provider;
|
||||
import org.jclouds.location.config.JustProviderLocationModule;
|
||||
|
||||
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.Provides;
|
||||
import com.google.inject.Scopes;
|
||||
import com.google.inject.TypeLiteral;
|
||||
|
||||
|
@ -61,6 +49,7 @@ public class AzureBlobStoreContextModule extends AbstractModule {
|
|||
@Override
|
||||
protected void configure() {
|
||||
install(new BlobStoreMapModule());
|
||||
install(new JustProviderLocationModule());
|
||||
bind(ConsistencyModel.class).toInstance(ConsistencyModel.STRICT);
|
||||
bind(AsyncBlobStore.class).to(AzureAsyncBlobStore.class).in(Scopes.SINGLETON);
|
||||
bind(BlobStore.class).to(AzureBlobStore.class).in(Scopes.SINGLETON);
|
||||
|
@ -70,18 +59,4 @@ public class AzureBlobStoreContextModule extends AbstractModule {
|
|||
bind(BlobRequestSigner.class).to(AzureBlobRequestSigner.class);
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
@Memoized
|
||||
Supplier<Set<? extends Location>> provideLocations(Supplier<Location> defaultLocation) {
|
||||
return Suppliers.<Set<? extends Location>> ofInstance(ImmutableSet.of(defaultLocation.get()));
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
Supplier<Location> provideDefaultLocation(@Provider String providerName) {
|
||||
return Suppliers
|
||||
.<Location> ofInstance(new LocationImpl(LocationScope.PROVIDER, providerName, providerName, null));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -19,13 +19,20 @@
|
|||
|
||||
package org.jclouds.azureblob.blobstore.integration;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.jclouds.blobstore.integration.internal.BaseServiceIntegrationTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
/**
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
@Test(groups = "live")
|
||||
public class AzureBlobServiceIntegrationLiveTest extends BaseServiceIntegrationTest {
|
||||
|
||||
@Override
|
||||
protected Set<String> getIso3166Codes() {
|
||||
return ImmutableSet.<String> of("US-TX", "US-IL", "IE-D", "SG", "NL-NH", "HK");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
package org.jclouds.vcloud.bluelock;
|
||||
|
||||
import static org.jclouds.Constants.PROPERTY_ENDPOINT;
|
||||
import static org.jclouds.Constants.PROPERTY_ISO3166_CODES;
|
||||
import static org.jclouds.vcloud.reference.VCloudConstants.PROPERTY_VCLOUD_DEFAULT_NETWORK;
|
||||
|
||||
import java.util.Properties;
|
||||
|
@ -35,6 +36,7 @@ public class BlueLockVCloudDirectorPropertiesBuilder extends VCloudPropertiesBui
|
|||
@Override
|
||||
protected Properties defaultProperties() {
|
||||
Properties properties = super.defaultProperties();
|
||||
properties.setProperty(PROPERTY_ISO3166_CODES, "US-IN");
|
||||
properties.setProperty(PROPERTY_ENDPOINT, "https://vcenterprise.bluelock.com/api");
|
||||
properties.setProperty(PROPERTY_VCLOUD_DEFAULT_NETWORK, "internet01");
|
||||
return properties;
|
||||
|
|
|
@ -4,6 +4,7 @@ import static org.jclouds.compute.util.ComputeServiceUtils.getCores;
|
|||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Set;
|
||||
|
||||
import org.jclouds.compute.BaseTemplateBuilderLiveTest;
|
||||
import org.jclouds.compute.domain.OsFamily;
|
||||
|
@ -12,6 +13,7 @@ import org.jclouds.compute.domain.os.OsFamilyVersion64Bit;
|
|||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -49,4 +51,9 @@ public class BlueLockVCloudDirectorTemplateBuilderLiveTest extends BaseTemplateB
|
|||
assertEquals(defaultTemplate.getImage().getOperatingSystem().getFamily(), OsFamily.UBUNTU);
|
||||
assertEquals(getCores(defaultTemplate.getHardware()), 1.0d);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Set<String> getIso3166Codes() {
|
||||
return ImmutableSet.<String> of("US-IN");
|
||||
}
|
||||
}
|
|
@ -20,6 +20,7 @@
|
|||
package org.jclouds.rackspace.cloudfiles;
|
||||
|
||||
import static org.jclouds.Constants.PROPERTY_ENDPOINT;
|
||||
import static org.jclouds.Constants.PROPERTY_ISO3166_CODES;
|
||||
import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGIONS;
|
||||
|
||||
import java.util.Properties;
|
||||
|
@ -37,6 +38,7 @@ public class CloudFilesUKPropertiesBuilder extends SwiftPropertiesBuilder {
|
|||
Properties properties = super.defaultProperties();
|
||||
properties.setProperty(PROPERTY_REGIONS, "UK");
|
||||
properties.setProperty(PROPERTY_ENDPOINT, "https://lon.auth.api.rackspacecloud.com");
|
||||
properties.setProperty(PROPERTY_ISO3166_CODES, "GB-SLG");
|
||||
return properties;
|
||||
}
|
||||
|
||||
|
|
|
@ -19,13 +19,20 @@
|
|||
|
||||
package org.jclouds.rackspace.cloudfiles.blobstore.integration;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.jclouds.cloudfiles.blobstore.integration.CloudFilesServiceIntegrationLiveTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
/**
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
@Test(groups = "live", testName = "CloudFilesUKServiceIntegrationLiveTest")
|
||||
public class CloudFilesUKServiceIntegrationLiveTest extends CloudFilesServiceIntegrationLiveTest {
|
||||
|
||||
@Override
|
||||
protected Set<String> getIso3166Codes() {
|
||||
return ImmutableSet.<String> of("GB-SLG");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
package org.jclouds.rackspace.cloudfiles;
|
||||
|
||||
import static org.jclouds.Constants.PROPERTY_ENDPOINT;
|
||||
import static org.jclouds.Constants.PROPERTY_ISO3166_CODES;
|
||||
import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGIONS;
|
||||
|
||||
import java.util.Properties;
|
||||
|
@ -37,6 +38,7 @@ public class CloudFilesUSPropertiesBuilder extends SwiftPropertiesBuilder {
|
|||
Properties properties = super.defaultProperties();
|
||||
properties.setProperty(PROPERTY_REGIONS, "US");
|
||||
properties.setProperty(PROPERTY_ENDPOINT, "https://auth.api.rackspacecloud.com");
|
||||
properties.setProperty(PROPERTY_ISO3166_CODES, "US-IL,US-TX");
|
||||
return properties;
|
||||
}
|
||||
|
||||
|
|
|
@ -19,13 +19,20 @@
|
|||
|
||||
package org.jclouds.rackspace.cloudfiles.blobstore.integration;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.jclouds.cloudfiles.blobstore.integration.CloudFilesServiceIntegrationLiveTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
/**
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
@Test(groups = "live", testName = "CloudFilesUSServiceIntegrationLiveTest")
|
||||
@Test(groups = "live", testName = "CloudFilesUSServiceIntegrationLiveTest")
|
||||
public class CloudFilesUSServiceIntegrationLiveTest extends CloudFilesServiceIntegrationLiveTest {
|
||||
|
||||
}
|
||||
@Override
|
||||
protected Set<String> getIso3166Codes() {
|
||||
return ImmutableSet.<String> of("US-IL", "US-TX");
|
||||
}
|
||||
}
|
|
@ -21,6 +21,7 @@ package org.jclouds.cloudonestorage;
|
|||
|
||||
import static org.jclouds.Constants.PROPERTY_API_VERSION;
|
||||
import static org.jclouds.Constants.PROPERTY_ENDPOINT;
|
||||
import static org.jclouds.Constants.PROPERTY_ISO3166_CODES;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
|
@ -37,6 +38,7 @@ public class CloudOneStoragePropertiesBuilder extends PropertiesBuilder {
|
|||
protected Properties defaultProperties() {
|
||||
Properties properties = super.defaultProperties();
|
||||
properties.setProperty(PROPERTY_ENDPOINT, "https://cloudonestorage.peer1.com");
|
||||
properties.setProperty(PROPERTY_ISO3166_CODES, "US-GA,US-TX");
|
||||
properties.setProperty(PROPERTY_API_VERSION, "1.3.0");
|
||||
return properties;
|
||||
}
|
||||
|
|
|
@ -19,13 +19,20 @@
|
|||
|
||||
package org.jclouds.cloudonestorage.blobstore.integration;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.jclouds.atmos.blobstore.integration.AtmosServiceIntegrationLiveTest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
/**
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
@Test(groups = "live", testName = "CloudOneStorageServiceIntegrationLiveTest")
|
||||
@Test(groups = "live", testName = "CloudOneStorageServiceIntegrationLiveTest")
|
||||
public class CloudOneStorageServiceIntegrationLiveTest extends AtmosServiceIntegrationLiveTest {
|
||||
|
||||
@Override
|
||||
protected Set<String> getIso3166Codes() {
|
||||
return ImmutableSet.<String> of("US-GA", "US-TX");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@ package org.jclouds.rackspace.cloudservers;
|
|||
|
||||
import static org.jclouds.Constants.PROPERTY_API_VERSION;
|
||||
import static org.jclouds.Constants.PROPERTY_ENDPOINT;
|
||||
import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGIONS;
|
||||
import static org.jclouds.Constants.PROPERTY_ISO3166_CODES;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
|
@ -37,7 +37,7 @@ public class CloudServersUKPropertiesBuilder extends PropertiesBuilder {
|
|||
@Override
|
||||
protected Properties defaultProperties() {
|
||||
Properties properties = super.defaultProperties();
|
||||
properties.setProperty(PROPERTY_REGIONS, "UK");
|
||||
properties.setProperty(PROPERTY_ISO3166_CODES, "GB-SLG");
|
||||
properties.setProperty(PROPERTY_ENDPOINT, "https://lon.auth.api.rackspacecloud.com");
|
||||
properties.setProperty(PROPERTY_API_VERSION, OpenStackAuthAsyncClient.VERSION);
|
||||
return properties;
|
||||
|
|
|
@ -22,6 +22,8 @@ package org.jclouds.rackspace.cloudservers.compute;
|
|||
import static org.jclouds.compute.util.ComputeServiceUtils.getCores;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.jclouds.compute.BaseTemplateBuilderLiveTest;
|
||||
import org.jclouds.compute.domain.OsFamily;
|
||||
import org.jclouds.compute.domain.Template;
|
||||
|
@ -29,6 +31,7 @@ import org.jclouds.compute.domain.os.OsFamilyVersion64Bit;
|
|||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -69,8 +72,12 @@ public class CloudServersUKTemplateBuilderLiveTest extends BaseTemplateBuilderLi
|
|||
assertEquals(defaultTemplate.getImage().getOperatingSystem().is64Bit(), true);
|
||||
assertEquals(defaultTemplate.getImage().getOperatingSystem().getVersion(), "10.04");
|
||||
assertEquals(defaultTemplate.getImage().getOperatingSystem().getFamily(), OsFamily.UBUNTU);
|
||||
assertEquals(defaultTemplate.getLocation().getId(), "UK");
|
||||
assertEquals(defaultTemplate.getLocation().getId(), provider);
|
||||
assertEquals(getCores(defaultTemplate.getHardware()), 1.0d);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Set<String> getIso3166Codes() {
|
||||
return ImmutableSet.<String> of("GB-SLG");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,7 +21,7 @@ package org.jclouds.rackspace.cloudservers;
|
|||
|
||||
import static org.jclouds.Constants.PROPERTY_API_VERSION;
|
||||
import static org.jclouds.Constants.PROPERTY_ENDPOINT;
|
||||
import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGIONS;
|
||||
import static org.jclouds.Constants.PROPERTY_ISO3166_CODES;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
|
@ -37,7 +37,7 @@ public class CloudServersUSPropertiesBuilder extends PropertiesBuilder {
|
|||
@Override
|
||||
protected Properties defaultProperties() {
|
||||
Properties properties = super.defaultProperties();
|
||||
properties.setProperty(PROPERTY_REGIONS, "US");
|
||||
properties.setProperty(PROPERTY_ISO3166_CODES, "US-IL,US-TX");
|
||||
properties.setProperty(PROPERTY_ENDPOINT, "https://auth.api.rackspacecloud.com");
|
||||
properties.setProperty(PROPERTY_API_VERSION, OpenStackAuthAsyncClient.VERSION);
|
||||
return properties;
|
||||
|
|
|
@ -22,6 +22,8 @@ package org.jclouds.rackspace.cloudservers.compute;
|
|||
import static org.jclouds.compute.util.ComputeServiceUtils.getCores;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.jclouds.compute.BaseTemplateBuilderLiveTest;
|
||||
import org.jclouds.compute.domain.OsFamily;
|
||||
import org.jclouds.compute.domain.Template;
|
||||
|
@ -29,6 +31,7 @@ import org.jclouds.compute.domain.os.OsFamilyVersion64Bit;
|
|||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -69,7 +72,12 @@ public class CloudServersUSTemplateBuilderLiveTest extends BaseTemplateBuilderLi
|
|||
assertEquals(defaultTemplate.getImage().getOperatingSystem().is64Bit(), true);
|
||||
assertEquals(defaultTemplate.getImage().getOperatingSystem().getVersion(), "10.04");
|
||||
assertEquals(defaultTemplate.getImage().getOperatingSystem().getFamily(), OsFamily.UBUNTU);
|
||||
assertEquals(defaultTemplate.getLocation().getId(), "US");
|
||||
assertEquals(defaultTemplate.getLocation().getId(), provider);
|
||||
assertEquals(getCores(defaultTemplate.getHardware()), 1.0d);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Set<String> getIso3166Codes() {
|
||||
return ImmutableSet.<String> of("US-IL", "US-TX");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
package org.jclouds.cloudsigma;
|
||||
|
||||
import static org.jclouds.Constants.PROPERTY_ENDPOINT;
|
||||
import static org.jclouds.Constants.PROPERTY_ISO3166_CODES;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
|
@ -32,6 +33,7 @@ public class CloudSigmaZurichPropertiesBuilder extends CloudSigmaPropertiesBuild
|
|||
@Override
|
||||
protected Properties defaultProperties() {
|
||||
Properties properties = super.defaultProperties();
|
||||
properties.setProperty(PROPERTY_ISO3166_CODES, "CH-ZH");
|
||||
properties.setProperty(PROPERTY_ENDPOINT, "https://api.cloudsigma.com");
|
||||
return properties;
|
||||
}
|
||||
|
|
|
@ -23,7 +23,6 @@ import static com.google.common.base.Preconditions.checkNotNull;
|
|||
import static com.google.common.collect.Iterables.filter;
|
||||
import static org.jclouds.concurrent.FutureIterables.transformParallel;
|
||||
|
||||
import java.net.URI;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Future;
|
||||
|
@ -56,9 +55,7 @@ import org.jclouds.compute.domain.internal.VolumeImpl;
|
|||
import org.jclouds.compute.reference.ComputeServiceConstants;
|
||||
import org.jclouds.domain.Credentials;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.domain.LocationScope;
|
||||
import org.jclouds.domain.internal.LocationImpl;
|
||||
import org.jclouds.location.Provider;
|
||||
import org.jclouds.location.suppliers.JustProvider;
|
||||
import org.jclouds.logging.Logger;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
|
@ -75,21 +72,20 @@ import com.google.common.collect.ImmutableSet.Builder;
|
|||
*/
|
||||
@Singleton
|
||||
public class CloudSigmaComputeServiceAdapter implements
|
||||
ComputeServiceAdapter<ServerInfo, Hardware, DriveInfo, Location> {
|
||||
ComputeServiceAdapter<ServerInfo, Hardware, DriveInfo, Location> {
|
||||
private static final Predicate<DriveInfo> PREINSTALLED_DISK = Predicates.and(Predicates.notNull(),
|
||||
new Predicate<DriveInfo>() {
|
||||
new Predicate<DriveInfo>() {
|
||||
|
||||
@Override
|
||||
public boolean apply(DriveInfo drive) {
|
||||
return drive.getType().equals(DriveType.DISK) && drive.getDriveType().contains("preinstalled");
|
||||
}
|
||||
@Override
|
||||
public boolean apply(DriveInfo drive) {
|
||||
return drive.getType().equals(DriveType.DISK) && drive.getDriveType().contains("preinstalled");
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
private final CloudSigmaClient client;
|
||||
private final CloudSigmaAsyncClient aclient;
|
||||
private final Predicate<DriveInfo> driveNotClaimed;
|
||||
private final String providerName;
|
||||
private final URI providerURI;
|
||||
private final JustProvider locationSupplier;
|
||||
private final String defaultVncPassword;
|
||||
private final Map<String, DriveInfo> cache;
|
||||
private final ExecutorService executor;
|
||||
|
@ -100,14 +96,13 @@ public class CloudSigmaComputeServiceAdapter implements
|
|||
|
||||
@Inject
|
||||
public CloudSigmaComputeServiceAdapter(CloudSigmaClient client, CloudSigmaAsyncClient aclient,
|
||||
Predicate<DriveInfo> driveNotClaimed, @Provider String providerName, @Provider URI providerURI,
|
||||
@Named(CloudSigmaConstants.PROPERTY_VNC_PASSWORD) String defaultVncPassword, Map<String, DriveInfo> cache,
|
||||
@Named(Constants.PROPERTY_USER_THREADS) ExecutorService executor) {
|
||||
Predicate<DriveInfo> driveNotClaimed, JustProvider locationSupplier,
|
||||
@Named(CloudSigmaConstants.PROPERTY_VNC_PASSWORD) String defaultVncPassword, Map<String, DriveInfo> cache,
|
||||
@Named(Constants.PROPERTY_USER_THREADS) ExecutorService executor) {
|
||||
this.client = checkNotNull(client, "client");
|
||||
this.aclient = checkNotNull(aclient, "aclient");
|
||||
this.driveNotClaimed = checkNotNull(driveNotClaimed, "driveNotClaimed");
|
||||
this.providerName = checkNotNull(providerName, "providerName");
|
||||
this.providerURI = checkNotNull(providerURI, "providerURI");
|
||||
this.locationSupplier = checkNotNull(locationSupplier, "locationSupplier");
|
||||
this.defaultVncPassword = checkNotNull(defaultVncPassword, "defaultVncPassword");
|
||||
this.cache = checkNotNull(cache, "cache");
|
||||
this.executor = checkNotNull(executor, "executor");
|
||||
|
@ -115,11 +110,11 @@ public class CloudSigmaComputeServiceAdapter implements
|
|||
|
||||
@Override
|
||||
public ServerInfo runNodeWithTagAndNameAndStoreCredentials(String tag, String name, Template template,
|
||||
Map<String, Credentials> credentialStore) {
|
||||
Map<String, Credentials> credentialStore) {
|
||||
long bootSize = (long) (template.getHardware().getVolumes().get(0).getSize() * 1024 * 1024 * 1024l);
|
||||
logger.debug(">> imaging boot drive source(%s) bytes(%d)", template.getImage().getId(), bootSize);
|
||||
DriveInfo drive = client.cloneDrive(template.getImage().getId(), template.getImage().getId(),
|
||||
new CloneDriveOptions().size(bootSize));
|
||||
new CloneDriveOptions().size(bootSize));
|
||||
boolean success = driveNotClaimed.apply(drive);
|
||||
logger.debug("<< image(%s) complete(%s)", drive.getUuid(), success);
|
||||
if (!success) {
|
||||
|
@ -127,7 +122,7 @@ public class CloudSigmaComputeServiceAdapter implements
|
|||
throw new IllegalStateException("could not image drive in time!");
|
||||
}
|
||||
Server toCreate = Servers.small(name, drive.getUuid(), defaultVncPassword).mem(template.getHardware().getRam())
|
||||
.cpu((int) (template.getHardware().getProcessors().get(0).getSpeed())).build();
|
||||
.cpu((int) (template.getHardware().getProcessors().get(0).getSpeed())).build();
|
||||
|
||||
logger.debug(">> creating server");
|
||||
ServerInfo from = client.createServer(toCreate);
|
||||
|
@ -159,8 +154,8 @@ public class CloudSigmaComputeServiceAdapter implements
|
|||
return "sizeLessThanOrEqual(" + size + ")";
|
||||
}
|
||||
|
||||
}).ids(id).ram(ram).processors(ImmutableList.of(new Processor(1, cpu)))
|
||||
.volumes(ImmutableList.<Volume> of(new VolumeImpl(size, true, true))).build());
|
||||
}).ids(id).ram(ram).processors(ImmutableList.of(new Processor(1, cpu))).volumes(
|
||||
ImmutableList.<Volume> of(new VolumeImpl(size, true, true))).build());
|
||||
}
|
||||
return hardware.build();
|
||||
}
|
||||
|
@ -171,14 +166,14 @@ public class CloudSigmaComputeServiceAdapter implements
|
|||
@Override
|
||||
public Iterable<DriveInfo> listImages() {
|
||||
Iterable<DriveInfo> drives = transformParallel(client.listStandardDrives(),
|
||||
new Function<String, Future<DriveInfo>>() {
|
||||
new Function<String, Future<DriveInfo>>() {
|
||||
|
||||
@Override
|
||||
public Future<DriveInfo> apply(String input) {
|
||||
return aclient.getDriveInfo(input);
|
||||
}
|
||||
@Override
|
||||
public Future<DriveInfo> apply(String input) {
|
||||
return aclient.getDriveInfo(input);
|
||||
}
|
||||
|
||||
}, executor, null, logger, "drives");
|
||||
}, executor, null, logger, "drives");
|
||||
Iterable<DriveInfo> returnVal = filter(drives, PREINSTALLED_DISK);
|
||||
for (DriveInfo drive : returnVal)
|
||||
cache.put(drive.getUuid(), drive);
|
||||
|
@ -191,10 +186,10 @@ public class CloudSigmaComputeServiceAdapter implements
|
|||
return (Iterable<ServerInfo>) client.listServerInfo();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public Iterable<Location> listLocations() {
|
||||
return ImmutableSet.<Location> of(new LocationImpl(LocationScope.PROVIDER, providerName, providerURI
|
||||
.toASCIIString(), null));
|
||||
return (Iterable<Location>) locationSupplier.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -52,11 +52,13 @@ import org.jclouds.compute.domain.os.OsFamilyVersion64Bit;
|
|||
import org.jclouds.compute.reference.ComputeServiceConstants;
|
||||
import org.jclouds.domain.Location;
|
||||
import org.jclouds.functions.IdentityFunction;
|
||||
import org.jclouds.location.suppliers.OnlyLocationOrFirstZone;
|
||||
import org.jclouds.predicates.RetryablePredicate;
|
||||
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.base.Predicates;
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.common.collect.MapMaker;
|
||||
import com.google.inject.Injector;
|
||||
import com.google.inject.Provides;
|
||||
|
@ -101,7 +103,8 @@ public class CloudSigmaComputeServiceContextModule
|
|||
}).to(FindImageForId.class);
|
||||
bind(new TypeLiteral<Function<String, OsFamilyVersion64Bit>>() {
|
||||
}).to(ParseOsFamilyVersion64BitFromImageName.class);
|
||||
|
||||
bind(new TypeLiteral<Supplier<Location>>() {
|
||||
}).to(OnlyLocationOrFirstZone.class);
|
||||
}
|
||||
|
||||
@Provides
|
||||
|
|
|
@ -23,6 +23,7 @@ import static org.jclouds.compute.util.ComputeServiceUtils.getCores;
|
|||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Set;
|
||||
|
||||
import org.jclouds.compute.BaseTemplateBuilderLiveTest;
|
||||
import org.jclouds.compute.domain.OsFamily;
|
||||
|
@ -31,6 +32,7 @@ import org.jclouds.compute.domain.os.OsFamilyVersion64Bit;
|
|||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -74,4 +76,9 @@ public class CloudSigmaTemplateBuilderLiveTest extends BaseTemplateBuilderLiveTe
|
|||
assertEquals(defaultTemplate.getImage().getOperatingSystem().getFamily(), OsFamily.UBUNTU);
|
||||
assertEquals(getCores(defaultTemplate.getHardware()), 1.0d);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Set<String> getIso3166Codes() {
|
||||
return ImmutableSet.<String> of("CH-ZH");
|
||||
}
|
||||
}
|
|
@ -21,6 +21,7 @@ package org.jclouds.elastichosts;
|
|||
|
||||
import static org.jclouds.Constants.PROPERTY_API_VERSION;
|
||||
import static org.jclouds.Constants.PROPERTY_ENDPOINT;
|
||||
import static org.jclouds.Constants.PROPERTY_ISO3166_CODES;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
|
@ -35,6 +36,7 @@ public class ElasticHostsBlueSquareLondonPropertiesBuilder extends ElasticStackP
|
|||
@Override
|
||||
protected Properties defaultProperties() {
|
||||
Properties properties = super.defaultProperties();
|
||||
properties.setProperty(PROPERTY_ISO3166_CODES, "GB-LND");
|
||||
properties.setProperty(PROPERTY_ENDPOINT, "https://api.lon-p.elastichosts.com");
|
||||
properties.setProperty(PROPERTY_API_VERSION, "1.0");
|
||||
return properties;
|
||||
|
|
|
@ -22,6 +22,8 @@ package org.jclouds.elastichosts.compute;
|
|||
import static org.jclouds.compute.util.ComputeServiceUtils.getCores;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.jclouds.compute.BaseTemplateBuilderLiveTest;
|
||||
import org.jclouds.compute.domain.OsFamily;
|
||||
import org.jclouds.compute.domain.Template;
|
||||
|
@ -29,6 +31,7 @@ import org.jclouds.compute.domain.os.OsFamilyVersion64Bit;
|
|||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -75,4 +78,8 @@ public class ElasticHostsBlueSquareLondonTemplateBuilderLiveTest extends BaseTem
|
|||
assertEquals(getCores(defaultTemplate.getHardware()), 1.0d);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Set<String> getIso3166Codes() {
|
||||
return ImmutableSet.<String> of("GB-LND");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ package org.jclouds.elastichosts;
|
|||
|
||||
import static org.jclouds.Constants.PROPERTY_API_VERSION;
|
||||
import static org.jclouds.Constants.PROPERTY_ENDPOINT;
|
||||
import static org.jclouds.Constants.PROPERTY_ISO3166_CODES;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
|
@ -35,6 +36,7 @@ public class ElasticHostsPeer1LondonPropertiesBuilder extends ElasticStackProper
|
|||
@Override
|
||||
protected Properties defaultProperties() {
|
||||
Properties properties = super.defaultProperties();
|
||||
properties.setProperty(PROPERTY_ISO3166_CODES, "GB-LND");
|
||||
properties.setProperty(PROPERTY_ENDPOINT, "https://api.lon-p.elastichosts.com");
|
||||
properties.setProperty(PROPERTY_API_VERSION, "1.0");
|
||||
return properties;
|
||||
|
|
|
@ -22,6 +22,8 @@ package org.jclouds.elastichosts.compute;
|
|||
import static org.jclouds.compute.util.ComputeServiceUtils.getCores;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import org.jclouds.compute.BaseTemplateBuilderLiveTest;
|
||||
import org.jclouds.compute.domain.OsFamily;
|
||||
import org.jclouds.compute.domain.Template;
|
||||
|
@ -29,6 +31,7 @@ import org.jclouds.compute.domain.os.OsFamilyVersion64Bit;
|
|||
import org.testng.annotations.Test;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
/**
|
||||
*
|
||||
|
@ -75,4 +78,8 @@ public class ElasticHostsPeer1LondonTemplateBuilderLiveTest extends BaseTemplate
|
|||
assertEquals(getCores(defaultTemplate.getHardware()), 1.0d);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Set<String> getIso3166Codes() {
|
||||
return ImmutableSet.<String> of("GB-LND");
|
||||
}
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue