Issue 1037: consolidate keystone endpoints to end with /v2.0/ + change hpcloud to default to user/pass auth

This commit is contained in:
Adrian Cole 2012-07-29 16:29:54 -07:00
parent ba56e2dce4
commit 735da0a285
31 changed files with 94 additions and 124 deletions

View File

@ -35,7 +35,7 @@
<properties> <properties>
<!-- keystone endpoint --> <!-- keystone endpoint -->
<test.openstack-keystone.endpoint>http://localhost:5000</test.openstack-keystone.endpoint> <test.openstack-keystone.endpoint>http://localhost:5000/v${jclouds.api-version}/</test.openstack-keystone.endpoint>
<!-- keystone version --> <!-- keystone version -->
<test.openstack-keystone.api-version>2.0</test.openstack-keystone.api-version> <test.openstack-keystone.api-version>2.0</test.openstack-keystone.api-version>
<test.openstack-keystone.build-version></test.openstack-keystone.build-version> <test.openstack-keystone.build-version></test.openstack-keystone.build-version>

View File

@ -43,7 +43,6 @@ import com.google.common.util.concurrent.ListenableFuture;
* /> * />
* @author Adrian Cole * @author Adrian Cole
*/ */
@Path("/v2.0")
public interface AuthenticationAsyncApi { public interface AuthenticationAsyncApi {
/** /**
@ -76,8 +75,6 @@ public interface AuthenticationAsyncApi {
@Consumes(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON)
@Path("/tokens") @Path("/tokens")
@MapBinder(BindAuthToJsonPayload.class) @MapBinder(BindAuthToJsonPayload.class)
// TODO: is tenantName permanent? or should we switch to tenantId at some point. seems most tools
// still use tenantName
ListenableFuture<Access> authenticateWithTenantNameAndCredentials(@Nullable @PayloadParam("tenantName") String tenantName, ListenableFuture<Access> authenticateWithTenantNameAndCredentials(@Nullable @PayloadParam("tenantName") String tenantName,
ApiAccessKeyCredentials apiAccessKeyCredentials); ApiAccessKeyCredentials apiAccessKeyCredentials);

View File

@ -28,7 +28,6 @@ import org.jclouds.apis.ApiMetadata;
import org.jclouds.openstack.keystone.v2_0.config.CredentialTypes; import org.jclouds.openstack.keystone.v2_0.config.CredentialTypes;
import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule; import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule;
import org.jclouds.openstack.keystone.v2_0.config.KeystoneParserModule; import org.jclouds.openstack.keystone.v2_0.config.KeystoneParserModule;
import org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties;
import org.jclouds.openstack.keystone.v2_0.config.KeystoneRestClientModule; import org.jclouds.openstack.keystone.v2_0.config.KeystoneRestClientModule;
import org.jclouds.openstack.keystone.v2_0.config.KeystoneRestClientModule.KeystoneAdminURLModule; import org.jclouds.openstack.keystone.v2_0.config.KeystoneRestClientModule.KeystoneAdminURLModule;
import org.jclouds.openstack.v2_0.ServiceType; import org.jclouds.openstack.v2_0.ServiceType;
@ -69,10 +68,8 @@ public class KeystoneApiMetadata extends BaseRestApiMetadata {
public static Properties defaultProperties() { public static Properties defaultProperties() {
Properties properties = BaseRestApiMetadata.defaultProperties(); Properties properties = BaseRestApiMetadata.defaultProperties();
// TODO: this doesn't actually do anything yet.
properties.setProperty(KeystoneProperties.VERSION, "2.0");
properties.setProperty(CREDENTIAL_TYPE, CredentialTypes.PASSWORD_CREDENTIALS); properties.setProperty(CREDENTIAL_TYPE, CredentialTypes.PASSWORD_CREDENTIALS);
properties.put(SERVICE_TYPE, ServiceType.IDENTITY); properties.setProperty(SERVICE_TYPE, ServiceType.IDENTITY);
return properties; return properties;
} }
@ -82,11 +79,12 @@ public class KeystoneApiMetadata extends BaseRestApiMetadata {
super(api, asyncApi); super(api, asyncApi);
id("openstack-keystone") id("openstack-keystone")
.name("OpenStack Keystone Essex+ API") .name("OpenStack Keystone Essex+ API")
.identityName("tenantId:user") .identityName("${tenantName}:${userName} or ${userName}, if your keystone supports a default tenant")
.credentialName("password") .credentialName("${password}")
.endpointName("KeyStone base url ending in /v${jclouds.api-version}/")
.documentation(URI.create("http://api.openstack.org/")) .documentation(URI.create("http://api.openstack.org/"))
.version("2.0") .version("2.0")
.defaultEndpoint("http://localhost:5000") .defaultEndpoint("http://localhost:5000/v${jclouds.api-version}/")
.defaultProperties(KeystoneApiMetadata.defaultProperties()) .defaultProperties(KeystoneApiMetadata.defaultProperties())
.defaultModules(ImmutableSet.<Class<? extends Module>>builder() .defaultModules(ImmutableSet.<Class<? extends Module>>builder()
.add(KeystoneAuthenticationModule.class) .add(KeystoneAuthenticationModule.class)

View File

@ -20,10 +20,8 @@ package org.jclouds.openstack.keystone.v2_0;
import javax.ws.rs.Consumes; import javax.ws.rs.Consumes;
import javax.ws.rs.GET; import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import org.jclouds.Constants;
import org.jclouds.openstack.keystone.v2_0.domain.ApiMetadata; import org.jclouds.openstack.keystone.v2_0.domain.ApiMetadata;
import org.jclouds.openstack.keystone.v2_0.features.ServiceAsyncApi; import org.jclouds.openstack.keystone.v2_0.features.ServiceAsyncApi;
import org.jclouds.openstack.keystone.v2_0.features.TenantAsyncApi; import org.jclouds.openstack.keystone.v2_0.features.TenantAsyncApi;
@ -53,7 +51,6 @@ public interface KeystoneAsyncApi {
@GET @GET
@SelectJson("version") @SelectJson("version")
@Consumes(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON)
@Path("/v{" + Constants.PROPERTY_API_VERSION + "}/")
@ExceptionParser(ReturnNullOnNotFoundOr404.class) @ExceptionParser(ReturnNullOnNotFoundOr404.class)
ListenableFuture<ApiMetadata> getApiMetadata(); ListenableFuture<ApiMetadata> getApiMetadata();

View File

@ -60,11 +60,6 @@ public interface KeystoneProperties {
*/ */
public static final String REQUIRES_TENANT = "jclouds.keystone.requires-tenant"; public static final String REQUIRES_TENANT = "jclouds.keystone.requires-tenant";
/**
* version of the keystone service
*/
public static final String VERSION = "jclouds.keystone.version";
/** /**
* type of the keystone service. ex. {@code compute} * type of the keystone service. ex. {@code compute}
* *

View File

@ -22,24 +22,25 @@ import static org.jclouds.util.Suppliers2.getLastValueInMap;
import java.net.URI; import java.net.URI;
import java.util.Map; import java.util.Map;
import java.util.NoSuchElementException;
import javax.inject.Named;
import javax.inject.Singleton; import javax.inject.Singleton;
import org.jclouds.http.HttpErrorHandler; import org.jclouds.http.HttpErrorHandler;
import org.jclouds.http.annotation.ClientError; import org.jclouds.http.annotation.ClientError;
import org.jclouds.http.annotation.Redirection; import org.jclouds.http.annotation.Redirection;
import org.jclouds.http.annotation.ServerError; import org.jclouds.http.annotation.ServerError;
import org.jclouds.openstack.keystone.v2_0.KeystoneAsyncApi; import org.jclouds.location.Provider;
import org.jclouds.openstack.keystone.v2_0.KeystoneApi; import org.jclouds.openstack.keystone.v2_0.KeystoneApi;
import org.jclouds.openstack.keystone.v2_0.features.ServiceAsyncApi; import org.jclouds.openstack.keystone.v2_0.KeystoneAsyncApi;
import org.jclouds.openstack.keystone.v2_0.features.ServiceApi; import org.jclouds.openstack.keystone.v2_0.features.ServiceApi;
import org.jclouds.openstack.keystone.v2_0.features.TenantAsyncApi; import org.jclouds.openstack.keystone.v2_0.features.ServiceAsyncApi;
import org.jclouds.openstack.keystone.v2_0.features.TenantApi; import org.jclouds.openstack.keystone.v2_0.features.TenantApi;
import org.jclouds.openstack.keystone.v2_0.features.TokenAsyncApi; import org.jclouds.openstack.keystone.v2_0.features.TenantAsyncApi;
import org.jclouds.openstack.keystone.v2_0.features.TokenApi; import org.jclouds.openstack.keystone.v2_0.features.TokenApi;
import org.jclouds.openstack.keystone.v2_0.features.UserAsyncApi; import org.jclouds.openstack.keystone.v2_0.features.TokenAsyncApi;
import org.jclouds.openstack.keystone.v2_0.features.UserApi; import org.jclouds.openstack.keystone.v2_0.features.UserApi;
import org.jclouds.openstack.keystone.v2_0.features.UserAsyncApi;
import org.jclouds.openstack.keystone.v2_0.functions.PresentWhenAdminURLExistsForIdentityService; import org.jclouds.openstack.keystone.v2_0.functions.PresentWhenAdminURLExistsForIdentityService;
import org.jclouds.openstack.keystone.v2_0.handlers.KeystoneErrorHandler; import org.jclouds.openstack.keystone.v2_0.handlers.KeystoneErrorHandler;
import org.jclouds.openstack.keystone.v2_0.suppliers.RegionIdToAdminURIFromAccessForTypeAndVersion; import org.jclouds.openstack.keystone.v2_0.suppliers.RegionIdToAdminURIFromAccessForTypeAndVersion;
@ -47,8 +48,10 @@ import org.jclouds.openstack.keystone.v2_0.suppliers.RegionIdToAdminURISupplier;
import org.jclouds.openstack.v2_0.ServiceType; import org.jclouds.openstack.v2_0.ServiceType;
import org.jclouds.openstack.v2_0.services.Identity; import org.jclouds.openstack.v2_0.services.Identity;
import org.jclouds.rest.ConfiguresRestClient; import org.jclouds.rest.ConfiguresRestClient;
import org.jclouds.rest.annotations.ApiVersion;
import org.jclouds.rest.config.RestClientModule; import org.jclouds.rest.config.RestClientModule;
import org.jclouds.rest.functions.ImplicitOptionalConverter; import org.jclouds.rest.functions.ImplicitOptionalConverter;
import org.jclouds.util.Suppliers2;
import com.google.common.base.Supplier; import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
@ -90,13 +93,22 @@ public class KeystoneRestClientModule<S extends KeystoneApi, A extends KeystoneA
RegionIdToAdminURIFromAccessForTypeAndVersion.class).build(RegionIdToAdminURISupplier.Factory.class)); RegionIdToAdminURIFromAccessForTypeAndVersion.class).build(RegionIdToAdminURISupplier.Factory.class));
} }
// return any identity url. /**
* in some cases, there is no {@link ServiceType#IDENTITY} entry in the service catalog. In
* other cases, there's no adminURL entry present. Fallback to the provider in this case.
*/
@Provides @Provides
@Singleton @Singleton
@Identity @Identity
protected Supplier<URI> provideStorageUrl(RegionIdToAdminURISupplier.Factory factory, protected Supplier<URI> provideStorageUrl(final RegionIdToAdminURISupplier.Factory factory,
@Named(KeystoneProperties.VERSION) String version) { @ApiVersion final String version, @Provider final Supplier<URI> providerURI) {
return getLastValueInMap(factory.createForApiTypeAndVersion(ServiceType.IDENTITY, version)); Supplier<URI> identityServiceForVersion = getLastValueInMap(factory.createForApiTypeAndVersion(
ServiceType.IDENTITY, version));
Supplier<URI> whenIdentityServiceIsntListedFallbackToProviderURI = Suppliers2.onThrowable(
identityServiceForVersion, NoSuchElementException.class, providerURI);
Supplier<URI> whenIdentityServiceHasNoAdminURLFallbackToProviderURI = Suppliers2.or(
whenIdentityServiceIsntListedFallbackToProviderURI, providerURI);
return whenIdentityServiceHasNoAdminURLFallbackToProviderURI;
} }
} }

View File

@ -25,7 +25,6 @@ import javax.ws.rs.GET;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import org.jclouds.Constants;
import org.jclouds.openstack.keystone.v2_0.domain.Tenant; import org.jclouds.openstack.keystone.v2_0.domain.Tenant;
import org.jclouds.openstack.keystone.v2_0.filters.AuthenticateRequest; import org.jclouds.openstack.keystone.v2_0.filters.AuthenticateRequest;
import org.jclouds.rest.annotations.ExceptionParser; import org.jclouds.rest.annotations.ExceptionParser;
@ -46,7 +45,6 @@ import com.google.common.util.concurrent.ListenableFuture;
* /> * />
* @author Adam Lowe * @author Adam Lowe
*/ */
@Path("/v{" + Constants.PROPERTY_API_VERSION + "}")
@SkipEncoding( { '/', '=' }) @SkipEncoding( { '/', '=' })
public interface ServiceAsyncApi { public interface ServiceAsyncApi {

View File

@ -2,6 +2,7 @@ package org.jclouds.openstack.keystone.v2_0.suppliers;
import java.net.URI; import java.net.URI;
import java.util.Map; import java.util.Map;
import java.util.NoSuchElementException;
import org.jclouds.javax.annotation.Nullable; import org.jclouds.javax.annotation.Nullable;
@ -16,15 +17,16 @@ import com.google.inject.assistedinject.Assisted;
public interface RegionIdToAdminURISupplier extends Supplier<Map<String, Supplier<URI>>> { public interface RegionIdToAdminURISupplier extends Supplier<Map<String, Supplier<URI>>> {
static interface Factory { static interface Factory {
/** /**
* *
* @param apiType * @param apiType
* type of the api, according to the provider. ex. {@code compute} {@code * type of the api, according to the provider. ex. {@code compute}
* object-store} * {@code object-store}
* @param apiVersion * @param apiVersion
* version of the api, or null * version of the api, or null
* @return regions mapped to default uri * @return regions mapped to default uri
* @throws NoSuchElementException if the {@code apiType} is not present in the catalog
*/ */
RegionIdToAdminURISupplier createForApiTypeAndVersion(@Assisted("apiType") String apiType, RegionIdToAdminURISupplier createForApiTypeAndVersion(@Assisted("apiType") String apiType,
@Nullable @Assisted("apiVersion") String apiVersion); @Nullable @Assisted("apiVersion") String apiVersion) throws NoSuchElementException;
} }
} }

View File

@ -51,7 +51,7 @@ public class TokenApiLiveTest extends BaseKeystoneApiLiveTest {
@BeforeMethod @BeforeMethod
public void grabToken() { public void grabToken() {
AuthenticateRequest ar = keystoneContext.getUtils().getInjector().getInstance(AuthenticateRequest.class); AuthenticateRequest ar = keystoneContext.getUtils().getInjector().getInstance(AuthenticateRequest.class);
HttpRequest test = ar.filter(HttpRequest.builder().method("GET").endpoint(endpoint).build()); HttpRequest test = ar.filter(HttpRequest.builder().method("GET").endpoint(context.getProviderMetadata().getEndpoint()).build());
token = Iterables.getOnlyElement(test.getHeaders().get("X-Auth-Token")); token = Iterables.getOnlyElement(test.getHeaders().get("X-Auth-Token"));
} }

View File

@ -35,7 +35,7 @@
<properties> <properties>
<!-- keystone endpoint --> <!-- keystone endpoint -->
<test.openstack-nova.endpoint>http://localhost:5000</test.openstack-nova.endpoint> <test.openstack-nova.endpoint>http://localhost:5000/v2.0/</test.openstack-nova.endpoint>
<!-- keystone version --> <!-- keystone version -->
<test.openstack-nova.api-version>1.1</test.openstack-nova.api-version> <test.openstack-nova.api-version>1.1</test.openstack-nova.api-version>
<test.openstack-nova.build-version></test.openstack-nova.build-version> <test.openstack-nova.build-version></test.openstack-nova.build-version>

View File

@ -20,7 +20,6 @@ package org.jclouds.openstack.nova.v2_0;
import static org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties.CREDENTIAL_TYPE; import static org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties.CREDENTIAL_TYPE;
import static org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties.SERVICE_TYPE; import static org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties.SERVICE_TYPE;
import static org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties.VERSION;
import static org.jclouds.openstack.nova.v2_0.config.NovaProperties.AUTO_ALLOCATE_FLOATING_IPS; import static org.jclouds.openstack.nova.v2_0.config.NovaProperties.AUTO_ALLOCATE_FLOATING_IPS;
import static org.jclouds.openstack.nova.v2_0.config.NovaProperties.AUTO_GENERATE_KEYPAIRS; import static org.jclouds.openstack.nova.v2_0.config.NovaProperties.AUTO_GENERATE_KEYPAIRS;
import static org.jclouds.openstack.nova.v2_0.config.NovaProperties.TIMEOUT_SECURITYGROUP_PRESENT; import static org.jclouds.openstack.nova.v2_0.config.NovaProperties.TIMEOUT_SECURITYGROUP_PRESENT;
@ -79,9 +78,6 @@ public class NovaApiMetadata extends BaseRestApiMetadata {
properties.setProperty(SERVICE_TYPE, ServiceType.COMPUTE); properties.setProperty(SERVICE_TYPE, ServiceType.COMPUTE);
properties.setProperty(CREDENTIAL_TYPE, CredentialTypes.PASSWORD_CREDENTIALS); properties.setProperty(CREDENTIAL_TYPE, CredentialTypes.PASSWORD_CREDENTIALS);
// TODO: this doesn't actually do anything yet.
properties.setProperty(VERSION, "2.0");
properties.setProperty(AUTO_ALLOCATE_FLOATING_IPS, "false"); properties.setProperty(AUTO_ALLOCATE_FLOATING_IPS, "false");
properties.setProperty(AUTO_GENERATE_KEYPAIRS, "false"); properties.setProperty(AUTO_GENERATE_KEYPAIRS, "false");
properties.setProperty(TIMEOUT_SECURITYGROUP_PRESENT, "500"); properties.setProperty(TIMEOUT_SECURITYGROUP_PRESENT, "500");
@ -94,11 +90,12 @@ public class NovaApiMetadata extends BaseRestApiMetadata {
super(NovaApi.class, NovaAsyncApi.class); super(NovaApi.class, NovaAsyncApi.class);
id("openstack-nova") id("openstack-nova")
.name("OpenStack Nova Diablo+ API") .name("OpenStack Nova Diablo+ API")
.identityName("tenantName:user or user") .identityName("${tenantName}:${userName} or ${userName}, if your keystone supports a default tenant")
.credentialName("password") .credentialName("${password}")
.endpointName("KeyStone base url ending in /v2.0/")
.documentation(URI.create("http://api.openstack.org/")) .documentation(URI.create("http://api.openstack.org/"))
.version("1.1") .version("1.1")
.defaultEndpoint("http://localhost:5000") .defaultEndpoint("http://localhost:5000/v2.0/")
.defaultProperties(NovaApiMetadata.defaultProperties()) .defaultProperties(NovaApiMetadata.defaultProperties())
.view(TypeToken.of(ComputeServiceContext.class)) .view(TypeToken.of(ComputeServiceContext.class))
.defaultModules(ImmutableSet.<Class<? extends Module>>builder() .defaultModules(ImmutableSet.<Class<? extends Module>>builder()

View File

@ -35,11 +35,11 @@
<properties> <properties>
<!-- keystone endpoint --> <!-- keystone endpoint -->
<test.rackspace-cloudidentity.endpoint>https://identity.api.rackspacecloud.com</test.rackspace-cloudidentity.endpoint> <test.rackspace-cloudidentity.endpoint>https://identity.api.rackspacecloud.com/v${jclouds.api-version}/</test.rackspace-cloudidentity.endpoint>
<!-- keystone version --> <!-- keystone version -->
<test.rackspace-cloudidentity.api-version>2.0</test.rackspace-cloudidentity.api-version> <test.rackspace-cloudidentity.api-version>2.0</test.rackspace-cloudidentity.api-version>
<test.rackspace-cloudidentity.build-version></test.rackspace-cloudidentity.build-version> <test.rackspace-cloudidentity.build-version></test.rackspace-cloudidentity.build-version>
<test.rackspace-cloudidentity.identity>413274:${test.rackspace-us.identity}</test.rackspace-cloudidentity.identity> <test.rackspace-cloudidentity.identity>${test.rackspace-us.identity}</test.rackspace-cloudidentity.identity>
<test.rackspace-cloudidentity.credential>${test.rackspace-us.credential}</test.rackspace-cloudidentity.credential> <test.rackspace-cloudidentity.credential>${test.rackspace-us.credential}</test.rackspace-cloudidentity.credential>
<test.jclouds.keystone.credential-type>RAX-KSKEY:apiKeyCredentials</test.jclouds.keystone.credential-type> <test.jclouds.keystone.credential-type>RAX-KSKEY:apiKeyCredentials</test.jclouds.keystone.credential-type>

View File

@ -25,9 +25,9 @@ import java.net.URI;
import java.util.Properties; import java.util.Properties;
import org.jclouds.apis.ApiMetadata; import org.jclouds.apis.ApiMetadata;
import org.jclouds.openstack.keystone.v2_0.KeystoneApi;
import org.jclouds.openstack.keystone.v2_0.KeystoneApiMetadata; import org.jclouds.openstack.keystone.v2_0.KeystoneApiMetadata;
import org.jclouds.openstack.keystone.v2_0.KeystoneAsyncApi; import org.jclouds.openstack.keystone.v2_0.KeystoneAsyncApi;
import org.jclouds.openstack.keystone.v2_0.KeystoneApi;
import org.jclouds.openstack.keystone.v2_0.config.KeystoneParserModule; import org.jclouds.openstack.keystone.v2_0.config.KeystoneParserModule;
import org.jclouds.openstack.keystone.v2_0.config.KeystoneRestClientModule; import org.jclouds.openstack.keystone.v2_0.config.KeystoneRestClientModule;
import org.jclouds.openstack.keystone.v2_0.config.KeystoneRestClientModule.KeystoneAdminURLModule; import org.jclouds.openstack.keystone.v2_0.config.KeystoneRestClientModule.KeystoneAdminURLModule;
@ -73,7 +73,6 @@ public class CloudIdentityApiMetadata extends KeystoneApiMetadata {
public static Properties defaultProperties() { public static Properties defaultProperties() {
Properties properties = KeystoneApiMetadata.defaultProperties(); Properties properties = KeystoneApiMetadata.defaultProperties();
properties.setProperty(CREDENTIAL_TYPE, CloudIdentityCredentialTypes.API_KEY_CREDENTIALS); properties.setProperty(CREDENTIAL_TYPE, CloudIdentityCredentialTypes.API_KEY_CREDENTIALS);
return properties; return properties;
} }
@ -82,9 +81,10 @@ public class CloudIdentityApiMetadata extends KeystoneApiMetadata {
super(KeystoneApi.class, KeystoneAsyncApi.class); super(KeystoneApi.class, KeystoneAsyncApi.class);
id("rackspace-cloudidentity") id("rackspace-cloudidentity")
.name("Rackspace Cloud Identity Service") .name("Rackspace Cloud Identity Service")
.defaultEndpoint("https://identity.api.rackspacecloud.com") .identityName("${userName}")
.identityName("username") .credentialName("${apiKey}")
.credentialName("API Key") .defaultEndpoint("https://identity.api.rackspacecloud.com/v${jclouds.api-version}/")
.endpointName("identity service url ending in /v${jclouds.api-version}/")
.defaultProperties(CloudIdentityApiMetadata.defaultProperties()) .defaultProperties(CloudIdentityApiMetadata.defaultProperties())
.context(CONTEXT_TOKEN) .context(CONTEXT_TOKEN)
.documentation(URI.create("http://docs.rackspace.com/auth/api/v2.0/auth-api-devguide/")) .documentation(URI.create("http://docs.rackspace.com/auth/api/v2.0/auth-api-devguide/"))

View File

@ -43,7 +43,6 @@ import com.google.common.util.concurrent.ListenableFuture;
* /> * />
* @author Adrian Cole * @author Adrian Cole
*/ */
@Path("/v2.0")
public interface CloudIdentityAuthenticationAsyncApi extends AuthenticationAsyncApi { public interface CloudIdentityAuthenticationAsyncApi extends AuthenticationAsyncApi {
/** /**

View File

@ -27,7 +27,6 @@ import java.util.Properties;
import org.jclouds.apis.ApiMetadata; import org.jclouds.apis.ApiMetadata;
import org.jclouds.openstack.keystone.v2_0.config.CredentialTypes; import org.jclouds.openstack.keystone.v2_0.config.CredentialTypes;
import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule; import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule;
import org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties;
import org.jclouds.openstack.services.ServiceType; import org.jclouds.openstack.services.ServiceType;
import org.jclouds.openstack.swift.blobstore.config.SwiftBlobStoreContextModule; import org.jclouds.openstack.swift.blobstore.config.SwiftBlobStoreContextModule;
import org.jclouds.openstack.swift.config.SwiftKeystoneRestClientModule; import org.jclouds.openstack.swift.config.SwiftKeystoneRestClientModule;
@ -72,22 +71,24 @@ public class SwiftKeystoneApiMetadata extends SwiftApiMetadata {
public static Properties defaultProperties() { public static Properties defaultProperties() {
Properties properties = SwiftApiMetadata.defaultProperties(); Properties properties = SwiftApiMetadata.defaultProperties();
properties.setProperty(SERVICE_TYPE, ServiceType.OBJECT_STORE); properties.setProperty(SERVICE_TYPE, ServiceType.OBJECT_STORE);
// TODO: this doesn't actually do anything yet. properties.setProperty(CREDENTIAL_TYPE, CredentialTypes.PASSWORD_CREDENTIALS);
properties.setProperty(KeystoneProperties.VERSION, "2.0");
properties.setProperty(CREDENTIAL_TYPE, CredentialTypes.API_ACCESS_KEY_CREDENTIALS);
properties.remove(PROPERTY_REGIONS); properties.remove(PROPERTY_REGIONS);
return properties; return properties;
} }
public static class Builder extends SwiftApiMetadata.Builder { public static class Builder extends SwiftApiMetadata.Builder {
protected Builder() { protected Builder() {
super(SwiftKeystoneClient.class, SwiftKeystoneAsyncClient.class); this(SwiftKeystoneClient.class, SwiftKeystoneAsyncClient.class);
}
protected Builder(Class<?> syncClient, Class<?> asyncClient) {
super(syncClient, asyncClient);
id("swift-keystone") id("swift-keystone")
.name("OpenStack Swift with Keystone authentication") .name("OpenStack Swift with Keystone authentication")
.identityName("tenantName:user or user") .identityName("${tenantName}:${userName} or ${userName}, if your keystone supports a default tenant")
.credentialName("password") .credentialName("${password}")
.defaultEndpoint("http://localhost:5000") .endpointName("KeyStone base url ending in /v2.0/")
.endpointName("keystone url") .defaultEndpoint("http://localhost:5000/v2.0/")
.context(CONTEXT_TOKEN) .context(CONTEXT_TOKEN)
.defaultProperties(SwiftKeystoneApiMetadata.defaultProperties()) .defaultProperties(SwiftKeystoneApiMetadata.defaultProperties())
.defaultModules(ImmutableSet.<Class<? extends Module>>of(KeystoneStorageEndpointModule.class, KeystoneAuthenticationModule.RegionModule.class, .defaultModules(ImmutableSet.<Class<? extends Module>>of(KeystoneStorageEndpointModule.class, KeystoneAuthenticationModule.RegionModule.class,

View File

@ -35,7 +35,7 @@
<properties> <properties>
<!-- keystone endpoint --> <!-- keystone endpoint -->
<test.openstack-glance.endpoint>http://localhost:5000</test.openstack-glance.endpoint> <test.openstack-glance.endpoint>http://localhost:5000/v2.0/</test.openstack-glance.endpoint>
<!-- keystone version --> <!-- keystone version -->
<test.openstack-glance.api-version>1.0</test.openstack-glance.api-version> <test.openstack-glance.api-version>1.0</test.openstack-glance.api-version>
<test.openstack-glance.build-version></test.openstack-glance.build-version> <test.openstack-glance.build-version></test.openstack-glance.build-version>

View File

@ -29,7 +29,6 @@ import org.jclouds.openstack.glance.v1_0.config.GlanceRestClientModule;
import org.jclouds.openstack.keystone.v2_0.config.CredentialTypes; import org.jclouds.openstack.keystone.v2_0.config.CredentialTypes;
import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule; import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule;
import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule.RegionModule; import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule.RegionModule;
import org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties;
import org.jclouds.openstack.v2_0.ServiceType; import org.jclouds.openstack.v2_0.ServiceType;
import org.jclouds.rest.RestContext; import org.jclouds.rest.RestContext;
import org.jclouds.rest.internal.BaseRestApiMetadata; import org.jclouds.rest.internal.BaseRestApiMetadata;
@ -69,9 +68,6 @@ public class GlanceApiMetadata extends BaseRestApiMetadata {
Properties properties = BaseRestApiMetadata.defaultProperties(); Properties properties = BaseRestApiMetadata.defaultProperties();
properties.setProperty(SERVICE_TYPE, ServiceType.IMAGE); properties.setProperty(SERVICE_TYPE, ServiceType.IMAGE);
properties.setProperty(CREDENTIAL_TYPE, CredentialTypes.PASSWORD_CREDENTIALS); properties.setProperty(CREDENTIAL_TYPE, CredentialTypes.PASSWORD_CREDENTIALS);
// TODO: this doesn't actually do anything yet.
properties.setProperty(KeystoneProperties.VERSION, "2.0");
return properties; return properties;
} }
@ -81,11 +77,12 @@ public class GlanceApiMetadata extends BaseRestApiMetadata {
super(GlanceApi.class, GlanceAsyncApi.class); super(GlanceApi.class, GlanceAsyncApi.class);
id("openstack-glance") id("openstack-glance")
.name("OpenStack Glance API") .name("OpenStack Glance API")
.identityName("tenantName:user or user") .identityName("${tenantName}:${userName} or ${userName}, if your keystone supports a default tenant")
.credentialName("password") .credentialName("${password}")
.endpointName("KeyStone base url ending in /v2.0/")
.documentation(URI.create("http://glance.openstack.org/glanceapi.html")) .documentation(URI.create("http://glance.openstack.org/glanceapi.html"))
.version("1.0") .version("1.0")
.defaultEndpoint("http://localhost:5000") .defaultEndpoint("http://localhost:5000/v2.0/")
.defaultProperties(GlanceApiMetadata.defaultProperties()) .defaultProperties(GlanceApiMetadata.defaultProperties())
.defaultModules(ImmutableSet.<Class<? extends Module>>builder() .defaultModules(ImmutableSet.<Class<? extends Module>>builder()
.add(KeystoneAuthenticationModule.class) .add(KeystoneAuthenticationModule.class)

View File

@ -35,7 +35,7 @@
<properties> <properties>
<!-- keystone endpoint --> <!-- keystone endpoint -->
<test.openstack-quantum.endpoint>http://localhost:5000</test.openstack-quantum.endpoint> <test.openstack-quantum.endpoint>http://localhost:5000/v2.0/</test.openstack-quantum.endpoint>
<!-- keystone version --> <!-- keystone version -->
<test.openstack-quantum.api-version>1.0</test.openstack-quantum.api-version> <test.openstack-quantum.api-version>1.0</test.openstack-quantum.api-version>
<test.openstack-quantum.build-version></test.openstack-quantum.build-version> <test.openstack-quantum.build-version></test.openstack-quantum.build-version>

View File

@ -28,7 +28,6 @@ import org.jclouds.apis.ApiMetadata;
import org.jclouds.openstack.keystone.v2_0.config.CredentialTypes; import org.jclouds.openstack.keystone.v2_0.config.CredentialTypes;
import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule; import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule;
import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule.RegionModule; import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule.RegionModule;
import org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties;
import org.jclouds.openstack.quantum.v1_0.config.QuantumRestClientModule; import org.jclouds.openstack.quantum.v1_0.config.QuantumRestClientModule;
import org.jclouds.openstack.v2_0.ServiceType; import org.jclouds.openstack.v2_0.ServiceType;
import org.jclouds.rest.RestContext; import org.jclouds.rest.RestContext;
@ -68,9 +67,6 @@ public class QuantumApiMetadata extends BaseRestApiMetadata {
Properties properties = BaseRestApiMetadata.defaultProperties(); Properties properties = BaseRestApiMetadata.defaultProperties();
properties.setProperty(SERVICE_TYPE, ServiceType.NETWORK); properties.setProperty(SERVICE_TYPE, ServiceType.NETWORK);
properties.setProperty(CREDENTIAL_TYPE, CredentialTypes.PASSWORD_CREDENTIALS); properties.setProperty(CREDENTIAL_TYPE, CredentialTypes.PASSWORD_CREDENTIALS);
// TODO: this doesn't actually do anything yet.
properties.setProperty(KeystoneProperties.VERSION, "2.0");
return properties; return properties;
} }
@ -80,11 +76,12 @@ public class QuantumApiMetadata extends BaseRestApiMetadata {
super(QuantumApi.class, QuantumAsyncApi.class); super(QuantumApi.class, QuantumAsyncApi.class);
id("openstack-quantum") id("openstack-quantum")
.name("OpenStack Quantum API") .name("OpenStack Quantum API")
.identityName("tenantName:user or user") .identityName("${tenantName}:${userName} or ${userName}, if your keystone supports a default tenant")
.credentialName("password") .credentialName("${password}")
.endpointName("KeyStone base url ending in /v2.0/")
.documentation(URI.create("http://docs.openstack.org/api/openstack-network/1.0/content/")) .documentation(URI.create("http://docs.openstack.org/api/openstack-network/1.0/content/"))
.version("1.0") .version("1.0")
.defaultEndpoint("http://localhost:5000") .defaultEndpoint("http://localhost:5000/v2.0/")
.defaultProperties(QuantumApiMetadata.defaultProperties()) .defaultProperties(QuantumApiMetadata.defaultProperties())
.defaultModules(ImmutableSet.<Class<? extends Module>>builder() .defaultModules(ImmutableSet.<Class<? extends Module>>builder()
.add(KeystoneAuthenticationModule.class) .add(KeystoneAuthenticationModule.class)

View File

@ -35,7 +35,7 @@
<properties> <properties>
<!-- keystone endpoint --> <!-- keystone endpoint -->
<test.openstack-swift.endpoint>http://localhost:5000</test.openstack-swift.endpoint> <test.openstack-swift.endpoint>http://localhost:5000/v2.0/</test.openstack-swift.endpoint>
<test.openstack-swift.api-version>1.0</test.openstack-swift.api-version> <test.openstack-swift.api-version>1.0</test.openstack-swift.api-version>
<test.openstack-swift.build-version></test.openstack-swift.build-version> <test.openstack-swift.build-version></test.openstack-swift.build-version>
<test.openstack-swift.identity>FIXME_IDENTITY</test.openstack-swift.identity> <test.openstack-swift.identity>FIXME_IDENTITY</test.openstack-swift.identity>

View File

@ -28,7 +28,6 @@ import org.jclouds.apis.ApiMetadata;
import org.jclouds.openstack.keystone.v2_0.config.CredentialTypes; import org.jclouds.openstack.keystone.v2_0.config.CredentialTypes;
import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule; import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule;
import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule.RegionModule; import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule.RegionModule;
import org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties;
import org.jclouds.openstack.swift.v1.config.SwiftRestClientModule; import org.jclouds.openstack.swift.v1.config.SwiftRestClientModule;
import org.jclouds.openstack.v2_0.ServiceType; import org.jclouds.openstack.v2_0.ServiceType;
import org.jclouds.rest.RestContext; import org.jclouds.rest.RestContext;
@ -69,9 +68,6 @@ public class SwiftApiMetadata extends BaseRestApiMetadata {
Properties properties = BaseRestApiMetadata.defaultProperties(); Properties properties = BaseRestApiMetadata.defaultProperties();
properties.setProperty(SERVICE_TYPE, ServiceType.OBJECT_STORE); properties.setProperty(SERVICE_TYPE, ServiceType.OBJECT_STORE);
properties.setProperty(CREDENTIAL_TYPE, CredentialTypes.PASSWORD_CREDENTIALS); properties.setProperty(CREDENTIAL_TYPE, CredentialTypes.PASSWORD_CREDENTIALS);
// TODO: this doesn't actually do anything yet.
properties.setProperty(KeystoneProperties.VERSION, "2.0");
return properties; return properties;
} }
@ -81,11 +77,12 @@ public class SwiftApiMetadata extends BaseRestApiMetadata {
super(SwiftApi.class, SwiftAsyncApi.class); super(SwiftApi.class, SwiftAsyncApi.class);
id("openstack-swift") id("openstack-swift")
.name("OpenStack Swift Diablo+ API") .name("OpenStack Swift Diablo+ API")
.identityName("tenantId:user") .identityName("${tenantName}:${userName} or ${userName}, if your keystone supports a default tenant")
.credentialName("password") .credentialName("${password}")
.documentation(URI.create("http://docs.openstack.org/api/openstack-object-storage/1.0/content/ch_object-storage-dev-overview.html")) .documentation(URI.create("http://docs.openstack.org/api/openstack-object-storage/1.0/content/ch_object-storage-dev-overview.html"))
.version("1.0") .version("1.0")
.defaultEndpoint("http://localhost:5000") .endpointName("KeyStone base url ending in /v2.0/")
.defaultEndpoint("http://localhost:5000/v2.0/")
.defaultProperties(SwiftApiMetadata.defaultProperties()) .defaultProperties(SwiftApiMetadata.defaultProperties())
.defaultModules(ImmutableSet.<Class<? extends Module>>builder() .defaultModules(ImmutableSet.<Class<? extends Module>>builder()
.add(KeystoneAuthenticationModule.class) .add(KeystoneAuthenticationModule.class)

View File

@ -22,13 +22,12 @@ import java.util.Properties;
import org.jclouds.apis.BaseContextLiveTest; import org.jclouds.apis.BaseContextLiveTest;
import org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties; import org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties;
import org.jclouds.openstack.swift.v1.SwiftApi;
import org.jclouds.openstack.swift.v1.SwiftApiMetadata; import org.jclouds.openstack.swift.v1.SwiftApiMetadata;
import org.jclouds.openstack.swift.v1.SwiftAsyncApi; import org.jclouds.openstack.swift.v1.SwiftAsyncApi;
import org.jclouds.openstack.swift.v1.SwiftApi;
import org.jclouds.rest.RestContext; import org.jclouds.rest.RestContext;
import org.testng.annotations.AfterGroups; import org.testng.annotations.AfterGroups;
import org.testng.annotations.BeforeGroups; import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test;
import com.google.common.reflect.TypeToken; import com.google.common.reflect.TypeToken;
@ -37,7 +36,6 @@ import com.google.common.reflect.TypeToken;
* *
* @author Adrian Cole * @author Adrian Cole
*/ */
@Test(groups = "live")
public class BaseSwiftApiLiveTest extends BaseContextLiveTest<RestContext<SwiftApi, SwiftAsyncApi>> { public class BaseSwiftApiLiveTest extends BaseContextLiveTest<RestContext<SwiftApi, SwiftAsyncApi>> {
public BaseSwiftApiLiveTest() { public BaseSwiftApiLiveTest() {

View File

@ -34,7 +34,7 @@
<packaging>bundle</packaging> <packaging>bundle</packaging>
<properties> <properties>
<test.hpcloud-compute.endpoint>https://region-a.geo-1.identity.hpcloudsvc.com:35357</test.hpcloud-compute.endpoint> <test.hpcloud-compute.endpoint>https://region-a.geo-1.identity.hpcloudsvc.com:35357/v2.0/</test.hpcloud-compute.endpoint>
<test.hpcloud-compute.api-version>1.1</test.hpcloud-compute.api-version> <test.hpcloud-compute.api-version>1.1</test.hpcloud-compute.api-version>
<test.hpcloud-compute.build-version></test.hpcloud-compute.build-version> <test.hpcloud-compute.build-version></test.hpcloud-compute.build-version>
<test.hpcloud-compute.identity>FIXME_IDENTITY</test.hpcloud-compute.identity> <test.hpcloud-compute.identity>FIXME_IDENTITY</test.hpcloud-compute.identity>

View File

@ -20,8 +20,6 @@ package org.jclouds.hpcloud.compute;
import static org.jclouds.compute.config.ComputeServiceProperties.TEMPLATE; import static org.jclouds.compute.config.ComputeServiceProperties.TEMPLATE;
import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_TERMINATED; import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_NODE_TERMINATED;
import static org.jclouds.openstack.keystone.v2_0.config.CredentialTypes.API_ACCESS_KEY_CREDENTIALS;
import static org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties.CREDENTIAL_TYPE;
import static org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties.REQUIRES_TENANT; import static org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties.REQUIRES_TENANT;
import static org.jclouds.openstack.nova.v2_0.config.NovaProperties.AUTO_ALLOCATE_FLOATING_IPS; import static org.jclouds.openstack.nova.v2_0.config.NovaProperties.AUTO_ALLOCATE_FLOATING_IPS;
import static org.jclouds.openstack.nova.v2_0.config.NovaProperties.AUTO_GENERATE_KEYPAIRS; import static org.jclouds.openstack.nova.v2_0.config.NovaProperties.AUTO_GENERATE_KEYPAIRS;
@ -68,11 +66,10 @@ public class HPCloudComputeProviderMetadata extends BaseProviderMetadata {
} }
public static Properties defaultProperties() { public static Properties defaultProperties() {
Properties properties = new Properties(); Properties properties = NovaApiMetadata.defaultProperties();
// deallocating ip addresses can take a while // deallocating ip addresses can take a while
properties.setProperty(TIMEOUT_NODE_TERMINATED, 60 * 1000 + ""); properties.setProperty(TIMEOUT_NODE_TERMINATED, 60 * 1000 + "");
properties.setProperty(CREDENTIAL_TYPE, API_ACCESS_KEY_CREDENTIALS);
properties.setProperty(REQUIRES_TENANT, "true"); properties.setProperty(REQUIRES_TENANT, "true");
properties.setProperty(AUTO_ALLOCATE_FLOATING_IPS, "true"); properties.setProperty(AUTO_ALLOCATE_FLOATING_IPS, "true");
properties.setProperty(AUTO_GENERATE_KEYPAIRS, "true"); properties.setProperty(AUTO_GENERATE_KEYPAIRS, "true");
@ -86,8 +83,8 @@ public class HPCloudComputeProviderMetadata extends BaseProviderMetadata {
id("hpcloud-compute") id("hpcloud-compute")
.name("HP Cloud Compute Services") .name("HP Cloud Compute Services")
.apiMetadata(new NovaApiMetadata().toBuilder() .apiMetadata(new NovaApiMetadata().toBuilder()
.identityName("yourTenantName:yourAccessKey") .endpointName("identity service url ending in /v2.0/")
.credentialName("secretKey") .defaultEndpoint("https://region-a.geo-1.identity.hpcloudsvc.com:35357/v2.0/")
.defaultModules(ImmutableSet.<Class<? extends Module>>builder() .defaultModules(ImmutableSet.<Class<? extends Module>>builder()
.add(KeystoneAuthenticationModule.class) .add(KeystoneAuthenticationModule.class)
.add(ZoneModule.class) .add(ZoneModule.class)
@ -98,7 +95,7 @@ public class HPCloudComputeProviderMetadata extends BaseProviderMetadata {
.console(URI.create("https://manage.hpcloud.com/compute")) .console(URI.create("https://manage.hpcloud.com/compute"))
.linkedServices("hpcloud-compute", "hpcloud-objectstorage") .linkedServices("hpcloud-compute", "hpcloud-objectstorage")
.iso3166Codes("US-NV") .iso3166Codes("US-NV")
.endpoint("https://region-a.geo-1.identity.hpcloudsvc.com:35357") .endpoint("https://region-a.geo-1.identity.hpcloudsvc.com:35357/v2.0/")
.defaultProperties(HPCloudComputeProviderMetadata.defaultProperties()); .defaultProperties(HPCloudComputeProviderMetadata.defaultProperties());
} }

View File

@ -34,7 +34,7 @@
<packaging>bundle</packaging> <packaging>bundle</packaging>
<properties> <properties>
<test.hpcloud-objectstorage.endpoint>https://region-a.geo-1.identity.hpcloudsvc.com:35357</test.hpcloud-objectstorage.endpoint> <test.hpcloud-objectstorage.endpoint>https://region-a.geo-1.identity.hpcloudsvc.com:35357/v2.0/</test.hpcloud-objectstorage.endpoint>
<test.hpcloud-objectstorage.api-version>1.0</test.hpcloud-objectstorage.api-version> <test.hpcloud-objectstorage.api-version>1.0</test.hpcloud-objectstorage.api-version>
<test.hpcloud-objectstorage.build-version></test.hpcloud-objectstorage.build-version> <test.hpcloud-objectstorage.build-version></test.hpcloud-objectstorage.build-version>
<test.hpcloud-objectstorage.identity>FIXME_IDENTITY</test.hpcloud-objectstorage.identity> <test.hpcloud-objectstorage.identity>FIXME_IDENTITY</test.hpcloud-objectstorage.identity>

View File

@ -18,21 +18,14 @@
*/ */
package org.jclouds.hpcloud.objectstorage; package org.jclouds.hpcloud.objectstorage;
import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGIONS;
import static org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties.CREDENTIAL_TYPE;
import static org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties.SERVICE_TYPE;
import java.net.URI; import java.net.URI;
import java.util.Properties; import java.util.Properties;
import org.jclouds.apis.ApiMetadata; import org.jclouds.apis.ApiMetadata;
import org.jclouds.hpcloud.objectstorage.blobstore.config.HPCloudObjectStorageBlobStoreContextModule; import org.jclouds.hpcloud.objectstorage.blobstore.config.HPCloudObjectStorageBlobStoreContextModule;
import org.jclouds.hpcloud.objectstorage.config.HPCloudObjectStorageRestClientModule; import org.jclouds.hpcloud.objectstorage.config.HPCloudObjectStorageRestClientModule;
import org.jclouds.openstack.keystone.v2_0.config.CredentialTypes;
import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule.RegionModule; import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule.RegionModule;
import org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties; import org.jclouds.openstack.swift.SwiftKeystoneApiMetadata;
import org.jclouds.openstack.services.ServiceType;
import org.jclouds.openstack.swift.SwiftApiMetadata;
import org.jclouds.openstack.swift.config.SwiftRestClientModule.KeystoneStorageEndpointModule; import org.jclouds.openstack.swift.config.SwiftRestClientModule.KeystoneStorageEndpointModule;
import org.jclouds.rest.RestContext; import org.jclouds.rest.RestContext;
@ -44,7 +37,7 @@ import com.google.inject.Module;
* *
* @author Jeremy Daggett * @author Jeremy Daggett
*/ */
public class HPCloudObjectStorageApiMetadata extends SwiftApiMetadata { public class HPCloudObjectStorageApiMetadata extends SwiftKeystoneApiMetadata {
/** The serialVersionUID */ /** The serialVersionUID */
private static final long serialVersionUID = 820062881469203616L; private static final long serialVersionUID = 820062881469203616L;
@ -71,22 +64,17 @@ public class HPCloudObjectStorageApiMetadata extends SwiftApiMetadata {
} }
public static Properties defaultProperties() { public static Properties defaultProperties() {
Properties properties = SwiftApiMetadata.defaultProperties(); Properties properties = SwiftKeystoneApiMetadata.defaultProperties();
properties.setProperty(SERVICE_TYPE, ServiceType.OBJECT_STORE);
// TODO: this doesn't actually do anything yet.
properties.setProperty(KeystoneProperties.VERSION, "2.0");
properties.setProperty(CREDENTIAL_TYPE, CredentialTypes.API_ACCESS_KEY_CREDENTIALS);
properties.remove(PROPERTY_REGIONS);
return properties; return properties;
} }
public static class Builder extends SwiftApiMetadata.Builder { public static class Builder extends SwiftKeystoneApiMetadata.Builder {
protected Builder(){ protected Builder(){
super(HPCloudObjectStorageClient.class, HPCloudObjectStorageAsyncClient.class); super(HPCloudObjectStorageClient.class, HPCloudObjectStorageAsyncClient.class);
id("hpcloud-objectstorage") id("hpcloud-objectstorage")
.endpointName("identity service url ending in /v2.0/")
.defaultEndpoint("https://region-a.geo-1.identity.hpcloudsvc.com:35357/v2.0/")
.name("HP Cloud Services Object Storage API") .name("HP Cloud Services Object Storage API")
.identityName("yourTenantName:yourAccessKey")
.credentialName("secretKey")
.documentation(URI.create("https://build.hpcloud.com/object-storage/api")) .documentation(URI.create("https://build.hpcloud.com/object-storage/api"))
.defaultProperties(HPCloudObjectStorageApiMetadata.defaultProperties()) .defaultProperties(HPCloudObjectStorageApiMetadata.defaultProperties())
.context(CONTEXT_TOKEN) .context(CONTEXT_TOKEN)

View File

@ -72,7 +72,7 @@ public class HPCloudObjectStorageProviderMetadata extends BaseProviderMetadata {
.console(URI.create("https://manage.hpcloud.com/objects/us-west")) .console(URI.create("https://manage.hpcloud.com/objects/us-west"))
.linkedServices("hpcloud-compute", "hpcloud-objectstorage") .linkedServices("hpcloud-compute", "hpcloud-objectstorage")
.iso3166Codes("US-NV") .iso3166Codes("US-NV")
.endpoint("https://region-a.geo-1.identity.hpcloudsvc.com:35357") .endpoint("https://region-a.geo-1.identity.hpcloudsvc.com:35357/v2.0/")
.defaultProperties(HPCloudObjectStorageProviderMetadata.defaultProperties()); .defaultProperties(HPCloudObjectStorageProviderMetadata.defaultProperties());
} }

View File

@ -34,7 +34,7 @@
<packaging>bundle</packaging> <packaging>bundle</packaging>
<properties> <properties>
<test.rackspace-cloudservers-us.endpoint>https://identity.api.rackspacecloud.com</test.rackspace-cloudservers-us.endpoint> <test.rackspace-cloudservers-us.endpoint>https://identity.api.rackspacecloud.com/v2.0/</test.rackspace-cloudservers-us.endpoint>
<test.rackspace-cloudservers-us.api-version>2</test.rackspace-cloudservers-us.api-version> <test.rackspace-cloudservers-us.api-version>2</test.rackspace-cloudservers-us.api-version>
<test.rackspace-cloudservers-us.build-version></test.rackspace-cloudservers-us.build-version> <test.rackspace-cloudservers-us.build-version></test.rackspace-cloudservers-us.build-version>
<test.rackspace-cloudservers-us.identity>${test.rackspace-us.identity}</test.rackspace-cloudservers-us.identity> <test.rackspace-cloudservers-us.identity>${test.rackspace-us.identity}</test.rackspace-cloudservers-us.identity>

View File

@ -74,9 +74,11 @@ public class CloudServersUSProviderMetadata extends BaseProviderMetadata {
id("rackspace-cloudservers-us") id("rackspace-cloudservers-us")
.name("Rackspace Next Generation Cloud Servers") .name("Rackspace Next Generation Cloud Servers")
.apiMetadata(new NovaApiMetadata().toBuilder() .apiMetadata(new NovaApiMetadata().toBuilder()
.identityName("username") .identityName("${userName}")
.credentialName("API Key") .credentialName("${apiKey}")
.version("2") .version("2")
.defaultEndpoint("https://identity.api.rackspacecloud.com/v2.0/")
.endpointName("identity service url ending in /v2.0/")
.documentation(URI.create("http://docs.rackspace.com/servers/api/v2/cs-devguide/content/ch_preface.html#webhelp-currentid")) .documentation(URI.create("http://docs.rackspace.com/servers/api/v2/cs-devguide/content/ch_preface.html#webhelp-currentid"))
.defaultModules(ImmutableSet.<Class<? extends Module>>builder() .defaultModules(ImmutableSet.<Class<? extends Module>>builder()
.add(CloudIdentityAuthenticationModule.class) .add(CloudIdentityAuthenticationModule.class)
@ -88,7 +90,7 @@ public class CloudServersUSProviderMetadata extends BaseProviderMetadata {
.console(URI.create("https://mycloud.rackspace.com")) .console(URI.create("https://mycloud.rackspace.com"))
.linkedServices("rackspace-cloudservers-us", "cloudfiles-swift-us") .linkedServices("rackspace-cloudservers-us", "cloudfiles-swift-us")
.iso3166Codes("US-TX") .iso3166Codes("US-TX")
.endpoint("https://identity.api.rackspacecloud.com") .endpoint("https://identity.api.rackspacecloud.com/v2.0/")
.defaultProperties(CloudServersUSProviderMetadata.defaultProperties()); .defaultProperties(CloudServersUSProviderMetadata.defaultProperties());
} }

View File

@ -34,7 +34,7 @@
<packaging>bundle</packaging> <packaging>bundle</packaging>
<properties> <properties>
<test.trystack-nova.endpoint>https://nova-api.trystack.org:5443</test.trystack-nova.endpoint> <test.trystack-nova.endpoint>https://nova-api.trystack.org:5443/v2.0/</test.trystack-nova.endpoint>
<test.trystack-nova.api-version>1.1</test.trystack-nova.api-version> <test.trystack-nova.api-version>1.1</test.trystack-nova.api-version>
<test.trystack-nova.build-version></test.trystack-nova.build-version> <test.trystack-nova.build-version></test.trystack-nova.build-version>
<test.trystack-nova.identity>FIXME_IDENTITY</test.trystack-nova.identity> <test.trystack-nova.identity>FIXME_IDENTITY</test.trystack-nova.identity>

View File

@ -19,7 +19,6 @@
package org.jclouds.trystack.nova; package org.jclouds.trystack.nova;
import static org.jclouds.Constants.PROPERTY_TRUST_ALL_CERTS; import static org.jclouds.Constants.PROPERTY_TRUST_ALL_CERTS;
import static org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties.CREDENTIAL_TYPE;
import static org.jclouds.openstack.nova.v2_0.config.NovaProperties.AUTO_GENERATE_KEYPAIRS; import static org.jclouds.openstack.nova.v2_0.config.NovaProperties.AUTO_GENERATE_KEYPAIRS;
import java.net.URI; import java.net.URI;
@ -64,7 +63,6 @@ public class TryStackNovaProviderMetadata extends BaseProviderMetadata {
public static Properties defaultProperties() { public static Properties defaultProperties() {
Properties properties = new Properties(); Properties properties = new Properties();
properties.setProperty(PROPERTY_TRUST_ALL_CERTS, "true"); properties.setProperty(PROPERTY_TRUST_ALL_CERTS, "true");
properties.setProperty(CREDENTIAL_TYPE, "passwordCredentials");
properties.setProperty(AUTO_GENERATE_KEYPAIRS, "true"); properties.setProperty(AUTO_GENERATE_KEYPAIRS, "true");
return properties; return properties;
} }
@ -81,7 +79,7 @@ public class TryStackNovaProviderMetadata extends BaseProviderMetadata {
.homepage(URI.create("https://trystack.org")) .homepage(URI.create("https://trystack.org"))
.console(URI.create("https://trystack.org/dash")) .console(URI.create("https://trystack.org/dash"))
.iso3166Codes("US-CA") .iso3166Codes("US-CA")
.endpoint("https://nova-api.trystack.org:5443") .endpoint("https://nova-api.trystack.org:5443/v2.0/")
.defaultProperties(TryStackNovaProviderMetadata.defaultProperties()); .defaultProperties(TryStackNovaProviderMetadata.defaultProperties());
} }