Merge branch 'master' of github.com:jclouds/jclouds into 1.5.x

* 'master' of github.com:jclouds/jclouds: (50 commits)
  wrapper -> view; typo undo
  wrapper -> view
  removed freegeoip, as it hasn't worked in ages
  created base Context class with ProviderMetadata and Identity
  'uniqueVersion' is no longer supported in Maven 3
  Using the Javadoc plugin's 'aggregate-jar' goal instead of 'aggregate' for the jclouds-multi Javadoc build, so the Javadocs are actually attached and deployed
  Modify a warning message to state the problem in full right at the beginning of the message (instead of having the crucial part of the message drifting in the middle of an ocean of toString()ed objects)
  fixed aws-ec2 image parsing
  Issue 905:create openstack-swift api
  functions for regions
  base implemenation of nodepool
  Switch to calling apt-get update before every apt-get install.
  added javadoc
  functions and endpoints for vCloud Director
  bugfix for self-referential loop + test
  Add a live test for swift multipart upload.
  Remove useless comment.
  Remove deub prints and fall back to traditional upload if file is not large enough.
  Enable multipart for HPCloud.
  Use CommonSwiftClient instead of SwiftClient in multipart code.
  ...
This commit is contained in:
Adrian Cole 2012-04-23 19:40:35 -07:00
commit 00fc02736b
430 changed files with 9705 additions and 1916 deletions

View File

@ -26,9 +26,9 @@ import java.util.Set;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Project;
import org.jclouds.ContextBuilder;
import org.jclouds.compute.ComputeService;
import org.jclouds.compute.ComputeServiceContext;
import org.jclouds.compute.ComputeServiceContextFactory;
import org.jclouds.compute.domain.OsFamily;
import org.jclouds.compute.domain.Template;
import org.jclouds.compute.domain.TemplateBuilder;
@ -73,14 +73,16 @@ public class ComputeTaskUtils {
public ComputeServiceContext load(URI from) {
Properties props = new Properties();
props.putAll(projectProvider.get().getProperties());
Set<Module> modules = ImmutableSet.<Module> of(new AntLoggingModule(projectProvider.get(),
ComputeServiceConstants.COMPUTE_LOGGER), new JschSshClientModule());
// adding the properties to the factory will allow us to pass
// alternate endpoints
String provider = from.getHost();
Credentials creds = Credentials.parse(from);
return new ComputeServiceContextFactory().createContext(provider, creds.identity, creds.credential,
ImmutableSet.of((Module) new AntLoggingModule(projectProvider.get(),
ComputeServiceConstants.COMPUTE_LOGGER), new JschSshClientModule()), props);
return ContextBuilder.newBuilder(provider)
.credentials(creds.identity, creds.credential)
.modules(modules)
.overrides(props).buildView(ComputeServiceContext.class);
}
});

View File

@ -85,7 +85,7 @@ public class AtmosApiMetadata extends BaseRestApiMetadata {
.version("1.4.0")
.defaultEndpoint("https://accesspoint.atmosonline.com")
.defaultProperties(AtmosApiMetadata.defaultProperties())
.wrapper(TypeToken.of(BlobStoreContext.class))
.view(TypeToken.of(BlobStoreContext.class))
.defaultModules(ImmutableSet.<Class<? extends Module>>of(AtmosRestClientModule.class, AtmosBlobStoreContextModule.class));
}

View File

@ -19,8 +19,6 @@
package org.jclouds.atmos.filters;
import static org.jclouds.Constants.LOGGER_SIGNATURE;
import static org.jclouds.Constants.PROPERTY_CREDENTIAL;
import static org.jclouds.Constants.PROPERTY_IDENTITY;
import java.net.URI;
@ -37,6 +35,8 @@ import org.jclouds.http.HttpException;
import org.jclouds.io.InputSuppliers;
import org.jclouds.location.Provider;
import org.jclouds.logging.Logger;
import org.jclouds.rest.annotations.Credential;
import org.jclouds.rest.annotations.Identity;
import com.google.common.base.Function;
import com.google.common.base.Supplier;
@ -66,7 +66,7 @@ public class ShareUrl implements Function<String, URI> {
Logger signatureLog = Logger.NULL;
@Inject
public ShareUrl(@Named(PROPERTY_IDENTITY) String uid, @Named(PROPERTY_CREDENTIAL) String encodedKey,
public ShareUrl(@Identity String uid, @Credential String encodedKey,
@Provider Supplier<URI> provider, @TimeStamp javax.inject.Provider<Long> timeStampProvider,
javax.inject.Provider<UriBuilder> uriBuilders, Crypto crypto) {
this.uid = uid;

View File

@ -19,8 +19,6 @@
package org.jclouds.atmos.filters;
import static org.jclouds.Constants.LOGGER_SIGNATURE;
import static org.jclouds.Constants.PROPERTY_CREDENTIAL;
import static org.jclouds.Constants.PROPERTY_IDENTITY;
import static org.jclouds.util.Patterns.NEWLINE_PATTERN;
import static org.jclouds.util.Patterns.TWO_SPACE_PATTERN;
@ -46,6 +44,8 @@ import org.jclouds.http.internal.SignatureWire;
import org.jclouds.http.utils.ModifyRequest;
import org.jclouds.io.InputSuppliers;
import org.jclouds.logging.Logger;
import org.jclouds.rest.annotations.Credential;
import org.jclouds.rest.annotations.Identity;
import org.jclouds.util.Strings2;
import com.google.common.annotations.VisibleForTesting;
@ -79,8 +79,8 @@ public class SignRequest implements HttpRequestFilter {
Logger signatureLog = Logger.NULL;
@Inject
public SignRequest(SignatureWire signatureWire, @Named(PROPERTY_IDENTITY) String uid,
@Named(PROPERTY_CREDENTIAL) String encodedKey, @TimeStamp Provider<String> timeStampProvider, Crypto crypto,
public SignRequest(SignatureWire signatureWire, @Identity String uid,
@Credential String encodedKey, @TimeStamp Provider<String> timeStampProvider, Crypto crypto,
HttpUtils utils) {
this.signatureWire = signatureWire;
this.uid = uid;

View File

@ -57,7 +57,7 @@ import com.google.common.collect.Sets;
public class AtmosClientLiveTest extends BaseBlobStoreIntegrationTest {
public AtmosClient getApi() {
return context.unwrap(AtmosApiMetadata.CONTEXT_TOKEN).getApi();
return view.unwrap(AtmosApiMetadata.CONTEXT_TOKEN).getApi();
}
private static final class HeadMatches implements Runnable {

View File

@ -34,6 +34,6 @@ public class AtmosLiveTest extends BaseBlobLiveTest {
}
protected void checkMD5(String container, String name, byte[] md5) {
// atmos does not support content-md5 yet
assertEquals(context.getBlobStore().blobMetadata(container, name).getContentMetadata().getContentMD5(), null);
assertEquals(view.getBlobStore().blobMetadata(container, name).getContentMetadata().getContentMD5(), null);
}
}

View File

@ -70,7 +70,7 @@ public class BYONApiMetadata extends BaseApiMetadata {
.documentation(URI.create("https://github.com/jclouds/jclouds/tree/master/apis/byon"))
.version(String.format("%s.%s", JcloudsVersion.get().majorVersion, JcloudsVersion.get().minorVersion))
.buildVersion(JcloudsVersion.get().toString())
.wrapper(ComputeServiceContext.class)
.view(ComputeServiceContext.class)
.defaultModules(ImmutableSet.<Class<? extends Module>>of(YamlNodeStoreModule.class, BYONComputeServiceContextModule.class));
}

View File

@ -83,7 +83,7 @@ public class CloudFilesApiMetadata extends BaseRestApiMetadata {
.documentation(URI.create("http://docs.rackspacecloud.com/files/api/v1/cfdevguide_d5/content/ch01.html"))
.version(OpenStackAuthAsyncClient.VERSION)
.defaultProperties(CloudFilesApiMetadata.defaultProperties())
.wrapper(TypeToken.of(BlobStoreContext.class))
.view(TypeToken.of(BlobStoreContext.class))
.defaultModules(ImmutableSet.<Class<? extends Module>>of(CloudFilesRestClientModule.class, CloudFilesBlobStoreContextModule.class));
}

View File

@ -55,7 +55,7 @@ import com.google.common.util.concurrent.ListenableFuture;
* Provides asynchronous access to Cloud Files via their REST API.
* <p/>
* All commands return a ListenableFuture of the result from Cloud Files. Any exceptions incurred
* during processing will be wrapped in an {@link ExecutionException} as documented in
* during processing will be backend in an {@link ExecutionException} as documented in
* {@link ListenableFuture#get()}.
*
* @see CloudFilesClient

View File

@ -33,7 +33,7 @@ import org.jclouds.openstack.swift.CommonSwiftClient;
* Provides access to Cloud Files via their REST API.
* <p/>
* All commands return a Future of the result from Cloud Files. Any exceptions incurred during
* processing will be wrapped in an {@link ExecutionException} as documented in {@link Future#get()}.
* processing will be backend in an {@link ExecutionException} as documented in {@link Future#get()}.
*
* @see <a href="http://www.rackspacecloud.com/cf-devguide-20090812.pdf" />
* @author Adrian Cole

View File

@ -49,6 +49,7 @@ import org.jclouds.openstack.swift.blobstore.functions.ObjectToBlobMetadata;
import com.google.common.base.Function;
import com.google.common.base.Supplier;
import com.google.common.util.concurrent.ListenableFuture;
import org.jclouds.openstack.swift.blobstore.strategy.internal.AsyncMultipartUploadStrategy;
/**
*
@ -66,10 +67,11 @@ public class CloudFilesAsyncBlobStore extends SwiftAsyncBlobStore {
BlobStoreListContainerOptionsToListContainerOptions container2ContainerListOptions,
ContainerToResourceList container2ResourceList, ObjectToBlob object2Blob, BlobToObject blob2Object,
ObjectToBlobMetadata object2BlobMd, BlobToHttpGetOptions blob2ObjectGetOptions,
Provider<FetchBlobMetadata> fetchBlobMetadataProvider, EnableCDNAndCache enableCDNAndCache) {
Provider<FetchBlobMetadata> fetchBlobMetadataProvider, EnableCDNAndCache enableCDNAndCache,
Provider<AsyncMultipartUploadStrategy> multipartUploadStrategy) {
super(context, blobUtils, service, defaultLocation, locations, sync, async, container2ResourceMd,
container2ContainerListOptions, container2ResourceList, object2Blob, blob2Object, object2BlobMd,
blob2ObjectGetOptions, fetchBlobMetadataProvider);
blob2ObjectGetOptions, fetchBlobMetadataProvider, multipartUploadStrategy);
this.enableCDNAndCache = enableCDNAndCache;
}

View File

@ -42,6 +42,7 @@ import org.jclouds.openstack.swift.blobstore.functions.ObjectToBlob;
import org.jclouds.openstack.swift.blobstore.functions.ObjectToBlobMetadata;
import com.google.common.base.Supplier;
import org.jclouds.openstack.swift.blobstore.strategy.internal.MultipartUploadStrategy;
/**
*
@ -59,10 +60,11 @@ public class CloudFilesBlobStore extends SwiftBlobStore {
BlobStoreListContainerOptionsToListContainerOptions container2ContainerListOptions,
ContainerToResourceList container2ResourceList, ObjectToBlob object2Blob, BlobToObject blob2Object,
ObjectToBlobMetadata object2BlobMd, BlobToHttpGetOptions blob2ObjectGetOptions,
Provider<FetchBlobMetadata> fetchBlobMetadataProvider, EnableCDNAndCache enableCDNAndCache) {
Provider<FetchBlobMetadata> fetchBlobMetadataProvider, EnableCDNAndCache enableCDNAndCache,
Provider<MultipartUploadStrategy> multipartUploadStrategy) {
super(context, blobUtils, defaultLocation, locations, sync, container2ResourceMd, container2ContainerListOptions,
container2ResourceList, object2Blob, blob2Object, object2BlobMd, blob2ObjectGetOptions,
fetchBlobMetadataProvider);
fetchBlobMetadataProvider, multipartUploadStrategy);
this.enableCDNAndCache = enableCDNAndCache;
}

View File

@ -47,7 +47,7 @@ public class CloudFilesClientLiveTest extends CommonSwiftClientLiveTest<CloudFil
@Override
public CloudFilesClient getApi() {
return context.unwrap(CloudFilesApiMetadata.CONTEXT_TOKEN).getApi();
return view.unwrap(CloudFilesApiMetadata.CONTEXT_TOKEN).getApi();
}
@Override

View File

@ -78,7 +78,7 @@ public class CloudLoadBalancersApiMetadata extends BaseRestApiMetadata {
.version(OpenStackAuthAsyncClient.VERSION)
.defaultEndpoint("https://auth.api.rackspacecloud.com")
.defaultProperties(CloudLoadBalancersApiMetadata.defaultProperties())
.wrapper(TypeToken.of(LoadBalancerServiceContext.class))
.view(TypeToken.of(LoadBalancerServiceContext.class))
.defaultModules(ImmutableSet.<Class<? extends Module>>of(CloudLoadBalancersRestClientModule.class, CloudLoadBalancersLoadBalancerContextModule.class));
}

View File

@ -77,6 +77,7 @@ public abstract class BaseCloudLoadBalancersAsyncClientTest<T> extends BaseAsync
protected void configure() {
}
@SuppressWarnings("unused")
@Provides
@Singleton
GetAuth provideGetAuth() {

View File

@ -20,7 +20,7 @@ package org.jclouds.cloudloadbalancers.internal;
import java.util.concurrent.TimeUnit;
import org.jclouds.apis.BaseContextLiveTest;
import org.jclouds.apis.BaseViewLiveTest;
import org.jclouds.cloudloadbalancers.CloudLoadBalancersAsyncClient;
import org.jclouds.cloudloadbalancers.CloudLoadBalancersClient;
import org.jclouds.cloudloadbalancers.domain.LoadBalancer;
@ -42,7 +42,7 @@ import com.google.inject.Injector;
*
* @author Adrian Cole
*/
public class BaseCloudLoadBalancersClientLiveTest extends BaseContextLiveTest<LoadBalancerServiceContext> {
public class BaseCloudLoadBalancersClientLiveTest extends BaseViewLiveTest<LoadBalancerServiceContext> {
public BaseCloudLoadBalancersClientLiveTest() {
provider = "cloudloadbalancers";
@ -61,7 +61,7 @@ public class BaseCloudLoadBalancersClientLiveTest extends BaseContextLiveTest<Lo
@Override
public void setupContext() {
super.setupContext();
lbContext = context.unwrap();
lbContext = view.unwrap();
client = lbContext.getApi();
@ -75,7 +75,7 @@ public class BaseCloudLoadBalancersClientLiveTest extends BaseContextLiveTest<Lo
}
@Override
protected TypeToken<LoadBalancerServiceContext> contextType() {
protected TypeToken<LoadBalancerServiceContext> viewType() {
return TypeToken.of(LoadBalancerServiceContext.class);
}

View File

@ -77,7 +77,7 @@ public class CloudServersApiMetadata extends BaseRestApiMetadata {
.version(OpenStackAuthAsyncClient.VERSION)
.defaultEndpoint("https://auth.api.rackspacecloud.com")
.defaultProperties(CloudServersApiMetadata.defaultProperties())
.wrapper(TypeToken.of(ComputeServiceContext.class))
.view(TypeToken.of(ComputeServiceContext.class))
.defaultModules(ImmutableSet.<Class<? extends Module>>of(CloudServersRestClientModule.class, CloudServersComputeServiceContextModule.class));
}

View File

@ -69,7 +69,7 @@ import com.google.common.util.concurrent.ListenableFuture;
* Provides asynchronous access to Cloud Servers via their REST API.
* <p/>
* All commands return a ListenableFuture of the result from Cloud Servers. Any exceptions incurred
* during processing will be wrapped in an {@link ExecutionException} as documented in
* during processing will be backend in an {@link ExecutionException} as documented in
* {@link ListenableFuture#get()}.
*
* @see CloudServersClient

View File

@ -44,7 +44,7 @@ import org.jclouds.rest.ResourceNotFoundException;
* Provides access to Cloud Servers via their REST API.
* <p/>
* All commands return a Future of the result from Cloud Servers. Any exceptions incurred during
* processing will be wrapped in an {@link ExecutionException} as documented in {@link Future#get()}.
* processing will be backend in an {@link ExecutionException} as documented in {@link Future#get()}.
*
* @see CloudServersAsyncClient
* @see <a href="http://docs.rackspacecloud.com/servers/api/cs-devguide-latest.pdf" />

View File

@ -85,7 +85,7 @@ public class CloudServersClientLiveTest extends BaseComputeServiceContextLiveTes
@Override
public void setupContext() {
super.setupContext();
Injector injector = context.utils().injector();
Injector injector = view.utils().injector();
client = injector.getInstance(CloudServersClient.class);
sshFactory = injector.getInstance(SshClient.Factory.class);
SocketOpen socketOpen = injector.getInstance(SocketOpen.class);

View File

@ -82,7 +82,7 @@ public class CloudSigmaApiMetadata extends BaseRestApiMetadata {
.version("1.0")
.defaultEndpoint("https://api.cloudsigma.com")
.defaultProperties(CloudSigmaApiMetadata.defaultProperties())
.wrapper(TypeToken.of(ComputeServiceContext.class))
.view(TypeToken.of(ComputeServiceContext.class))
.defaultModules(ImmutableSet.<Class<? extends Module>>of(CloudSigmaRestClientModule.class, CloudSigmaComputeServiceContextModule.class));
}

View File

@ -89,7 +89,7 @@ public class CloudSigmaClientLiveTest extends BaseComputeServiceContextLiveTest
@Override
public void setupContext() {
super.setupContext();
cloudSigmaContext = context.unwrap();
cloudSigmaContext = view.unwrap();
client = cloudSigmaContext.getApi();
driveNotClaimed = new RetryablePredicate<DriveInfo>(Predicates.not(new DriveClaimed(client)), maxDriveImageTime,
@ -98,7 +98,7 @@ public class CloudSigmaClientLiveTest extends BaseComputeServiceContextLiveTest
TimeUnit.SECONDS);
if (Strings.emptyToNull(imageId) == null) {
imageId = context.getComputeService().templateBuilder().build().getImage().getId();
imageId = view.getComputeService().templateBuilder().build().getImage().getId();
}
}

View File

@ -89,7 +89,7 @@ public class CloudStackApiMetadata extends BaseRestApiMetadata {
.documentation(URI.create("http://download.cloud.com/releases/2.2.0/api_2.2.12/TOC_User.html"))
.defaultEndpoint("http://localhost:8080/client/api")
.version("2.2")
.wrapper(TypeToken.of(CloudStackContext.class))
.view(TypeToken.of(CloudStackContext.class))
.defaultProperties(CloudStackApiMetadata.defaultProperties())
.defaultModules(ImmutableSet.<Class<? extends Module>>of(CloudStackRestClientModule.class, CloudStackComputeServiceContextModule.class));
}

View File

@ -72,14 +72,14 @@ public class TemplateToOperatingSystem implements Function<Template, OperatingSy
OSType type = osTypes.get().get(from.getOSTypeId());
if (type == null) {
logger.warn("type for template %s not found in %s", from, osTypes.get());
logger.warn("Template refers to OS type ID %s but this does not exist. Template=%s Known OS types=%s", from.getOSTypeId(), from, osTypes.get());
return builder.build();
}
builder.description(type.getDescription());
builder.is64Bit(type.getDescription().indexOf("64-bit") != -1);
String osCategory = osCategories.get().get(type.getOSCategoryId());
if (osCategory == null) {
logger.warn("category for OSType %s not found in %s", type, osCategories.get());
logger.warn("OS type refers to OS category ID %s but this does not exist. OS type=%s Known OS categories=%s", type.getOSCategoryId(), type, osCategories.get());
return builder.build();
}
builder.name(osCategory);

View File

@ -40,6 +40,8 @@ import org.jclouds.http.utils.ModifyRequest;
import org.jclouds.io.InputSuppliers;
import org.jclouds.logging.Logger;
import org.jclouds.rest.RequestSigner;
import org.jclouds.rest.annotations.Credential;
import org.jclouds.rest.annotations.Identity;
import org.jclouds.util.Strings2;
import com.google.common.annotations.VisibleForTesting;
@ -71,9 +73,8 @@ public class QuerySigner implements AuthenticationFilter, RequestSigner {
private Logger signatureLog = Logger.NULL;
@Inject
public QuerySigner(SignatureWire signatureWire, @Named(Constants.PROPERTY_IDENTITY) String accessKey,
@Named(Constants.PROPERTY_CREDENTIAL) String secretKey, Crypto crypto, HttpUtils utils,
Provider<UriBuilder> builder) {
public QuerySigner(SignatureWire signatureWire, @Identity String accessKey, @Credential String secretKey,
Crypto crypto, HttpUtils utils, Provider<UriBuilder> builder) {
this.signatureWire = signatureWire;
this.accessKey = accessKey;
this.secretKey = secretKey;

View File

@ -46,10 +46,10 @@ public class ParseAsyncJobsFromHttpResponse implements Function<HttpResponse, Se
private final ParseTypedAsyncJob parseTyped;
@Inject
public ParseAsyncJobsFromHttpResponse(ParseTypedAsyncJob parseTyped, GsonWrapper gsonWrapper) {
public ParseAsyncJobsFromHttpResponse(ParseTypedAsyncJob parseTyped, GsonWrapper gsonView) {
this.parseTyped = checkNotNull(parseTyped, "parseTyped");
this.parser = new ParseFirstJsonValueNamed<Set<AsyncJob<Map<String, JsonBall>>>>(
checkNotNull(gsonWrapper, "gsonWrapper"),
checkNotNull(gsonView, "gsonView"),
new TypeLiteral<Set<AsyncJob<Map<String, JsonBall>>>>() { },
"asyncjobs");
}

View File

@ -54,8 +54,8 @@ public class ParseEventTypesFromHttpResponse implements Function<HttpResponse, S
}
@Inject
public ParseEventTypesFromHttpResponse(GsonWrapper gsonWrapper) {
this.parser = new ParseFirstJsonValueNamed<Set<EventType>>(checkNotNull(gsonWrapper, "gsonWrapper"),
public ParseEventTypesFromHttpResponse(GsonWrapper gsonView) {
this.parser = new ParseFirstJsonValueNamed<Set<EventType>>(checkNotNull(gsonView, "gsonView"),
new TypeLiteral<Set<EventType>>() {
}, "eventtype");
}

View File

@ -78,8 +78,8 @@ public class ParseIdToNameFromHttpResponse implements Function<HttpResponse, Map
}
@Inject
public ParseIdToNameFromHttpResponse(GsonWrapper gsonWrapper) {
this.parser = new ParseFirstJsonValueNamed<Set<IdName>>(checkNotNull(gsonWrapper, "gsonWrapper"),
public ParseIdToNameFromHttpResponse(GsonWrapper gsonView) {
this.parser = new ParseFirstJsonValueNamed<Set<IdName>>(checkNotNull(gsonView, "gsonView"),
new TypeLiteral<Set<IdName>>() {
}, "oscategory");
}

View File

@ -23,7 +23,7 @@ public class ParseLoginResponseFromHttpResponse implements Function<HttpResponse
@Inject
ParseLoginResponseFromHttpResponse(GsonWrapper gson) {
this.parser = new ParseFirstJsonValueNamed<LoginResponse>(checkNotNull(gson, "gsonWrapper"),
this.parser = new ParseFirstJsonValueNamed<LoginResponse>(checkNotNull(gson, "gsonView"),
new TypeLiteral<LoginResponse>(){}, "loginresponse");
}

View File

@ -73,8 +73,8 @@ public class ParseNamesFromHttpResponse implements Function<HttpResponse, Set<St
}
@Inject
public ParseNamesFromHttpResponse(GsonWrapper gsonWrapper) {
this.parser = new ParseFirstJsonValueNamed<Set<Name>>(checkNotNull(gsonWrapper, "gsonWrapper"),
public ParseNamesFromHttpResponse(GsonWrapper gsonView) {
this.parser = new ParseFirstJsonValueNamed<Set<Name>>(checkNotNull(gsonView, "gsonView"),
new TypeLiteral<Set<Name>>() {
}, "hypervisor");
}

View File

@ -18,12 +18,10 @@
*/
package org.jclouds.cloudstack.internal;
import java.io.Closeable;
import java.util.Map;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.jclouds.Context;
import org.jclouds.cloudstack.CloudStackAsyncClient;
import org.jclouds.cloudstack.CloudStackClient;
import org.jclouds.cloudstack.CloudStackContext;
@ -34,7 +32,6 @@ import org.jclouds.cloudstack.CloudStackGlobalClient;
import org.jclouds.compute.ComputeService;
import org.jclouds.compute.Utils;
import org.jclouds.compute.internal.ComputeServiceContextImpl;
import org.jclouds.domain.Credentials;
import org.jclouds.location.Provider;
import org.jclouds.rest.RestContext;
@ -49,11 +46,11 @@ public class CloudStackContextImpl extends ComputeServiceContextImpl implements
private final RestContext<CloudStackGlobalClient, CloudStackGlobalAsyncClient> globalContext;
@Inject
public CloudStackContextImpl(@Provider Closeable wrapped, @Provider TypeToken<? extends Closeable> wrappedType,
ComputeService computeService, Map<String, Credentials> credentialStore, Utils utils,
public CloudStackContextImpl(@Provider Context backend, @Provider TypeToken<? extends Context> backendType,
ComputeService computeService, Utils utils,
RestContext<CloudStackDomainClient, CloudStackDomainAsyncClient> domainContext,
RestContext<CloudStackGlobalClient, CloudStackGlobalAsyncClient> globalContext) {
super(wrapped, wrappedType, computeService, credentialStore, utils);
super(backend, backendType, computeService, utils);
this.domainContext = domainContext;
this.globalContext = globalContext;
}

View File

@ -157,7 +157,7 @@ public class CloudStackComputeServiceAdapterLiveTest extends BaseCloudStackClien
public void testCreateNodeWithGroupEncodedIntoName() throws InterruptedException {
String group = prefix + "-foo";
String name = group + "-node-" + new Random().nextInt();
Template template = context.getComputeService().templateBuilder().build();
Template template = view.getComputeService().templateBuilder().build();
if (!client
.getTemplateClient()

View File

@ -90,9 +90,9 @@ public class CloudStackExperimentLiveTest extends BaseCloudStackClientLiveTest {
Network network = null;
Set<? extends NodeMetadata> nodes = null;
try {
assert context.getComputeService().listAssignableLocations().size() > 0;
assert view.getComputeService().listAssignableLocations().size() > 0;
Template template = context.getComputeService().templateBuilder().build();
Template template = view.getComputeService().templateBuilder().build();
// get the zone we are launching into
long zoneId = Long.parseLong(template.getLocation().getId());
@ -115,7 +115,7 @@ public class CloudStackExperimentLiveTest extends BaseCloudStackClientLiveTest {
template.getOptions().as(CloudStackTemplateOptions.class).networkId(network.getId());
// launch the VM
nodes = context.getComputeService().createNodesInGroup(group, 1, template);
nodes = view.getComputeService().createNodesInGroup(group, 1, template);
assert nodes.size() > 0;
@ -124,7 +124,7 @@ public class CloudStackExperimentLiveTest extends BaseCloudStackClientLiveTest {
nodes = newTreeSet(concat(e.getSuccessfulNodes(), e.getNodeErrors().keySet()));
} finally {
if (nodes != null)
context.getComputeService().destroyNodesMatching(NodePredicates.inGroup(group));
view.getComputeService().destroyNodesMatching(NodePredicates.inGroup(group));
if (network != null)
domainAdminContext.getApi().getNetworkClient().deleteNetwork(network.getId());
}
@ -143,14 +143,14 @@ public class CloudStackExperimentLiveTest extends BaseCloudStackClientLiveTest {
SshKeyPair keyPair = client.getSSHKeyPairClient().createSSHKeyPair(keyPairName);
String group = prefix + "-windows-test";
Template template = context.getComputeService().templateBuilder()
Template template = view.getComputeService().templateBuilder()
.imageId("290").locationId("1")
.options(new CloudStackTemplateOptions().setupStaticNat(false).keyPair(keyPairName))
.build();
NodeMetadata node = null;
try {
node = getOnlyElement(context.getComputeService()
node = getOnlyElement(view.getComputeService()
.createNodesInGroup(group, 1, template));
String encryptedPassword = client.getVirtualMachineClient()
@ -165,7 +165,7 @@ public class CloudStackExperimentLiveTest extends BaseCloudStackClientLiveTest {
} finally {
if (node != null) {
context.getComputeService().destroyNode(node.getId());
view.getComputeService().destroyNode(node.getId());
}
}

View File

@ -51,7 +51,7 @@ import org.jclouds.cloudstack.predicates.VirtualMachineRunning;
import org.jclouds.cloudstack.strategy.BlockUntilJobCompletesAndReturnResult;
import org.jclouds.compute.ComputeService;
import org.jclouds.compute.domain.ExecResponse;
import org.jclouds.compute.internal.BaseComputeServiceContextLiveTest;
import org.jclouds.compute.internal.BaseGenericComputeServiceContextLiveTest;
import org.jclouds.net.IPSocket;
import org.jclouds.predicates.InetSocketAddressConnect;
import org.jclouds.predicates.RetryablePredicate;
@ -65,6 +65,7 @@ import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.google.common.reflect.TypeToken;
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Module;
@ -73,7 +74,7 @@ import com.google.inject.Module;
*
* @author Adrian Cole
*/
public class BaseCloudStackClientLiveTest extends BaseComputeServiceContextLiveTest {
public class BaseCloudStackClientLiveTest extends BaseGenericComputeServiceContextLiveTest<CloudStackContext> {
protected String domainAdminIdentity;
protected String domainAdminCredential;
protected String globalAdminIdentity;
@ -82,7 +83,12 @@ public class BaseCloudStackClientLiveTest extends BaseComputeServiceContextLiveT
public BaseCloudStackClientLiveTest() {
provider = "cloudstack";
}
@Override
protected TypeToken<CloudStackContext> viewType() {
return TypeToken.of(CloudStackContext.class);
}
@Override
protected Properties setupProperties() {
Properties overrides = super.setupProperties();
@ -193,14 +199,14 @@ public class BaseCloudStackClientLiveTest extends BaseComputeServiceContextLiveT
@Override
public void setupContext() {
super.setupContext();
computeClient = context.getComputeService();
cloudStackContext = context.unwrap();
computeClient = view.getComputeService();
cloudStackContext = view.unwrap();
client = cloudStackContext.getApi();
user = verifyCurrentUserIsOfType(cloudStackContext, Account.Type.USER);
domainAdminEnabled = setupDomainAdminProperties() != null;
if (domainAdminEnabled) {
domainAdminComputeContext = createContext(setupDomainAdminProperties(), setupModules()).unwrap();
domainAdminComputeContext = createView(setupDomainAdminProperties(), setupModules());
domainAdminContext = domainAdminComputeContext.getDomainContext();
domainAdminClient = domainAdminContext.getApi();
domainAdminUser = verifyCurrentUserIsOfType(domainAdminContext, Account.Type.DOMAIN_ADMIN);
@ -209,7 +215,7 @@ public class BaseCloudStackClientLiveTest extends BaseComputeServiceContextLiveT
globalAdminEnabled = setupGlobalAdminProperties() != null;
if (globalAdminEnabled) {
globalAdminComputeContext = createContext(setupGlobalAdminProperties(), setupModules()).unwrap();
globalAdminComputeContext = createView(setupGlobalAdminProperties(), setupModules());
globalAdminContext = globalAdminComputeContext.getGlobalContext();
globalAdminClient = globalAdminContext.getApi();
globalAdminUser = verifyCurrentUserIsOfType(globalAdminContext, Account.Type.ADMIN);

View File

@ -27,6 +27,7 @@ import static org.testng.Assert.assertNotNull;
import java.util.Properties;
import java.util.Set;
import org.jclouds.cloudstack.CloudStackApiMetadata;
import org.jclouds.cloudstack.CloudStackClient;
import org.jclouds.cloudstack.CloudStackGlobalClient;
import org.jclouds.cloudstack.domain.Account;
@ -83,9 +84,9 @@ public class GlobalUserClientLiveTest extends BaseCloudStackClientLiveTest {
}
private void checkAuthAsUser(ApiKeyPair keyPair) {
ComputeServiceContext context = createContext(credentialsAsProperties(keyPair), setupModules());
ComputeServiceContext context = createView(credentialsAsProperties(keyPair), setupModules());
CloudStackClient client = CloudStackClient.class.cast(context.getProviderSpecificContext().getApi());
CloudStackClient client = context.unwrap(CloudStackApiMetadata.CONTEXT_TOKEN).getApi();
Set<Account> accounts = client.getAccountClient().listAccounts();
assert accounts.size() > 0;

View File

@ -66,7 +66,8 @@ public class OfferingClientLiveTest extends BaseCloudStackClientLiveTest {
} catch (NoSuchElementException e) {
// This bug is present both in 2.2.8 and 2.2.12
assertTrue(Predicates.in(ImmutableSet.of("2.2.8", "2.2.12")).apply(cloudStackContext.getApiVersion()));
assertTrue(Predicates.in(ImmutableSet.of("2.2.8", "2.2.12")).apply(
cloudStackContext.getProviderMetadata().getApiMetadata().getVersion()));
}
}
}

View File

@ -44,7 +44,7 @@ public class SessionClientLiveTest extends BaseCloudStackClientLiveTest {
@Test
public void testCreateContextUsingUserAndPasswordAuthentication() {
String endpoint = cloudStackContext.getEndpoint().toASCIIString();
String endpoint = cloudStackContext.getProviderMetadata().getEndpoint();
assert globalAdminEnabled;
Account testAccount = null;
@ -75,7 +75,7 @@ public class SessionClientLiveTest extends BaseCloudStackClientLiveTest {
@Test(expectedExceptions = AuthorizationException.class)
public void testTryToGetApiKeypairWithWrongCredentials() {
String endpoint = cloudStackContext.getEndpoint().toASCIIString();
String endpoint = cloudStackContext.getProviderMetadata().getEndpoint();
ApiKeyPairs.loginToEndpointAsUsernameInDomainWithPasswordAndReturnApiKeyPair(
URI.create(endpoint), "dummy-missing-user", "with-a-wrong-password", "");
}

View File

@ -18,7 +18,7 @@
*/
package org.jclouds.cloudwatch;
import org.jclouds.Wrapper;
import org.jclouds.View;
import org.jclouds.rest.internal.BaseRestApiMetadataTest;
import org.testng.annotations.Test;
@ -34,6 +34,6 @@ public class CloudWatchApiMetadataTest extends BaseRestApiMetadataTest {
// no monitoring abstraction, yet
public CloudWatchApiMetadataTest() {
super(new CloudWatchApiMetadata(), ImmutableSet.<TypeToken<? extends Wrapper>> of());
super(new CloudWatchApiMetadata(), ImmutableSet.<TypeToken<? extends View>> of());
}
}

View File

@ -75,7 +75,7 @@ public class DeltacloudApiMetadata extends BaseRestApiMetadata {
.version("0.3.0")
.defaultEndpoint("http://localhost:3001/api")
.defaultProperties(DeltacloudApiMetadata.defaultProperties())
.wrapper(TypeToken.of(ComputeServiceContext.class))
.view(TypeToken.of(ComputeServiceContext.class))
.defaultModules(ImmutableSet.<Class<? extends Module>>of(DeltacloudRestClientModule.class, DeltacloudComputeServiceContextModule.class));
}

View File

@ -71,7 +71,7 @@ public class ReadOnlyDeltacloudClientLiveTest extends BaseComputeServiceContextL
@BeforeClass(groups = { "integration", "live" })
public void setupContext() {
super.setupContext();
client = context.unwrap(DeltacloudApiMetadata.CONTEXT_TOKEN).getApi();
client = view.unwrap(DeltacloudApiMetadata.CONTEXT_TOKEN).getApi();
socketTester = new RetryablePredicate<IPSocket>(new InetSocketAddressConnect(), 180, 1, TimeUnit.SECONDS);
stateChanges = ImmutableMap.<Instance.State, Predicate<Instance>> of(//
Instance.State.RUNNING, new RetryablePredicate<Instance>(new InstanceRunning(client), 600, 1,

View File

@ -70,7 +70,7 @@ public class DeltacloudTemplateBuilderLiveTest extends BaseTemplateBuilderLiveTe
@Test
public void testTemplateBuilder() {
Template defaultTemplate = this.context.getComputeService().templateBuilder().build();
Template defaultTemplate = this.view.getComputeService().templateBuilder().build();
assertEquals(defaultTemplate.getImage().getOperatingSystem().is64Bit(), true);
assertEquals(defaultTemplate.getImage().getOperatingSystem().getVersion(), "10.04");
assertEquals(defaultTemplate.getImage().getOperatingSystem().getFamily(), OsFamily.UBUNTU);

View File

@ -104,7 +104,7 @@ public class EC2ApiMetadata extends BaseRestApiMetadata {
.version(EC2AsyncClient.VERSION)
.defaultProperties(EC2ApiMetadata.defaultProperties())
.context(CONTEXT_TOKEN)
.wrapper(EC2ComputeServiceContext.class)
.view(EC2ComputeServiceContext.class)
.defaultModules(ImmutableSet.<Class<? extends Module>>of(EC2RestClientModule.class, EC2ResolveImagesModule.class, EC2ComputeServiceContextModule.class));
}

View File

@ -72,7 +72,7 @@ public class EC2ComputeServiceContextModule extends BaseComputeServiceContextMod
}
@Override
protected boolean shouldParseImagesOnDemand(Injector injector) {
protected boolean shouldEagerlyParseImages(Injector injector) {
// If no owners to query, then will never lookup all images
String[] amiOwners = injector.getInstance(Key.get(String[].class, Names.named(PROPERTY_EC2_AMI_OWNERS)));
return (amiOwners.length > 0);

View File

@ -18,15 +18,12 @@
*/
package org.jclouds.ec2.compute.internal;
import java.io.Closeable;
import java.util.Map;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.jclouds.Context;
import org.jclouds.compute.Utils;
import org.jclouds.compute.internal.ComputeServiceContextImpl;
import org.jclouds.domain.Credentials;
import org.jclouds.ec2.compute.EC2ComputeService;
import org.jclouds.ec2.compute.EC2ComputeServiceContext;
import org.jclouds.location.Provider;
@ -39,9 +36,9 @@ import com.google.common.reflect.TypeToken;
@Singleton
public class EC2ComputeServiceContextImpl extends ComputeServiceContextImpl implements EC2ComputeServiceContext {
@Inject
public EC2ComputeServiceContextImpl(@Provider Closeable wrapped, @Provider TypeToken<? extends Closeable> wrappedType,
EC2ComputeService computeService, Map<String, Credentials> credentialStore, Utils utils){
super(wrapped, wrappedType, computeService, credentialStore, utils);
public EC2ComputeServiceContextImpl(@Provider Context backend, @Provider TypeToken<? extends Context> backendType,
EC2ComputeService computeService, Utils utils) {
super(backend, backendType, computeService, utils);
}
@Override

View File

@ -20,11 +20,9 @@ package org.jclouds.ec2.options;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
import static org.jclouds.Constants.PROPERTY_IDENTITY;
import javax.inject.Named;
import org.jclouds.ec2.options.internal.BaseEC2RequestOptions;
import org.jclouds.rest.annotations.Identity;
import com.google.common.collect.Multimap;
import com.google.inject.Inject;
@ -52,7 +50,7 @@ import com.google.inject.Inject;
public class BundleInstanceS3StorageOptions extends BaseEC2RequestOptions {
@Inject(optional = true)
@Named(PROPERTY_IDENTITY)
@Identity
String currentAwsAccessKeyId;
@Override

View File

@ -95,7 +95,7 @@ public class CloudApplicationArchitecturesEC2ClientLiveTest extends BaseComputeS
@BeforeClass(groups = { "integration", "live" })
public void setupContext() {
super.setupContext();
Injector injector = context.utils().injector();
Injector injector = view.utils().injector();
client = injector.getInstance(EC2Client.class);
sshFactory = injector.getInstance(SshClient.Factory.class);
runningTester = new RetryablePredicate<RunningInstance>(new InstanceStateRunning(client), 180, 5,

View File

@ -126,7 +126,7 @@ public class EBSBootEC2ClientLiveTest extends BaseComputeServiceContextLiveTest
@BeforeClass(groups = { "integration", "live" })
public void setupContext() {
super.setupContext();
Injector injector = context.utils().injector();
Injector injector = view.utils().injector();
client = injector.getInstance(EC2Client.class);
sshFactory = injector.getInstance(SshClient.Factory.class);
SocketOpen socketOpen = injector.getInstance(SocketOpen.class);

View File

@ -102,13 +102,13 @@ public class EC2ComputeServiceLiveTest extends BaseComputeServiceLiveTest {
@Test(enabled = true, dependsOnMethods = "testCompareSizes")
public void testExtendedOptionsAndLogin() throws Exception {
SecurityGroupClient securityGroupClient = EC2Client.class.cast(context.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi())
SecurityGroupClient securityGroupClient = EC2Client.class.cast(view.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi())
.getSecurityGroupServices();
KeyPairClient keyPairClient = EC2Client.class.cast(context.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi())
KeyPairClient keyPairClient = EC2Client.class.cast(view.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi())
.getKeyPairServices();
InstanceClient instanceClient = EC2Client.class.cast(context.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi())
InstanceClient instanceClient = EC2Client.class.cast(view.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi())
.getInstanceServices();
String group = this.group + "o";
@ -181,7 +181,7 @@ public class EC2ComputeServiceLiveTest extends BaseComputeServiceLiveTest {
Properties overrides = setupProperties();
overrides.setProperty(EC2Constants.PROPERTY_EC2_AUTO_ALLOCATE_ELASTIC_IPS, "true");
context = createContext(overrides, setupModules());
context = createView(overrides, setupModules());
// create a node
Set<? extends NodeMetadata> nodes =
@ -233,19 +233,19 @@ public class EC2ComputeServiceLiveTest extends BaseComputeServiceLiveTest {
@Test(enabled = true)
public void testMapEBS() throws Exception {
InstanceClient instanceClient = EC2Client.class.cast(context.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi())
InstanceClient instanceClient = EC2Client.class.cast(view.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi())
.getInstanceServices();
ElasticBlockStoreClient ebsClient = EC2Client.class.cast(context.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi())
ElasticBlockStoreClient ebsClient = EC2Client.class.cast(view.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi())
.getElasticBlockStoreServices();
String group = this.group + "e";
int volumeSize = 8;
final Template template = context.getComputeService().templateBuilder().hardwareId(InstanceType.M1_SMALL)
final Template template = view.getComputeService().templateBuilder().hardwareId(InstanceType.M1_SMALL)
.osFamily(OsFamily.UBUNTU).osVersionMatches("10.04").imageDescriptionMatches(".*ebs.*").build();
Location zone = Iterables.find(context.getComputeService().listAssignableLocations(), new Predicate<Location>() {
Location zone = Iterables.find(view.getComputeService().listAssignableLocations(), new Predicate<Location>() {
@Override
public boolean apply(Location arg0) {

View File

@ -50,7 +50,7 @@ public abstract class EC2TemplateBuilderLiveTest extends BaseTemplateBuilderLive
@Test
public void testTemplateBuilderCanUseImageIdWithoutFetchingAllImages() throws Exception {
Template defaultTemplate = context.getComputeService().templateBuilder().build();
Template defaultTemplate = view.getComputeService().templateBuilder().build();
String defaultImageId = defaultTemplate.getImage().getId();
String defaultImageProviderId = defaultTemplate.getImage().getProviderId();
@ -58,7 +58,7 @@ public abstract class EC2TemplateBuilderLiveTest extends BaseTemplateBuilderLive
try {
// Track http commands
final List<HttpCommand> commandsInvoked = Lists.newArrayList();
context = createContext(
context = createView(
setupProperties(),
ImmutableSet.<Module> of(new Log4JLoggingModule(),
TrackingJavaUrlHttpCommandExecutorService.newTrackingModule(commandsInvoked)));

View File

@ -39,18 +39,18 @@ public class TestCanRecreateGroupLiveTest extends BaseComputeServiceContextLiveT
public void testCanRecreateGroup() throws Exception {
String tag = PREFIX + "recreate";
context.getComputeService().destroyNodesMatching(NodePredicates.inGroup(tag));
view.getComputeService().destroyNodesMatching(NodePredicates.inGroup(tag));
try {
Template template = context.getComputeService().templateBuilder().build();
context.getComputeService().createNodesInGroup(tag, 1, template);
context.getComputeService().destroyNodesMatching(NodePredicates.inGroup(tag));
context.getComputeService().createNodesInGroup(tag, 1, template);
Template template = view.getComputeService().templateBuilder().build();
view.getComputeService().createNodesInGroup(tag, 1, template);
view.getComputeService().destroyNodesMatching(NodePredicates.inGroup(tag));
view.getComputeService().createNodesInGroup(tag, 1, template);
} catch (RunNodesException e) {
System.err.println(e.getNodeErrors().keySet());
Throwables.propagate(e);
} finally {
context.getComputeService().destroyNodesMatching(NodePredicates.inGroup(tag));
view.getComputeService().destroyNodesMatching(NodePredicates.inGroup(tag));
}
}

View File

@ -56,7 +56,7 @@ public class AvailabilityZoneAndRegionClientLiveTest extends BaseComputeServiceC
@BeforeClass(groups = { "integration", "live" })
public void setupContext() {
super.setupContext();
client = context.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi().getAvailabilityZoneAndRegionServices();
client = view.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi().getAvailabilityZoneAndRegionServices();
}
public void testDescribeAvailabilityZones() {

View File

@ -61,12 +61,12 @@ public class ElasticBlockStoreClientLiveTest extends BaseComputeServiceContextLi
@BeforeClass(groups = { "integration", "live" })
public void setupContext() {
super.setupContext();
client = context.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi().getElasticBlockStoreServices();
client = view.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi().getElasticBlockStoreServices();
}
@Test
void testDescribeVolumes() {
for (String region : context.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi().getAvailabilityZoneAndRegionServices().describeRegions().keySet()) {
for (String region : view.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi().getAvailabilityZoneAndRegionServices().describeRegions().keySet()) {
SortedSet<Volume> allResults = Sets.newTreeSet(client.describeVolumesInRegion(region));
assertNotNull(allResults);
if (allResults.size() >= 1) {

View File

@ -50,7 +50,7 @@ public class ElasticIPAddressClientLiveTest extends BaseComputeServiceContextLiv
@BeforeClass(groups = { "integration", "live" })
public void setupContext() {
super.setupContext();
client = context.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi().getElasticIPAddressServices();
client = view.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi().getElasticIPAddressServices();
}
@Test

View File

@ -49,7 +49,7 @@ public class InstanceClientLiveTest extends BaseComputeServiceContextLiveTest {
@BeforeClass(groups = { "integration", "live" })
public void setupContext() {
super.setupContext();
client = context.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi().getInstanceServices();
client = view.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi().getInstanceServices();
}
@Test

View File

@ -51,7 +51,7 @@ public class KeyPairClientLiveTest extends BaseComputeServiceContextLiveTest {
@BeforeClass(groups = { "integration", "live" })
public void setupContext() {
super.setupContext();
client = context.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi().getKeyPairServices();
client = view.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi().getKeyPairServices();
}
@Test

View File

@ -60,7 +60,7 @@ public class SecurityGroupClientLiveTest extends BaseComputeServiceContextLiveTe
@BeforeClass(groups = { "integration", "live" })
public void setupContext() {
super.setupContext();
client = context.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi().getSecurityGroupServices();
client = view.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi().getSecurityGroupServices();
}
@Test
@ -281,6 +281,6 @@ public class SecurityGroupClientLiveTest extends BaseComputeServiceContextLiveTe
@AfterTest
public void shutdown() {
context.close();
view.close();
}
}

View File

@ -76,8 +76,8 @@ public class WindowsClientLiveTest extends BaseComputeServiceContextLiveTest {
@BeforeClass(groups = { "integration", "live" })
public void setupContext() {
super.setupContext();
client = context.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi().getWindowsServices();
computeService = context.getComputeService();
client = view.unwrap(EC2ApiMetadata.CONTEXT_TOKEN).getApi().getWindowsServices();
computeService = view.getComputeService();
}
@ -141,7 +141,7 @@ public class WindowsClientLiveTest extends BaseComputeServiceContextLiveTest {
node.getCredentials().getPrivateKey());
// And apply it to the decryption function
WindowsLoginCredentialsFromEncryptedData f = context.getUtils().getInjector().getInstance(WindowsLoginCredentialsFromEncryptedData.class);
WindowsLoginCredentialsFromEncryptedData f = view.getUtils().getInjector().getInstance(WindowsLoginCredentialsFromEncryptedData.class);
LoginCredentials credentials = f.apply(dataAndKey);
assertEquals(credentials.getUser(), "Administrator");

View File

@ -85,7 +85,7 @@ public class ElasticStackApiMetadata extends BaseRestApiMetadata {
.version("1.0")
.defaultEndpoint("https://api.lon-p.elastichosts.com")
.defaultProperties(ElasticStackApiMetadata.defaultProperties())
.wrapper(TypeToken.of(ComputeServiceContext.class))
.view(TypeToken.of(ComputeServiceContext.class))
.defaultModules(ImmutableSet.<Class<? extends Module>>of(ElasticStackRestClientModule.class, ElasticStackComputeServiceContextModule.class));
}

View File

@ -88,7 +88,7 @@ public class ElasticStackClientLiveTest
@Override
public void setupContext() {
super.setupContext();
cloudStackContext = context.unwrap();
cloudStackContext = view.unwrap();
client = cloudStackContext.getApi();
driveNotClaimed = new RetryablePredicate<DriveInfo>(Predicates.not(new DriveClaimed(client)), maxDriveImageTime,
@ -97,7 +97,7 @@ public class ElasticStackClientLiveTest
TimeUnit.SECONDS);
if (Strings.emptyToNull(imageId) == null) {
imageId = context.getComputeService().templateBuilder().build().getImage().getId();
imageId = view.getComputeService().templateBuilder().build().getImage().getId();
}
}

View File

@ -63,7 +63,7 @@ public class FilesystemApiMetadata extends BaseApiMetadata {
.defaultCredential("bar")
.version("1")
.documentation(URI.create("http://www.jclouds.org/documentation/userguide/blobstore-guide"))
.wrapper(BlobStoreContext.class)
.view(BlobStoreContext.class)
.defaultModule(FilesystemBlobStoreContextModule.class);
}

View File

@ -131,7 +131,7 @@ public class FilesystemAsyncBlobStoreTest {
// no base directory declared in properties
try {
Properties props = new Properties();
context = ContextBuilder.newBuilder(PROVIDER).overrides(props).build();
context = ContextBuilder.newBuilder(PROVIDER).overrides(props).build(BlobStoreContext.class);
fail("No error if base directory is not specified");
} catch (CreationException e) {
}
@ -140,7 +140,7 @@ public class FilesystemAsyncBlobStoreTest {
try {
Properties props = new Properties();
props.setProperty(FilesystemConstants.PROPERTY_BASEDIR, null);
context = ContextBuilder.newBuilder(PROVIDER).overrides(props).build();
context = ContextBuilder.newBuilder(PROVIDER).overrides(props).build(BlobStoreContext.class);
fail("No error if base directory is null in the option");
} catch (NullPointerException e) {
}

View File

@ -62,14 +62,14 @@ public class FilesystemContainerIntegrationTestDisabled extends BaseContainerInt
// NOTE all metadata in jclouds comes out as lowercase, in an effort to normalize the
// providers.
Blob object = context.getBlobStore().blobBuilder(key).userMetadata(ImmutableMap.of("Adrian", "powderpuff"))
Blob object = view.getBlobStore().blobBuilder(key).userMetadata(ImmutableMap.of("Adrian", "powderpuff"))
.payload(TEST_STRING).contentType(MediaType.TEXT_PLAIN).build();
String containerName = getContainerName();
try {
addBlobToContainer(containerName, object);
validateContent(containerName, key);
PageSet<? extends StorageMetadata> container = context.getBlobStore().list(containerName, maxResults(1));
PageSet<? extends StorageMetadata> container = view.getBlobStore().list(containerName, maxResults(1));
BlobMetadata metadata = (BlobMetadata) Iterables.getOnlyElement(container);
// transient container should be lenient and not return metadata on undetailed listing.

View File

@ -76,7 +76,7 @@ public class NovaApiMetadata extends BaseRestApiMetadata {
.version("1.1")
.defaultEndpoint("http://localhost:5000")
.defaultProperties(NovaApiMetadata.defaultProperties())
.wrapper(TypeToken.of(ComputeServiceContext.class))
.view(TypeToken.of(ComputeServiceContext.class))
.defaultModules(ImmutableSet.<Class<? extends Module>>of(NovaRestClientModule.class, NovaComputeServiceContextModule.class));
}

View File

@ -62,7 +62,7 @@ import com.google.common.util.concurrent.ListenableFuture;
* Provides asynchronous access to OpenStack Nova via their REST API.
* <p/>
* All commands return a ListenableFuture of the result from OpenStack Nova. Any exceptions incurred
* during processing will be wrapped in an {@link ExecutionException} as documented in
* during processing will be backend in an {@link ExecutionException} as documented in
* {@link ListenableFuture#get()}.
*
* @author Adrian Cole

View File

@ -40,7 +40,7 @@ import org.jclouds.rest.ResourceNotFoundException;
* Provides access to OpenStack Nova via their REST API.
* <p/>
* All commands return a Future of the result from OpenStack Nova. Any exceptions incurred
* during processing will be wrapped in an {@link ExecutionException} as documented in
* during processing will be backend in an {@link ExecutionException} as documented in
* {@link Future#get()}.
*
* @see NovaAsyncClient

View File

@ -78,7 +78,7 @@ public class NovaClientLiveTest extends BaseComputeServiceContextLiveTest {
@Override
public void setupContext() {
super.setupContext();
Injector injector = context.utils().injector();
Injector injector = view.utils().injector();
client = injector.getInstance(NovaClient.class);
sshFactory = injector.getInstance(SshClient.Factory.class);
SocketOpen socketOpen = injector.getInstance(SocketOpen.class);

View File

@ -94,7 +94,7 @@ public class NovaApiMetadata extends BaseRestApiMetadata {
.version("1.1")
.defaultEndpoint("http://localhost:5000")
.defaultProperties(NovaApiMetadata.defaultProperties())
.wrapper(TypeToken.of(ComputeServiceContext.class))
.view(TypeToken.of(ComputeServiceContext.class))
.defaultModules(ImmutableSet.<Class<? extends Module>>of(NovaRestClientModule.class, NovaComputeServiceContextModule.class));
}

View File

@ -24,8 +24,10 @@ import org.jclouds.javax.annotation.Nullable;
import org.jclouds.location.Zone;
import org.jclouds.location.functions.ZoneToEndpoint;
import org.jclouds.openstack.nova.v1_1.extensions.FloatingIPAsyncClient;
import org.jclouds.openstack.nova.v1_1.extensions.HostAdministrationAsyncClient;
import org.jclouds.openstack.nova.v1_1.extensions.KeyPairAsyncClient;
import org.jclouds.openstack.nova.v1_1.extensions.SecurityGroupAsyncClient;
import org.jclouds.openstack.nova.v1_1.extensions.SimpleTenantUsageAsyncClient;
import org.jclouds.openstack.nova.v1_1.features.ExtensionAsyncClient;
import org.jclouds.openstack.nova.v1_1.features.FlavorAsyncClient;
import org.jclouds.openstack.nova.v1_1.features.ImageAsyncClient;
@ -103,4 +105,19 @@ public interface NovaAsyncClient {
@Delegate
Optional<KeyPairAsyncClient> getKeyPairExtensionForZone(
@EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
/**
* Provides asynchronous access to Host Administration features.
*/
@Delegate
Optional<HostAdministrationAsyncClient> getHostAdministrationExtensionForZone(
@EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
/**
* Provides asynchronous access to Simple Tenant Usage features.
*/
@Delegate
Optional<SimpleTenantUsageAsyncClient> getSimpleTenantUsageExtensionForZone(
@EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
}

View File

@ -26,8 +26,10 @@ import org.jclouds.javax.annotation.Nullable;
import org.jclouds.location.Zone;
import org.jclouds.location.functions.ZoneToEndpoint;
import org.jclouds.openstack.nova.v1_1.extensions.FloatingIPClient;
import org.jclouds.openstack.nova.v1_1.extensions.HostAdministrationClient;
import org.jclouds.openstack.nova.v1_1.extensions.KeyPairClient;
import org.jclouds.openstack.nova.v1_1.extensions.SecurityGroupClient;
import org.jclouds.openstack.nova.v1_1.extensions.SimpleTenantUsageClient;
import org.jclouds.openstack.nova.v1_1.features.ExtensionClient;
import org.jclouds.openstack.nova.v1_1.features.FlavorClient;
import org.jclouds.openstack.nova.v1_1.features.ImageClient;
@ -106,4 +108,18 @@ public interface NovaClient {
Optional<KeyPairClient> getKeyPairExtensionForZone(
@EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
/**
* Provides synchronous access to Host Administration features.
*/
@Delegate
Optional<HostAdministrationClient> getHostAdministrationExtensionForZone(
@EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
/**
* Provides synchronous access to Simple Tenant Usage features.
*/
@Delegate
Optional<SimpleTenantUsageClient> getSimpleTenantUsageExtensionForZone(
@EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
}

View File

@ -151,8 +151,8 @@ public class NovaComputeService extends BaseComputeService {
Optional<KeyPairClient> keyPairClient = novaClient.getKeyPairExtensionForZone(zoneId);
if (keyPairClient.isPresent()) {
for (String group : groups) {
for (Map<String, KeyPair> wrapper : keyPairClient.get().listKeyPairs()) {
for (KeyPair pair : Iterables.filter(wrapper.values(),
for (Map<String, KeyPair> view : keyPairClient.get().listKeyPairs()) {
for (KeyPair pair : Iterables.filter(view.values(),
KeyPairPredicates.nameMatches(namingConvention.create().containsGroup(group)))) {
ZoneAndName zoneAndName = ZoneAndName.fromZoneAndName(zoneId, pair.getName());
logger.debug(">> deleting keypair(%s)", zoneAndName);

View File

@ -25,8 +25,15 @@ import javax.inject.Singleton;
import org.jclouds.json.config.GsonModule;
import org.jclouds.json.config.GsonModule.DateAdapter;
import org.jclouds.openstack.nova.v1_1.domain.HostResourceUsage;
import com.google.common.collect.ImmutableMap;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
@ -38,7 +45,7 @@ public class NovaParserModule extends AbstractModule {
@Provides
@Singleton
public Map<Type, Object> provideCustomAdapterBindings() {
return ImmutableMap.<Type, Object> of();
return ImmutableMap.<Type, Object> of(HostResourceUsage.class, new HostResourceUsageAdapter());
}
@Override
@ -46,4 +53,30 @@ public class NovaParserModule extends AbstractModule {
bind(DateAdapter.class).to(GsonModule.Iso8601DateAdapter.class);
}
@Singleton
public static class HostResourceUsageAdapter implements JsonSerializer<HostResourceUsage>, JsonDeserializer<HostResourceUsage> {
public HostResourceUsage apply(HostResourceUsageView in) {
return in.resource.toBuilder().build();
}
@Override
public HostResourceUsage deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext context) throws JsonParseException {
return apply((HostResourceUsageView) context.deserialize(jsonElement, HostResourceUsageView.class));
}
@Override
public JsonElement serialize(HostResourceUsage hostResourceUsage, Type type, JsonSerializationContext context) {
return context.serialize(hostResourceUsage);
}
private static class HostResourceUsageView {
protected HostResourceUsageInternal resource;
}
private static class HostResourceUsageInternal extends HostResourceUsage {
protected HostResourceUsageInternal(Builder<?> builder) {
super(builder);
}
}
}
}

View File

@ -35,12 +35,7 @@ import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule;
import org.jclouds.openstack.nova.v1_1.NovaAsyncClient;
import org.jclouds.openstack.nova.v1_1.NovaClient;
import org.jclouds.openstack.nova.v1_1.domain.Extension;
import org.jclouds.openstack.nova.v1_1.extensions.FloatingIPAsyncClient;
import org.jclouds.openstack.nova.v1_1.extensions.FloatingIPClient;
import org.jclouds.openstack.nova.v1_1.extensions.KeyPairAsyncClient;
import org.jclouds.openstack.nova.v1_1.extensions.KeyPairClient;
import org.jclouds.openstack.nova.v1_1.extensions.SecurityGroupAsyncClient;
import org.jclouds.openstack.nova.v1_1.extensions.SecurityGroupClient;
import org.jclouds.openstack.nova.v1_1.extensions.*;
import org.jclouds.openstack.nova.v1_1.features.ExtensionAsyncClient;
import org.jclouds.openstack.nova.v1_1.features.ExtensionClient;
import org.jclouds.openstack.nova.v1_1.features.FlavorAsyncClient;
@ -75,7 +70,10 @@ public class NovaRestClientModule extends RestClientModule<NovaClient, NovaAsync
.put(ImageClient.class, ImageAsyncClient.class).put(ExtensionClient.class, ExtensionAsyncClient.class)
.put(FloatingIPClient.class, FloatingIPAsyncClient.class)
.put(SecurityGroupClient.class, SecurityGroupAsyncClient.class)
.put(KeyPairClient.class, KeyPairAsyncClient.class).build();
.put(KeyPairClient.class, KeyPairAsyncClient.class)
.put(HostAdministrationClient.class, HostAdministrationAsyncClient.class)
.put(SimpleTenantUsageClient.class, SimpleTenantUsageAsyncClient.class)
.build();
public NovaRestClientModule() {
super(DELEGATE_MAP);

View File

@ -0,0 +1,126 @@
/**
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.openstack.nova.v1_1.domain;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.gson.annotations.SerializedName;
/**
* Class Host
*/
public class Host {
public static Builder<?> builder() {
return new ConcreteBuilder();
}
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromHost(this);
}
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
private String name;
private String service;
public T name(String name) {
this.name = name;
return self();
}
public T service(String service) {
this.service = service;
return self();
}
public Host build() {
return new Host(this);
}
public T fromHost(Host in) {
return this
.name(in.getName())
.service(in.getService())
;
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected ConcreteBuilder self() {
return this;
}
}
@SerializedName(value="host_name")
private final String name;
private final String service;
protected Host(Builder<?> builder) {
this.name = builder.name;
this.service = builder.service;
}
/**
*/
@Nullable
public String getName() {
return this.name;
}
/**
*/
@Nullable
public String getService() {
return this.service;
}
@Override
public int hashCode() {
return Objects.hashCode(name, service);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Host that = Host.class.cast(obj);
return Objects.equal(this.name, that.name)
&& Objects.equal(this.service, that.service)
;
}
protected ToStringHelper string() {
return Objects.toStringHelper("")
.add("name", name)
.add("service", service)
;
}
@Override
public String toString() {
return string().toString();
}
}

View File

@ -0,0 +1,177 @@
/**
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.openstack.nova.v1_1.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.gson.annotations.SerializedName;
/**
* Class HostResourceUsage
*/
public class HostResourceUsage {
public static Builder<?> builder() {
return new ConcreteBuilder();
}
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromHostResourceUsage(this);
}
public static abstract class Builder<T extends Builder<T>> {
protected abstract T self();
private String host;
private String project;
private int memoryMb;
private int cpu;
private int diskGb;
public T host(String host) {
this.host = host;
return self();
}
public T project(String project) {
this.project = project;
return self();
}
public T memoryMb(int memoryMb) {
this.memoryMb = memoryMb;
return self();
}
public T cpu(int cpu) {
this.cpu = cpu;
return self();
}
public T diskGb(int diskGb) {
this.diskGb = diskGb;
return self();
}
public HostResourceUsage build() {
return new HostResourceUsage(this);
}
public T fromHostResourceUsage(HostResourceUsage in) {
return this
.host(in.getHost())
.project(in.getProject())
.memoryMb(in.getMemoryMb())
.cpu(in.getCpu())
.diskGb(in.getDiskGb())
;
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected ConcreteBuilder self() {
return this;
}
}
private final String host;
private final String project;
@SerializedName(value="memory_mb")
private final int memoryMb;
private final int cpu;
@SerializedName(value="disk_gb")
private final int diskGb;
protected HostResourceUsage(Builder<?> builder) {
this.host = checkNotNull(builder.host, "host");
this.project = builder.project;
this.memoryMb = checkNotNull(builder.memoryMb, "memoryMb");
this.cpu = checkNotNull(builder.cpu, "cpu");
this.diskGb = checkNotNull(builder.diskGb, "diskGb");
}
/**
*/
public String getHost() {
return this.host;
}
/**
*/
@Nullable
public String getProject() {
return this.project;
}
/**
*/
public int getMemoryMb() {
return this.memoryMb;
}
/**
*/
public int getCpu() {
return this.cpu;
}
/**
*/
public int getDiskGb() {
return this.diskGb;
}
@Override
public int hashCode() {
return Objects.hashCode(host, project, memoryMb, cpu, diskGb);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
HostResourceUsage that = HostResourceUsage.class.cast(obj);
return Objects.equal(this.host, that.host)
&& Objects.equal(this.project, that.project)
&& Objects.equal(this.memoryMb, that.memoryMb)
&& Objects.equal(this.cpu, that.cpu)
&& Objects.equal(this.diskGb, that.diskGb);
}
protected ToStringHelper string() {
return Objects.toStringHelper("")
.add("host", host)
.add("project", project)
.add("memoryMb", memoryMb)
.add("cpu", cpu)
.add("diskGb", diskGb);
}
@Override
public String toString() {
return string().toString();
}
}

View File

@ -0,0 +1,302 @@
/**
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.openstack.nova.v1_1.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Date;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.gson.annotations.SerializedName;
/**
* Information the SimpleTenantUsage extension return data about each Server
*
* @author Adam Lowe
*/
public class SimpleServerUsage {
public static enum Status {
UNRECOGNIZED, ACTIVE;
public String value() {
return name();
}
public static Status fromValue(String v) {
try {
return valueOf(v.toUpperCase());
} catch (IllegalArgumentException e) {
return UNRECOGNIZED;
}
}
}
public static Builder<?> builder() {
return new ConcreteBuilder();
}
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromSimpleServerUsage(this);
}
public static abstract class Builder<T extends Builder<T>> {
private String instanceName;
private double hours;
private double flavorMemoryMb;
private double flavorLocalGb;
private double flavorVcpus;
private String tenantId;
private String flavorName;
private Date instanceCreated;
private Date instanceTerminiated;
private Status instanceStatus;
private long uptime;
protected abstract T self();
public T instanceName(String instanceName) {
this.instanceName = instanceName;
return self();
}
public T hours(double hours) {
this.hours = hours;
return self();
}
public T flavorMemoryMb(double flavorMemoryMb) {
this.flavorMemoryMb = flavorMemoryMb;
return self();
}
public T flavorLocalGb(double flavorLocalGb) {
this.flavorLocalGb = flavorLocalGb;
return self();
}
public T flavorVcpus(double flavorVcpus) {
this.flavorVcpus = flavorVcpus;
return self();
}
public T tenantId(String tenantId) {
this.tenantId = tenantId;
return self();
}
public T flavorName(String flavorName) {
this.flavorName = flavorName;
return self();
}
public T instanceCreated(Date instanceCreated) {
this.instanceCreated = instanceCreated;
return self();
}
public T instanceTerminiated(Date instanceTerminiated) {
this.instanceTerminiated = instanceTerminiated;
return self();
}
public T instanceStatus(Status instanceStatus) {
this.instanceStatus = instanceStatus;
return self();
}
public T uptime(long uptime) {
this.uptime = uptime;
return self();
}
public SimpleServerUsage build() {
return new SimpleServerUsage(this);
}
public T fromSimpleServerUsage(SimpleServerUsage in) {
return this
.instanceName(in.getInstanceName())
.flavorMemoryMb(in.getFlavorMemoryMb())
.flavorLocalGb(in.getFlavorLocalGb())
.flavorVcpus(in.getFlavorVcpus())
.tenantId(in.getTenantId())
.flavorName(in.getFlavorName())
.instanceCreated(in.getInstanceCreated())
.instanceTerminiated(in.getInstanceTerminiated())
.instanceStatus(in.getInstanceStatus())
.uptime(in.getUptime())
;
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected ConcreteBuilder self() {
return this;
}
}
@SerializedName("name")
private final String instanceName;
private final double hours;
@SerializedName("memory_mb")
private final double flavorMemoryMb;
@SerializedName("local_gb")
private final double flavorLocalGb;
@SerializedName("vcpus")
private final double flavorVcpus;
@SerializedName("tenant_id")
private final String tenantId;
@SerializedName("flavor")
private final String flavorName;
@SerializedName("started_at")
private final Date instanceCreated;
@SerializedName("ended_at")
private final Date instanceTerminiated;
@SerializedName("state")
private final Status instanceStatus;
private final long uptime;
private SimpleServerUsage(Builder<?> builder) {
this.instanceName = checkNotNull(builder.instanceName, "instanceName");
this.hours = builder.hours;
this.flavorMemoryMb = builder.flavorMemoryMb;
this.flavorLocalGb = builder.flavorLocalGb;
this.flavorVcpus = builder.flavorVcpus;
this.tenantId = checkNotNull(builder.tenantId, "tenantId");
this.flavorName = checkNotNull(builder.flavorName, "flavorName");
this.instanceCreated = builder.instanceCreated; //checkNotNull(builder.instanceCreated, "instanceCreated");
this.instanceTerminiated = builder.instanceTerminiated;
this.instanceStatus = checkNotNull(builder.instanceStatus, "instanceStatus");
this.uptime = checkNotNull(builder.uptime, "uptime");
}
/**
*/
public String getInstanceName() {
return this.instanceName;
}
/**
*/
public double getFlavorMemoryMb() {
return this.flavorMemoryMb;
}
/**
*/
public double getFlavorLocalGb() {
return this.flavorLocalGb;
}
/**
*/
public double getFlavorVcpus() {
return this.flavorVcpus;
}
/**
*/
public String getTenantId() {
return this.tenantId;
}
/**
*/
public String getFlavorName() {
return this.flavorName;
}
/**
*/
public Date getInstanceCreated() {
return this.instanceCreated;
}
/**
*/
@Nullable
public Date getInstanceTerminiated() {
return this.instanceTerminiated;
}
/**
*/
public Status getInstanceStatus() {
return this.instanceStatus;
}
/**
*/
public long getUptime() {
return this.uptime;
}
@Override
public int hashCode() {
return Objects.hashCode(instanceName, flavorMemoryMb, flavorLocalGb, flavorVcpus, tenantId, flavorName, instanceCreated, instanceTerminiated, instanceStatus, uptime);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
SimpleServerUsage that = SimpleServerUsage.class.cast(obj);
return Objects.equal(this.instanceName, that.instanceName)
&& Objects.equal(this.flavorMemoryMb, that.flavorMemoryMb)
&& Objects.equal(this.flavorLocalGb, that.flavorLocalGb)
&& Objects.equal(this.flavorVcpus, that.flavorVcpus)
&& Objects.equal(this.tenantId, that.tenantId)
&& Objects.equal(this.flavorName, that.flavorName)
&& Objects.equal(this.instanceCreated, that.instanceCreated)
&& Objects.equal(this.instanceTerminiated, that.instanceTerminiated)
&& Objects.equal(this.instanceStatus, that.instanceStatus)
&& Objects.equal(this.uptime, that.uptime)
;
}
protected ToStringHelper string() {
return Objects.toStringHelper("")
.add("instanceName", instanceName)
.add("flavorMemoryMb", flavorMemoryMb)
.add("flavorLocalGb", flavorLocalGb)
.add("flavorVcpus", flavorVcpus)
.add("tenantId", tenantId)
.add("flavorName", flavorName)
.add("instanceCreated", instanceCreated)
.add("instanceTerminiated", instanceTerminiated)
.add("instanceStatus", instanceStatus)
.add("uptime", uptime)
;
}
@Override
public String toString() {
return string().toString();
}
}

View File

@ -0,0 +1,239 @@
/**
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.openstack.nova.v1_1.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import java.util.Collections;
import java.util.Date;
import java.util.Set;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import com.google.gson.annotations.SerializedName;
/**
* Information the SimpleTenantUsage extension returns data about each tenant
*
* @author Adam Lowe
*/
public class SimpleTenantUsage {
public static Builder<?> builder() {
return new ConcreteBuilder();
}
public Builder<?> toBuilder() {
return new ConcreteBuilder().fromSimpleTenantUsage(this);
}
public static abstract class Builder<T extends Builder<T>> {
private String tenantId;
private double totalLocalGbUsage;
private double totalVcpusUsage;
private double totalMemoryMbUsage;
private double totalHours;
private Date start;
private Date stop;
private Set<SimpleServerUsage> serverUsages = Sets.newLinkedHashSet();
protected abstract T self();
public T tenantId(String tenantId) {
this.tenantId = tenantId;
return self();
}
public T totalLocalGbUsage(double total_local_gb_usage) {
this.totalLocalGbUsage = total_local_gb_usage;
return self();
}
public T totalVcpusUsage(double total_vcpus_usage) {
this.totalVcpusUsage = total_vcpus_usage;
return self();
}
public T totalMemoryMbUsage(double total_memory_mb_usage) {
this.totalMemoryMbUsage = total_memory_mb_usage;
return self();
}
public T totalHours(double total_hours) {
this.totalHours = total_hours;
return self();
}
public T start(Date start) {
this.start = start;
return self();
}
public T stop(Date stop) {
this.stop = stop;
return self();
}
public T serverUsages(Set<SimpleServerUsage> serverUsages) {
this.serverUsages = serverUsages;
return self();
}
public SimpleTenantUsage build() {
return new SimpleTenantUsage(this);
}
public T fromSimpleTenantUsage(SimpleTenantUsage in) {
return this
.totalLocalGbUsage(in.getTotalLocalGbUsage())
.totalVcpusUsage(in.getTotalVcpusUsage())
.totalMemoryMbUsage(in.getTotalMemoryMbUsage())
.totalHours(in.getTotalHours())
.start(in.getStart())
.stop(in.getStop())
.serverUsages(in.getServerUsages())
;
}
}
private static class ConcreteBuilder extends Builder<ConcreteBuilder> {
@Override
protected ConcreteBuilder self() {
return this;
}
}
@SerializedName("tenant_id")
private final String tenantId;
@SerializedName("total_local_gb_usage")
private final double totalLocalGbUsage;
@SerializedName("total_vcpus_usage")
private final double totalVcpusUsage;
@SerializedName("total_memory_mb_usage")
private final double totalMemoryMbUsage;
@SerializedName("total_hours")
private final double totalHours;
private final Date start;
private final Date stop;
@SerializedName("server_usages")
private final Set<SimpleServerUsage> serverUsages;
private SimpleTenantUsage(Builder<?> builder) {
this.tenantId = builder.tenantId;
this.totalLocalGbUsage = builder.totalLocalGbUsage;
this.totalVcpusUsage = builder.totalVcpusUsage;
this.totalMemoryMbUsage = builder.totalMemoryMbUsage;
this.totalHours = builder.totalHours;
this.start = builder.start;
this.stop = builder.stop;
this.serverUsages = ImmutableSet.copyOf(checkNotNull(builder.serverUsages, "serverUsages"));
}
public String getTenantId() {
return tenantId;
}
/**
*/
public double getTotalLocalGbUsage() {
return this.totalLocalGbUsage;
}
/**
*/
public double getTotalVcpusUsage() {
return this.totalVcpusUsage;
}
/**
*/
public double getTotalMemoryMbUsage() {
return this.totalMemoryMbUsage;
}
/**
*/
public double getTotalHours() {
return this.totalHours;
}
/**
*/
@Nullable
public Date getStart() {
return this.start;
}
/**
*/
@Nullable
public Date getStop() {
return this.stop;
}
/**
*/
@Nullable
public Set<SimpleServerUsage> getServerUsages() {
return serverUsages == null ? ImmutableSet.<SimpleServerUsage>of() : Collections.unmodifiableSet(this.serverUsages);
}
@Override
public int hashCode() {
return Objects.hashCode(totalLocalGbUsage, totalVcpusUsage, totalMemoryMbUsage, totalHours, start, stop, serverUsages);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
SimpleTenantUsage that = SimpleTenantUsage.class.cast(obj);
return Objects.equal(this.totalLocalGbUsage, that.totalLocalGbUsage)
&& Objects.equal(this.totalVcpusUsage, that.totalVcpusUsage)
&& Objects.equal(this.totalMemoryMbUsage, that.totalMemoryMbUsage)
&& Objects.equal(this.totalHours, that.totalHours)
&& Objects.equal(this.start, that.start)
&& Objects.equal(this.stop, that.stop)
&& Objects.equal(this.serverUsages, that.serverUsages)
;
}
protected ToStringHelper string() {
return Objects.toStringHelper("")
.add("totalLocalGbUsage", totalLocalGbUsage)
.add("totalVcpusUsage", totalVcpusUsage)
.add("totalMemoryMbUsage", totalMemoryMbUsage)
.add("totalHours", totalHours)
.add("start", start)
.add("stop", stop)
.add("serverUsages", serverUsages)
;
}
@Override
public String toString() {
return string().toString();
}
}

View File

@ -0,0 +1,78 @@
/**
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.openstack.nova.v1_1.extensions;
import java.util.Set;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.MediaType;
import org.jclouds.openstack.filters.AuthenticateRequest;
import org.jclouds.openstack.nova.v1_1.domain.Host;
import org.jclouds.openstack.nova.v1_1.domain.HostResourceUsage;
import org.jclouds.openstack.services.Extension;
import org.jclouds.openstack.services.ServiceType;
import org.jclouds.rest.annotations.ExceptionParser;
import org.jclouds.rest.annotations.RequestFilters;
import org.jclouds.rest.annotations.SelectJson;
import org.jclouds.rest.annotations.SkipEncoding;
import org.jclouds.rest.functions.ReturnEmptySetOnNotFoundOr404;
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
import com.google.common.util.concurrent.ListenableFuture;
/**
* Provides asynchronous access to Host Administration features via the REST API.
* <p/>
*
* @author Adam Lowe
* @see SimpleTenantUsageClient
* @see <a href= "http://docs.openstack.org/api/openstack-compute/2/content/Extensions-d1e1444.html"/>
* @see <a href="http://nova.openstack.org/api_ext" />
* @see <a href="http://nova.openstack.org/api/nova.api.openstack.compute.contrib.hosts.html" />
*/
@Extension(of = ServiceType.COMPUTE, namespace = ExtensionNamespaces.HOSTS)
@SkipEncoding({'/', '='})
@RequestFilters(AuthenticateRequest.class)
public interface HostAdministrationAsyncClient {
/**
* @see HostAdministrationClient#listHosts()
*/
@GET
@Path("/os-hosts")
@SelectJson("hosts")
@Consumes(MediaType.APPLICATION_JSON)
@ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
ListenableFuture<Set<Host>> listHosts();
/**
* @see HostAdministrationClient#getHostResourceUsage(String)
*/
@GET
@Path("/os-hosts/{id}")
@SelectJson("host")
@Consumes(MediaType.APPLICATION_JSON)
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
ListenableFuture<Set<HostResourceUsage>> getHostResourceUsage(@PathParam("id") String hostId);
}

View File

@ -0,0 +1,56 @@
/**
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.openstack.nova.v1_1.extensions;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import javax.ws.rs.PathParam;
import org.jclouds.concurrent.Timeout;
import org.jclouds.openstack.nova.v1_1.domain.Host;
import org.jclouds.openstack.nova.v1_1.domain.HostResourceUsage;
import org.jclouds.openstack.services.Extension;
import org.jclouds.openstack.services.ServiceType;
/**
* Provides asynchronous access to Host Administration features via the REST API.
* <p/>
* TODO reboot, shutdown, startup, update
*
* @author Adam Lowe
* @see HostAdministrationAsyncClient
*/
@Extension(of = ServiceType.COMPUTE, namespace = ExtensionNamespaces.HOSTS)
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
public interface HostAdministrationClient {
/**
* Returns the list of hosts
* @return the usage information
*/
Set<Host> listHosts();
/**
* Retrieves the physical/usage resource on a specific host
* @return the usage information
*/
Set<HostResourceUsage> getHostResourceUsage(@PathParam("id") String hostId);
}

View File

@ -0,0 +1,77 @@
/**
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.openstack.nova.v1_1.extensions;
import java.util.Set;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.MediaType;
import org.jclouds.openstack.filters.AuthenticateRequest;
import org.jclouds.openstack.nova.v1_1.domain.SimpleTenantUsage;
import org.jclouds.openstack.services.Extension;
import org.jclouds.openstack.services.ServiceType;
import org.jclouds.rest.annotations.ExceptionParser;
import org.jclouds.rest.annotations.RequestFilters;
import org.jclouds.rest.annotations.SelectJson;
import org.jclouds.rest.annotations.SkipEncoding;
import org.jclouds.rest.functions.ReturnEmptySetOnNotFoundOr404;
import org.jclouds.rest.functions.ReturnNullOnNotFoundOr404;
import com.google.common.util.concurrent.ListenableFuture;
/**
* Provides asynchronous access to Simple Tenant Usage via the REST API.
* <p/>
*
* @author Adam Lowe
* @see SimpleTenantUsageClient
* @see <a href= "http://docs.openstack.org/api/openstack-compute/2/content/Extensions-d1e1444.html" />
* @see <a href="http://nova.openstack.org/api_ext" />
* @see <a href="http://nova.openstack.org/api/nova.api.openstack.compute.contrib.simple_tenant_usage.html" />
*/
@Extension(of = ServiceType.COMPUTE, namespace = ExtensionNamespaces.SIMPLE_TENANT_USAGE)
@SkipEncoding({'/', '='})
@RequestFilters(AuthenticateRequest.class)
public interface SimpleTenantUsageAsyncClient {
/**
* @see SimpleTenantUsageClient#listTenantUsages()
*/
@GET
@Path("/os-simple-tenant-usage")
@SelectJson("tenant_usages")
@Consumes(MediaType.APPLICATION_JSON)
@ExceptionParser(ReturnEmptySetOnNotFoundOr404.class)
ListenableFuture<Set<SimpleTenantUsage>> listTenantUsages();
/**
* @see SimpleTenantUsageClient#getTenantUsage(String)
*/
@GET
@Path("/os-simple-tenant-usage/{id}")
@SelectJson("tenant_usage")
@Consumes(MediaType.APPLICATION_JSON)
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
ListenableFuture<SimpleTenantUsage> getTenantUsage(@PathParam("id") String tenantId);
}

View File

@ -0,0 +1,53 @@
/**
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.openstack.nova.v1_1.extensions;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.jclouds.concurrent.Timeout;
import org.jclouds.openstack.nova.v1_1.domain.SimpleTenantUsage;
import org.jclouds.openstack.services.Extension;
import org.jclouds.openstack.services.ServiceType;
/**
* Provides asynchronous access to Simple Tenant Usage via the REST API.
* <p/>
*
* @author Adam Lowe
* @see SimpleTenantUsageAsyncClient
*/
@Extension(of = ServiceType.COMPUTE, namespace = ExtensionNamespaces.SIMPLE_TENANT_USAGE)
@Timeout(duration = 180, timeUnit = TimeUnit.SECONDS)
public interface SimpleTenantUsageClient {
/**
* Retrive tenant_usage for all tenants
*
* @return the set of TenantUsage reports
*/
Set<SimpleTenantUsage> listTenantUsages();
/**
* Retrive tenant_usage for a specified tenant
*
* @return the requested tenant usage
*/
SimpleTenantUsage getTenantUsage(String tenantId);
}

View File

@ -43,7 +43,7 @@ import com.google.common.collect.Multimap;
/**
* We use the annotation {@link org.jclouds.openstack.services.Extension} to
* bind a class that is an extension to an extension found in the
* {@link ExtensionsClient#listExtensions} call.
* {@link org.jclouds.openstack.nova.v1_1.features.ExtensionClient#listExtensions} call.
*
* @author Adrian Cole
*
@ -62,6 +62,10 @@ public class PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensio
URI.create("http://docs.openstack.org/compute/ext/floating_ips/api/v1.1"))
.put(URI.create(ExtensionNamespaces.KEYPAIRS),
URI.create("http://docs.openstack.org/compute/ext/keypairs/api/v1.1"))
.put(URI.create(ExtensionNamespaces.SIMPLE_TENANT_USAGE),
URI.create("http://docs.openstack.org/compute/ext/os-simple-tenant-usage/api/v1.1"))
.put(URI.create(ExtensionNamespaces.HOSTS),
URI.create("http://docs.openstack.org/compute/ext/hosts/api/v1.1"))
.build();
@Inject

View File

@ -0,0 +1,84 @@
/**
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.openstack.nova.v1_1.extensions;
import static org.testng.Assert.assertEquals;
import java.net.URI;
import java.util.Set;
import javax.ws.rs.core.MediaType;
import org.jclouds.http.HttpRequest;
import org.jclouds.http.HttpResponse;
import org.jclouds.openstack.nova.v1_1.domain.Host;
import org.jclouds.openstack.nova.v1_1.domain.HostResourceUsage;
import org.jclouds.openstack.nova.v1_1.internal.BaseNovaClientExpectTest;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
/**
* Tests HostAdministrationClient guice wiring and parsing
*
* @author Adam Lowe
*/
@Test(groups = "unit", testName = "HostAdministrationClientExpectTest")
public class HostAdministrationClientExpectTest extends BaseNovaClientExpectTest {
public void testList() throws Exception {
URI endpoint = URI.create("https://compute.north.host/v1.1/3456/os-hosts");
HostAdministrationClient client = requestsSendResponses(keystoneAuthWithUsernameAndPassword,
responseWithKeystoneAccess, extensionsOfNovaRequest, extensionsOfNovaResponse,
HttpRequest.builder().method("GET").headers(ImmutableMultimap.of("Accept", MediaType.APPLICATION_JSON, "X-Auth-Token", authToken))
.endpoint(endpoint).build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/hosts_list.json")).build()).getHostAdministrationExtensionForZone("az-1.region-a.geo-1").get();
Host expected = Host.builder().name("ubuntu").service("compute").build();
Set<Host> result = client.listHosts();
Host host = Iterables.getOnlyElement(result);
assertEquals(host.getName(), "ubuntu");
assertEquals(host.getService(), "compute");
assertEquals(host, expected);
}
public void testGet() throws Exception {
URI endpoint = URI.create("https://compute.north.host/v1.1/3456/os-hosts/xyz");
HostAdministrationClient client = requestsSendResponses(keystoneAuthWithUsernameAndPassword,
responseWithKeystoneAccess, extensionsOfNovaRequest, extensionsOfNovaResponse,
HttpRequest.builder().method("GET").headers(ImmutableMultimap.of("Accept", MediaType.APPLICATION_JSON, "X-Auth-Token", authToken))
.endpoint(endpoint).build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/host.json")).build()).getHostAdministrationExtensionForZone("az-1.region-a.geo-1").get();
Set<HostResourceUsage> expected = ImmutableSet.of(
HostResourceUsage.builder().memoryMb(16083).project("(total)").cpu(4).diskGb(181).host("ubuntu").build(),
HostResourceUsage.builder().memoryMb(3396).project("(used_now)").cpu(3).diskGb(5).host("ubuntu").build(),
HostResourceUsage.builder().memoryMb(6144).project("(used_max)").cpu(3).diskGb(80).host("ubuntu").build(),
HostResourceUsage.builder().memoryMb(6144).project("f8535069c3fb404cb61c873b1a0b4921").cpu(3).diskGb(80).host("ubuntu").build()
);
assertEquals(client.getHostResourceUsage("xyz"), expected);
}
}

View File

@ -0,0 +1,58 @@
/**
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.openstack.nova.v1_1.extensions;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import java.util.Set;
import org.jclouds.openstack.nova.v1_1.domain.Host;
import org.jclouds.openstack.nova.v1_1.domain.HostResourceUsage;
import org.jclouds.openstack.nova.v1_1.internal.BaseNovaClientLiveTest;
import org.testng.annotations.Test;
import com.google.common.base.Optional;
/**
* Tests behavior of HostAdministrationClient
*
* @author Adam Lowe
*/
@Test(groups = "live", testName = "HostAdministrationClientLiveTest")
public class HostAdministrationClientLiveTest extends BaseNovaClientLiveTest {
public void testListAndGet() throws Exception {
for (String zoneId : novaContext.getApi().getConfiguredZones()) {
Optional<HostAdministrationClient> optClient = novaContext.getApi().getHostAdministrationExtensionForZone(zoneId);
if (optClient.isPresent() && identity.endsWith(":admin")) {
HostAdministrationClient client = optClient.get();
Set<Host> hosts = client.listHosts();
assertNotNull(hosts);
for(Host host : hosts) {
for (HostResourceUsage usage : client.getHostResourceUsage(host.getName())) {
assertEquals(usage.getHost(), host.getName());
assertNotNull(usage);
}
}
}
}
}
}

View File

@ -0,0 +1,100 @@
/**
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.openstack.nova.v1_1.extensions;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
import java.net.URI;
import java.util.Set;
import javax.ws.rs.core.MediaType;
import org.jclouds.date.DateService;
import org.jclouds.date.internal.SimpleDateFormatDateService;
import org.jclouds.http.HttpRequest;
import org.jclouds.http.HttpResponse;
import org.jclouds.openstack.nova.v1_1.domain.SimpleServerUsage;
import org.jclouds.openstack.nova.v1_1.domain.SimpleTenantUsage;
import org.jclouds.openstack.nova.v1_1.internal.BaseNovaClientExpectTest;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
/**
* Tests SimpleTenantUsageClient guice wiring and parsing
*
* @author Adam Lowe
*/
@Test(groups = "unit", testName = "SimpleTenantUsageClientExpectTest")
public class SimpleTenantUsageClientExpectTest extends BaseNovaClientExpectTest {
private DateService dateService = new SimpleDateFormatDateService();
public void testList() throws Exception {
URI endpoint = URI.create("https://compute.north.host/v1.1/3456/os-simple-tenant-usage");
SimpleTenantUsageClient client = requestsSendResponses(keystoneAuthWithUsernameAndPassword,
responseWithKeystoneAccess, extensionsOfNovaRequest, extensionsOfNovaResponse,
HttpRequest.builder().method("GET").headers(ImmutableMultimap.of("Accept", MediaType.APPLICATION_JSON, "X-Auth-Token", authToken))
.endpoint(endpoint).build(),
HttpResponse.builder().statusCode(200)
.payload(payloadFromResource("/simple_tenant_usages.json")).build())
.getSimpleTenantUsageExtensionForZone("az-1.region-a.geo-1").get();
Set<SimpleTenantUsage> results = client.listTenantUsages();
SimpleTenantUsage usage = Iterables.getOnlyElement(results);
assertEquals(usage.getTenantId(), "f8535069c3fb404cb61c873b1a0b4921");
assertEquals(usage.getTotalHours(), 4.888888888888889e-07);
assertEquals(usage.getTotalLocalGbUsage(), 1.9555555555555557e-05);
assertEquals(usage.getTotalMemoryMbUsage(), 0.0015018666666666667);
assertEquals(usage.getTotalVcpusUsage(), 7.333333333333333e-07);
assertEquals(usage.getStart(), dateService.iso8601DateParse("2012-04-18 12:18:39.702411"));
assertEquals(usage.getStop(), dateService.iso8601DateParse("2012-04-18 12:18:39.702499"));
assertNotNull(usage.getServerUsages());
assertTrue(usage.getServerUsages().isEmpty());
}
public void testGet() throws Exception {
URI endpoint = URI.create("https://compute.north.host/v1.1/3456/os-simple-tenant-usage/test-1234");
SimpleTenantUsageClient client = requestsSendResponses(keystoneAuthWithUsernameAndPassword,
responseWithKeystoneAccess, extensionsOfNovaRequest, extensionsOfNovaResponse,
HttpRequest.builder().method("GET").headers(ImmutableMultimap.of("Accept", MediaType.APPLICATION_JSON, "X-Auth-Token", authToken))
.endpoint(endpoint).build(),
HttpResponse.builder().statusCode(200)
.payload(payloadFromResource("/simple_tenant_usage.json")).build())
.getSimpleTenantUsageExtensionForZone("az-1.region-a.geo-1").get();
SimpleTenantUsage usage = client.getTenantUsage("test-1234");
assertEquals(usage.getTenantId(), "f8535069c3fb404cb61c873b1a0b4921");
SimpleTenantUsage expected = SimpleTenantUsage.builder().totalHours(4.833333333333333E-7).totalLocalGbUsage(1.933333333333333E-05)
.start(dateService.iso8601DateParse("2012-04-18 13:32:07.255743")).stop(dateService.iso8601DateParse("2012-04-18 13:32:07.255743"))
.totalMemoryMbUsage(0.0014847999999999999).totalVcpusUsage(7.249999999999999E-07).serverUsages(
ImmutableSet.of(
SimpleServerUsage.builder().hours(2.4166666666666665e-07).uptime(91149).flavorLocalGb(50).instanceName("test1").tenantId("f8535069c3fb404cb61c873b1a0b4921").flavorVcpus(2).flavorMemoryMb(4096).instanceStatus(SimpleServerUsage.Status.ACTIVE).flavorName("m1.medium").instanceCreated(this.dateService.iso8601SecondsDateParse("2012-04-17T12:12:58")).build(),
SimpleServerUsage.builder().hours(2.4166666666666665e-07).uptime(84710).flavorLocalGb(30).instanceName("mish_test").tenantId("f8535069c3fb404cb61c873b1a0b4921").flavorVcpus(1).flavorMemoryMb(2048).instanceStatus(SimpleServerUsage.Status.ACTIVE).flavorName("m1.small").instanceCreated(this.dateService.iso8601SecondsDateParse("2012-04-17T14:00:17")).build()
)).build();
assertEquals(usage, expected);
}
}

View File

@ -0,0 +1,53 @@
/**
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.jclouds.openstack.nova.v1_1.extensions;
import static org.testng.Assert.assertNotNull;
import java.util.Set;
import org.jclouds.openstack.nova.v1_1.domain.SimpleTenantUsage;
import org.jclouds.openstack.nova.v1_1.internal.BaseNovaClientLiveTest;
import org.testng.annotations.Test;
import com.google.common.base.Optional;
/**
* Tests behavior of SimpleTenantUsageClient
*
* @author Adam Lowe
*/
@Test(groups = "live", testName = "SimpleTenantUsageClientLiveTest")
public class SimpleTenantUsageClientLiveTest extends BaseNovaClientLiveTest {
public void testList() throws Exception {
for (String zoneId : novaContext.getApi().getConfiguredZones()) {
Optional<SimpleTenantUsageClient> optClient = novaContext.getApi().getSimpleTenantUsageExtensionForZone(zoneId);
if (optClient.isPresent() && identity.endsWith(":admin")) {
SimpleTenantUsageClient client = optClient.get();
Set<SimpleTenantUsage> usages = client.listTenantUsages();
assertNotNull(usages);
for (SimpleTenantUsage usage : usages) {
SimpleTenantUsage details = client.getTenantUsage(usage.getTenantId());
assertNotNull(details);
}
}
}
}
}

View File

@ -123,17 +123,25 @@ public class PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensio
CacheLoader.from(Functions.forMap(ImmutableMap.of("expectedzone", extensions, "differentzone",
ImmutableSet.<Extension> of()))));
PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSet fn = Guice.createInjector(new AbstractModule() {
@Override
protected void configure() {}
@Provides
LoadingCache<String, Set<Extension>> getExtensions() { return extensionsForZone;}
PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSet fn = Guice.createInjector(
new AbstractModule() {
@Override
protected void configure() {
}
@Provides
@Named("openstack.nova.extensions")
Multimap<URI, URI> getAliases() { return aliases;}
}).getInstance(PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSet.class);
@SuppressWarnings("unused")
@Provides
LoadingCache<String, Set<Extension>> getExtensions() {
return extensionsForZone;
}
@SuppressWarnings("unused")
@Provides
@Named("openstack.nova.extensions")
Multimap<URI, URI> getAliases() {
return aliases;
}
}).getInstance(PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSet.class);
return fn;
}

View File

@ -48,7 +48,7 @@ public class BaseNovaClientLiveTest extends BaseComputeServiceContextLiveTest {
@Override
public void setupContext() {
super.setupContext();
novaContext = context.unwrap();
novaContext = view.unwrap();
}
@Override

View File

@ -63,7 +63,7 @@ public class BaseNovaExpectTest<T> extends BaseRestClientExpectTest<T> {
.put("X-Auth-Token", authToken).build()).build();
extensionsOfNovaResponse = HttpResponse.builder().statusCode(200)
.payload(payloadFromResource("/extension_list_normal.json")).build();
.payload(payloadFromResource("/extension_list_full.json")).build();
unmatchedExtensionsOfNovaResponse = HttpResponse.builder().statusCode(200)
.payload(payloadFromResource("/extension_list.json")).build();

View File

@ -25,7 +25,7 @@ import java.util.Set;
import javax.ws.rs.Consumes;
import javax.ws.rs.core.MediaType;
import org.jclouds.json.BaseParserTest;
import org.jclouds.json.BaseItemParserTest;
import org.jclouds.json.config.GsonModule;
import org.jclouds.openstack.nova.v1_1.config.NovaParserModule;
import org.jclouds.openstack.nova.v1_1.domain.KeyPair;
@ -41,7 +41,7 @@ import com.google.inject.Injector;
* @author Michael Arnold
*/
@Test(groups = "unit", testName = "ParseKeyPairListTest")
public class ParseKeyPairListTest extends BaseParserTest {
public class ParseKeyPairListTest extends BaseItemParserTest<Set<Map<String, KeyPair>>> {
@Override
public String resource() {

View File

@ -0,0 +1,123 @@
{
"extensions": [{
"updated": "2011-06-09T00:00:00+00:00",
"name": "Multinic",
"links": [],
"namespace": "https://docs.openstack.org/ext/multinic/api/v1.1",
"alias": "NMN",
"description": "Multiple network support"
}, {
"updated": "2011-06-29T00:00:00+00:00",
"name": "Hosts",
"links": [],
"namespace": "https://docs.openstack.org/ext/hosts/api/v1.1",
"alias": "os-hosts",
"description": "Host administration"
}, {
"updated": "2011-03-25T00:00:00+00:00",
"name": "Volumes",
"links": [],
"namespace": "https://docs.openstack.org/ext/volumes/api/v1.1",
"alias": "os-volumes",
"description": "Volumes support"
}, {
"updated": "2011-05-25 16:12:21.656723",
"name": "Admin Controller",
"links": [],
"namespace": "https:TODO/",
"alias": "ADMIN",
"description": "The Admin API Extension"
}, {
"updated": "2011-08-08T00:00:00+00:00",
"name": "Quotas",
"links": [],
"namespace": "https://docs.openstack.org/ext/quotas-sets/api/v1.1",
"alias": "os-quota-sets",
"description": "Quotas management support"
}, {
"updated": "2011-08-24T00:00:00+00:00",
"name": "VolumeTypes",
"links": [],
"namespace": "https://docs.openstack.org/ext/volume_types/api/v1.1",
"alias": "os-volume-types",
"description": "Volume types support"
}, {
"updated": "2011-06-23T00:00:00+00:00",
"name": "FlavorExtraSpecs",
"links": [],
"namespace": "https://docs.openstack.org/ext/flavor_extra_specs/api/v1.1",
"alias": "os-flavor-extra-specs",
"description": "Instance type (flavor) extra specs"
}, {
"updated": "2011-09-14T00:00:00+00:00",
"name": "FlavorExtraData",
"links": [],
"namespace": "https://docs.openstack.org/ext/flavor_extra_data/api/v1.1",
"alias": "os-flavor-extra-data",
"description": "Provide additional data for flavors"
}, {
"updated": "2011-08-17T00:00:00+00:00",
"name": "VirtualInterfaces",
"links": [],
"namespace": "https://docs.openstack.org/ext/virtual_interfaces/api/v1.1",
"alias": "virtual_interfaces",
"description": "Virtual interface support"
}, {
"updated": "2011-07-19T00:00:00+00:00",
"name": "Createserverext",
"links": [],
"namespace": "https://docs.openstack.org/ext/createserverext/api/v1.1",
"alias": "os-create-server-ext",
"description": "Extended support to the Create Server v1.1 API"
}, {
"updated": "2011-08-08T00:00:00+00:00",
"name": "Keypairs",
"links": [],
"namespace": "https://docs.openstack.org/ext/keypairs/api/v1.1",
"alias": "os-keypairs",
"description": "Keypair Support"
}, {
"updated": "2011-08-25T00:00:00+00:00",
"name": "VSAs",
"links": [],
"namespace": "https://docs.openstack.org/ext/vsa/api/v1.1",
"alias": "zadr-vsa",
"description": "Virtual Storage Arrays support"
}, {
"updated": "2011-08-19T00:00:00+00:00",
"name": "SimpleTenantUsage",
"links": [],
"namespace": "https://docs.openstack.org/ext/os-simple-tenant-usage/api/v1.1",
"alias": "os-simple-tenant-usage",
"description": "Simple tenant usage extension"
}, {
"updated": "2011-08-18T00:00:00+00:00",
"name": "Rescue",
"links": [],
"namespace": "https://docs.openstack.org/ext/rescue/api/v1.1",
"alias": "os-rescue",
"description": "Instance rescue mode"
}, {
"updated": "2011-07-21T00:00:00+00:00",
"name": "SecurityGroups",
"links": [],
"namespace": "https://docs.openstack.org/ext/securitygroups/api/v1.1",
"alias": "security_groups",
"description": "Security group support"
}, {
"updated": "2011-06-16T00:00:00+00:00",
"name": "Floating_ips",
"links": [],
"namespace": "https://docs.openstack.org/ext/floating_ips/api/v1.1",
"alias": "os-floating-ips",
"description": "Floating IPs support"
}, {
"updated": "2011-06-16T00:00:00+00:00",
"name": "Users",
"links": [],
"namespace": "http://docs.openstack.org/compute/ext/users/api/v1.1",
"alias": "os-users",
"description": "Users support"
}
]
}

View File

@ -0,0 +1 @@
{"host": [{"resource": {"project": "(total)", "memory_mb": 16083, "host": "ubuntu", "cpu": 4, "disk_gb": 181}}, {"resource": {"project": "(used_now)", "memory_mb": 3396, "host": "ubuntu", "cpu": 3, "disk_gb": 5}}, {"resource": {"project": "(used_max)", "memory_mb": 6144, "host": "ubuntu", "cpu": 3, "disk_gb": 80}}, {"resource": {"project": "f8535069c3fb404cb61c873b1a0b4921", "memory_mb": 6144, "host": "ubuntu", "cpu": 3, "disk_gb": 80}}]}

View File

@ -0,0 +1 @@
{"hosts": [{"host_name": "ubuntu", "service": "compute"}]}

View File

@ -0,0 +1 @@
{"tenant_usage": {"total_memory_mb_usage": 0.0014847999999999999, "total_vcpus_usage": 7.249999999999999e-07, "total_hours": 4.833333333333333e-07, "tenant_id": "f8535069c3fb404cb61c873b1a0b4921", "stop": "2012-04-18 13:32:07.255830", "server_usages": [{"hours": 2.4166666666666665e-07, "uptime": 91149, "local_gb": 50, "ended_at": null, "name": "test1", "tenant_id": "f8535069c3fb404cb61c873b1a0b4921", "vcpus": 2, "memory_mb": 4096, "state": "active", "flavor": "m1.medium", "started_at": "2012-04-17 12:12:58"}, {"hours": 2.4166666666666665e-07, "uptime": 84710, "local_gb": 30, "ended_at": null, "name": "mish_test", "tenant_id": "f8535069c3fb404cb61c873b1a0b4921", "vcpus": 1, "memory_mb": 2048, "state": "active", "flavor": "m1.small", "started_at": "2012-04-17 14:00:17"}], "start": "2012-04-18 13:32:07.255743", "total_local_gb_usage": 1.933333333333333e-05}}

View File

@ -0,0 +1 @@
{"tenant_usages": [{"total_memory_mb_usage": 0.0015018666666666667, "total_vcpus_usage": 7.333333333333333e-07, "start": "2012-04-18 12:18:39.702411", "tenant_id": "f8535069c3fb404cb61c873b1a0b4921", "stop": "2012-04-18 12:18:39.702499", "total_hours": 4.888888888888889e-07, "total_local_gb_usage": 1.9555555555555557e-05}]

View File

@ -108,7 +108,7 @@ public class S3ApiMetadata extends BaseRestApiMetadata {
.version(S3AsyncClient.VERSION)
.defaultProperties(S3ApiMetadata.defaultProperties())
.context(CONTEXT_TOKEN)
.wrapper(TypeToken.of(S3BlobStoreContext.class))
.view(TypeToken.of(S3BlobStoreContext.class))
.defaultModules(ImmutableSet.<Class<? extends Module>>of(S3RestClientModule.class, S3BlobStoreContextModule.class));
}

View File

@ -95,7 +95,7 @@ import com.google.inject.Provides;
* Provides asynchronous access to S3 via their REST API.
* <p/>
* All commands return a ListenableFuture of the result from S3. Any exceptions incurred during
* processing will be wrapped in an {@link ExecutionException} as documented in
* processing will be backend in an {@link ExecutionException} as documented in
* {@link ListenableFuture#get()}.
*
* @author Adrian Cole

View File

@ -44,7 +44,7 @@ import com.google.inject.Provides;
* Provides access to S3 via their REST API.
* <p/>
* All commands return a Future of the result from S3. Any exceptions incurred during
* processing will be wrapped in an {@link ExecutionException} as documented in
* processing will be backend in an {@link ExecutionException} as documented in
* {@link Future#get()}.
*
* @author Adrian Cole

View File

@ -18,11 +18,10 @@
*/
package org.jclouds.s3.blobstore.internal;
import java.io.Closeable;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.jclouds.Context;
import org.jclouds.blobstore.AsyncBlobStore;
import org.jclouds.blobstore.BlobMap;
import org.jclouds.blobstore.BlobRequestSigner;
@ -45,11 +44,11 @@ import com.google.common.reflect.TypeToken;
public class S3BlobStoreContextImpl extends BlobStoreContextImpl implements S3BlobStoreContext {
@Inject
public S3BlobStoreContextImpl(@Provider Closeable wrapped, @Provider TypeToken<? extends Closeable> wrappedType,
public S3BlobStoreContextImpl(@Provider Context backend, @Provider TypeToken<? extends Context> backendType,
BlobMap.Factory blobMapFactory, Utils utils, ConsistencyModel consistencyModel,
InputStreamMap.Factory inputStreamMapFactory, AsyncBlobStore ablobStore, BlobStore blobStore,
BlobRequestSigner blobRequestSigner) {
super(wrapped, wrappedType, blobMapFactory, utils, consistencyModel, inputStreamMapFactory, ablobStore,
super(backend, backendType, blobMapFactory, utils, consistencyModel, inputStreamMapFactory, ablobStore,
blobStore, blobRequestSigner);
}

View File

@ -21,8 +21,6 @@ package org.jclouds.s3.filters;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.collect.Iterables.any;
import static com.google.common.collect.Iterables.get;
import static org.jclouds.Constants.PROPERTY_CREDENTIAL;
import static org.jclouds.Constants.PROPERTY_IDENTITY;
import static org.jclouds.aws.reference.AWSConstants.PROPERTY_AUTH_TAG;
import static org.jclouds.aws.reference.AWSConstants.PROPERTY_HEADER_TAG;
import static org.jclouds.http.utils.ModifyRequest.parseQueryToMap;
@ -35,8 +33,8 @@ import java.lang.annotation.Annotation;
import java.util.Arrays;
import java.util.Collection;
import java.util.Locale;
import java.util.Map.Entry;
import java.util.Set;
import java.util.Map.Entry;
import javax.annotation.Resource;
import javax.inject.Inject;
@ -57,6 +55,8 @@ import org.jclouds.http.internal.SignatureWire;
import org.jclouds.io.InputSuppliers;
import org.jclouds.logging.Logger;
import org.jclouds.rest.RequestSigner;
import org.jclouds.rest.annotations.Credential;
import org.jclouds.rest.annotations.Identity;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.jclouds.s3.Bucket;
@ -114,7 +114,7 @@ public class RequestAuthorizeSignature implements HttpRequestFilter, RequestSign
public RequestAuthorizeSignature(SignatureWire signatureWire, @Named(PROPERTY_AUTH_TAG) String authTag,
@Named(PROPERTY_S3_VIRTUAL_HOST_BUCKETS) boolean isVhostStyle,
@Named(PROPERTY_S3_SERVICE_PATH) String servicePath, @Named(PROPERTY_HEADER_TAG) String headerTag,
@Named(PROPERTY_IDENTITY) String accessKey, @Named(PROPERTY_CREDENTIAL) String secretKey,
@Identity String accessKey, @Credential String secretKey,
@TimeStamp Provider<String> timeStampProvider, Crypto crypto, HttpUtils utils) {
this.isVhostStyle = isVhostStyle;
this.servicePath = servicePath;

View File

@ -68,7 +68,7 @@ public class S3ClientLiveTest extends BaseBlobStoreIntegrationTest {
}
public S3Client getApi() {
return context.unwrap(S3ApiMetadata.CONTEXT_TOKEN).getApi();
return view.unwrap(S3ApiMetadata.CONTEXT_TOKEN).getApi();
}
/**

Some files were not shown because too many files have changed in this diff Show More