@Override public Access apply(HttpResponse from) { releasePayload(from); URI storageUrl = null; String authToken = null; for (Map.Entry<String, String> entry : from.getHeaders().entries()) { String header = entry.getKey(); if (header.equalsIgnoreCase(STORAGE_URL)) { storageUrl = getURI(entry.getValue()); } else if (header.equalsIgnoreCase(AUTH_TOKEN)) { authToken = entry.getValue(); } } if (storageUrl == null || authToken == null) { throw new AuthorizationException("Invalid headers in TempAuth response " + from); } // For portability with keystone, based on common knowledge that these tokens tend to expire in 24 hours // http://docs.openstack.org/api/openstack-object-storage/1.0/content/authentication-object-dev-guide.html Date expires = new Date(System.currentTimeMillis() + TimeUnit.HOURS.toMillis(24)); return Access.builder() .user(User.builder().id(username).name(username).build()) .token(Token.builder().id(authToken).expires(expires).build()) .service(Service.builder().name("Object Storage").type(OBJECT_STORE) .endpoint(Endpoint.builder().publicURL(storageUrl).id(apiVersion).region(storageUrl.getHost()).build()) .build()).build(); }
/** * @see Endpoint#getAdminURL() */ public T adminURL(String adminURL) { return adminURL(URI.create(adminURL)); }
/** * @see Endpoint#getInternalURL() */ public T internalURL(String internalURL) { return internalURL(URI.create(internalURL)); }
.service(Service.builder().name("Object Storage").type(OBJECT_STORE) .endpoint(Endpoint.builder() .tenantId("40806637803162") .publicURL("https://objects.jclouds.org/v1.0/40806637803162") .adminURL("https://objects.jclouds.org/v1.0/") .id("1.0") .region("region-a.geo-1").build()).build()) .service(Service.builder().name("Identity").type(IDENTITY) .endpoint(Endpoint.builder() .publicURL("https://csnode.jclouds.org/v2.0/") .adminURL("https://csnode.jclouds.org:35357/v2.0/") .region("region-a.geo-1") .id("2.0") .versionId("2.0").build()).build()) .service(Service.builder().name("Image Management").type(IMAGE) .endpoint(Endpoint.builder() .tenantId("40806637803162") .publicURL("https://glance.jclouds.org:9292/") .region("az-1.region-a.geo-1") .id("1.0").build()).build()) .service(Service.builder().name("Compute").type(COMPUTE) .endpoint(Endpoint.builder() .tenantId("3456") .publicURL("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v2/3456") .region("az-1.region-a.geo-1") .versionId("2") .versionInfo("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v2/") .versionList("https://az-1.region-a.geo-1.compute.hpcloudsvc.com").build()) .endpoint(Endpoint.builder()
.service(Service.builder().name("cloudDatabases").type("rax:database") .endpoint(Endpoint.builder() .tenantId("40806637803162") .publicURL("https://dfw.databases.api.rackspacecloud.com/v1.0/40806637803162") .region("DFW").build()) .endpoint(Endpoint.builder() .tenantId("40806637803162") .publicURL("https://ord.databases.api.rackspacecloud.com/v1.0/40806637803162") .region("ORD").build()).build()) .service(Service.builder().name("cloudServers").type("compute") .endpoint(Endpoint.builder() .tenantId("40806637803162") .publicURL("https://servers.api.rackspacecloud.com/v1.0/40806637803162") .versionId("1.0") .versionInfo("https://servers.api.rackspacecloud.com/v1.0") .versionList("https://servers.api.rackspacecloud.com/").build()).build()) .service(Service.builder().name("cloudFiles").type("object-store") .endpoint(Endpoint.builder() .tenantId("MossoCloudFS_dc1f419c-5059-4c87-a389-3f2e33a77b22") .publicURL("https://storage101.dfw1.clouddrive.com/v1/MossoCloudFS_dc1f419c-5059-4c87-a389-3f2e33a77b22") .internalURL("https://snet-storage101.dfw1.clouddrive.com/v1/MossoCloudFS_dc1f419c-5059-4c87-a389-3f2e33a77b22") .region("DFW").build()).build()) .service(Service.builder().name("cloudServersOpenStack").type("compute") .endpoint(Endpoint.builder() .tenantId("40806637803162") .publicURL("https://dfw.servers.api.rackspacecloud.com/v2/40806637803162") .versionInfo("https://dfw.servers.api.rackspacecloud.com/v2") .versionList("https://dfw.servers.api.rackspacecloud.com/") .versionId("2")
.service(Service.builder().name("cloudDatabases").type("rax:database") .endpoint(Endpoint.builder() .tenantId("40806637803162") .publicURL("https://dfw.databases.api.rackspacecloud.com/v1.0/40806637803162") .region("DFW").build()) .endpoint(Endpoint.builder() .tenantId("40806637803162") .publicURL("https://ord.databases.api.rackspacecloud.com/v1.0/40806637803162") .region("ORD").build()).build()) .service(Service.builder().name("cloudServers").type("compute") .endpoint(Endpoint.builder() .tenantId("40806637803162") .publicURL("https://servers.api.rackspacecloud.com/v1.0/40806637803162") .versionId("1.0") .versionInfo("https://servers.api.rackspacecloud.com/v1.0") .versionList("https://servers.api.rackspacecloud.com/").build()).build()) .service(Service.builder().name("cloudFiles").type("object-store") .endpoint(Endpoint.builder() .tenantId("MossoCloudFS_dc1f419c-5059-4c87-a389-3f2e33a77b22") .publicURL("https://storage101.dfw1.clouddrive.com/v1/MossoCloudFS_dc1f419c-5059-4c87-a389-3f2e33a77b22") .internalURL("https://snet-storage101.dfw1.clouddrive.com/v1/MossoCloudFS_dc1f419c-5059-4c87-a389-3f2e33a77b22") .region("DFW").build()).build()) .service(Service.builder().name("cloudServersOpenStack").type("compute") .endpoint(Endpoint.builder() .tenantId("40806637803162") .publicURL("https://dfw.servers.api.rackspacecloud.com/v2/40806637803162") .versionInfo("https://dfw.servers.api.rackspacecloud.com/v2") .versionList("https://dfw.servers.api.rackspacecloud.com/") .versionId("2")
.service(Service.builder().type("compute").name("nova") .endpoint(Endpoint.builder() .adminURL("http://10.10.10.10:8774/v2/82d8d2f865484776a1daf1e2245d3317") .region("RegionOne") .internalURL("http://10.10.10.10:8774/v2/82d8d2f865484776a1daf1e2245d3317") .id("bb3ce9ccdc5045909882688b90cc3ff0") .publicURL("http://10.10.10.10:8774/v2/82d8d2f865484776a1daf1e2245d3317").build()).build()) .service(Service.builder().type("s3").name("s3") .endpoint(Endpoint.builder() .adminURL("http://10.10.10.10:3333") .region("RegionOne") .internalURL("http://10.10.10.10:3333") .id("9646263f31ea4f499732c5e1370ecf5e") .publicURL("http://10.10.10.10:3333").build()).build()) .service(Service.builder().type("image").name("glance") .endpoint(Endpoint.builder() .adminURL("http://10.10.10.10:9292") .region("RegionOne") .internalURL("http://10.10.10.10:9292") .id("aa5d0b2574824ba097dc07faacf3be65") .publicURL("http://10.10.10.10:9292").build()).build()) .service(Service.builder().type("volume").name("cinder") .endpoint(Endpoint.builder() .adminURL("http://10.10.10.10:8776/v1/82d8d2f865484776a1daf1e2245d3317") .region("RegionOne") .internalURL("http://10.10.10.10:8776/v1/82d8d2f865484776a1daf1e2245d3317") .id("7679065b1405447eb5f1a38a6b99ccc0") .publicURL("http://10.10.10.10:8776/v1/82d8d2f865484776a1daf1e2245d3317").build()).build()) .service(Service.builder().type("ec2").name("ec2")
.service(Service.builder().name("cloudDatabases").type("rax:database") .endpoint(Endpoint.builder() .tenantId("40806637803162") .publicURL("https://dfw.databases.api.rackspacecloud.com/v1.0/40806637803162") .region("DFW").build()) .endpoint(Endpoint.builder() .tenantId("40806637803162") .publicURL("https://ord.databases.api.rackspacecloud.com/v1.0/40806637803162") .region("ORD").build()).build()) .service(Service.builder().name("cloudServers").type("compute") .endpoint(Endpoint.builder() .tenantId("40806637803162") .publicURL("https://servers.api.rackspacecloud.com/v1.0/40806637803162") .versionId("1.0") .versionInfo("https://servers.api.rackspacecloud.com/v1.0") .versionList("https://servers.api.rackspacecloud.com/").build()).build()) .service(Service.builder().name("cloudFiles").type("object-store") .endpoint(Endpoint.builder() .tenantId("MossoCloudFS_dc1f419c-5059-4c87-a389-3f2e33a77b22") .publicURL("https://storage101.dfw1.clouddrive.com/v1/MossoCloudFS_dc1f419c-5059-4c87-a389-3f2e33a77b22") .internalURL("https://snet-storage101.dfw1.clouddrive.com/v1/MossoCloudFS_dc1f419c-5059-4c87-a389-3f2e33a77b22") .region("DFW").build()).build()) .service(Service.builder().name("cloudServersOpenStack").type("compute") .endpoint(Endpoint.builder() .tenantId("40806637803162") .publicURL("https://dfw.servers.api.rackspacecloud.com/v2/40806637803162") .versionInfo("https://dfw.servers.api.rackspacecloud.com/v2") .versionList("https://dfw.servers.api.rackspacecloud.com/") .versionId("2")
.service(Service.builder().name("Compute Service").type("compute") .endpoint(Endpoint.builder() .adminURL("http://10.0.1.13:8774/v2/2fdc88ae152948c690b97ba307acae9b") .internalURL("http://10.0.1.13:8774/v2/2fdc88ae152948c690b97ba307acae9b") .publicURL("http://10.0.1.13:8774/v2/2fdc88ae152948c690b97ba307acae9b") .region("RegionOne").build()).build()) .service(Service.builder().name("S3 Service").type("s3") .endpoint(Endpoint.builder() .adminURL("http://10.0.1.13:3333") .internalURL("http://10.0.1.13:3333") .publicURL("http://10.0.1.13:3333") .region("RegionOne").build()).build()) .service(Service.builder().name("Image Service").type("image") .endpoint(Endpoint.builder() .adminURL("http://10.0.1.13:9292") .internalURL("http://10.0.1.13:9292") .publicURL("http://10.0.1.13:9292") .region("RegionOne").build()).build()) .service(Service.builder().name("Volume Service").type("volume") .endpoint(Endpoint.builder() .adminURL("http://10.0.1.13:8776/v1/2fdc88ae152948c690b97ba307acae9b") .internalURL("http://10.0.1.13:8776/v1/2fdc88ae152948c690b97ba307acae9b") .publicURL("http://10.0.1.13:8776/v1/2fdc88ae152948c690b97ba307acae9b") .region("RegionOne").build()).build()) .service(Service.builder().name("EC2 Service").type("ec2") .endpoint(Endpoint.builder() .adminURL("http://10.0.1.13:8773/services/Admin") .internalURL("http://10.0.1.13:8773/services/Cloud") .publicURL("http://10.0.1.13:8773/services/Cloud")
.service(Service.builder().name("Object Storage").type(OBJECT_STORE) .endpoint(Endpoint.builder() .tenantId("40806637803162") .publicURL("https://objects.jclouds.org/v1.0/40806637803162") .adminURL("https://objects.jclouds.org/v1.0/") .id("1.0") .region("region-a.geo-1").build()).build()) .service(Service.builder().name("Identity").type(IDENTITY) .endpoint(Endpoint.builder() .publicURL("https://csnode.jclouds.org/v2.0/") .adminURL("https://csnode.jclouds.org:35357/v2.0/") .region("region-a.geo-1") .id("2.0") .versionId("2.0").build()).build()) .service(Service.builder().name("Image Management").type(IMAGE) .endpoint(Endpoint.builder() .tenantId("40806637803162") .publicURL("https://glance.jclouds.org:9292/v1.0") .region("az-1.region-a.geo-1") .id("1.0").build()).build()) .service(Service.builder().name("Compute").type(COMPUTE) .endpoint(Endpoint.builder() .tenantId("3456") .publicURL("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456") .region("az-1.region-a.geo-1") .versionId("1.1") .versionInfo("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/") .versionList("https://az-1.region-a.geo-1.compute.hpcloudsvc.com").build()) .endpoint(Endpoint.builder()
.service(Service.builder().type("compute").name("nova") .endpoint(Endpoint.builder() .adminURL("http://10.10.10.10:8774/v2/82d8d2f865484776a1daf1e2245d3317") .region("RegionOne") .internalURL("http://10.10.10.10:8774/v2/82d8d2f865484776a1daf1e2245d3317") .id("bb3ce9ccdc5045909882688b90cc3ff0") .publicURL("http://10.10.10.10:8774/v2/82d8d2f865484776a1daf1e2245d3317").build()).build()) .service(Service.builder().type("s3").name("s3") .endpoint(Endpoint.builder() .adminURL("http://10.10.10.10:3333") .region("RegionOne") .internalURL("http://10.10.10.10:3333") .id("9646263f31ea4f499732c5e1370ecf5e") .publicURL("http://10.10.10.10:3333").build()).build()) .service(Service.builder().type("image").name("glance") .endpoint(Endpoint.builder() .adminURL("http://10.10.10.10:9292") .region("RegionOne") .internalURL("http://10.10.10.10:9292") .id("aa5d0b2574824ba097dc07faacf3be65") .publicURL("http://10.10.10.10:9292").build()).build()) .service(Service.builder().type("volume").name("cinder") .endpoint(Endpoint.builder() .adminURL("http://10.10.10.10:8776/v1/82d8d2f865484776a1daf1e2245d3317") .region("RegionOne") .internalURL("http://10.10.10.10:8776/v1/82d8d2f865484776a1daf1e2245d3317") .id("7679065b1405447eb5f1a38a6b99ccc0") .publicURL("http://10.10.10.10:8776/v1/82d8d2f865484776a1daf1e2245d3317").build()).build()) .service(Service.builder().type("ec2").name("ec2")
.service(Service.builder().name("Compute Service").type("compute") .endpoint(Endpoint.builder() .adminURL("http://10.0.1.13:8774/v2/2fdc88ae152948c690b97ba307acae9b") .internalURL("http://10.0.1.13:8774/v2/2fdc88ae152948c690b97ba307acae9b") .publicURL("http://10.0.1.13:8774/v2/2fdc88ae152948c690b97ba307acae9b") .region("RegionOne").build()).build()) .service(Service.builder().name("S3 Service").type("s3") .endpoint(Endpoint.builder() .adminURL("http://10.0.1.13:3333") .internalURL("http://10.0.1.13:3333") .publicURL("http://10.0.1.13:3333") .region("RegionOne").build()).build()) .service(Service.builder().name("Image Service").type("image") .endpoint(Endpoint.builder() .adminURL("http://10.0.1.13:9292") .internalURL("http://10.0.1.13:9292") .publicURL("http://10.0.1.13:9292") .region("RegionOne").build()).build()) .service(Service.builder().name("Volume Service").type("volume") .endpoint(Endpoint.builder() .adminURL("http://10.0.1.13:8776/v1/2fdc88ae152948c690b97ba307acae9b") .internalURL("http://10.0.1.13:8776/v1/2fdc88ae152948c690b97ba307acae9b") .publicURL("http://10.0.1.13:8776/v1/2fdc88ae152948c690b97ba307acae9b") .region("RegionOne").build()).build()) .service(Service.builder().name("EC2 Service").type("ec2") .endpoint(Endpoint.builder() .adminURL("http://10.0.1.13:8773/services/Admin") .internalURL("http://10.0.1.13:8773/services/Cloud") .publicURL("http://10.0.1.13:8773/services/Cloud")
@Override public Access apply(HttpResponse from) { releasePayload(from); URI storageUrl = null; String authToken = null; for (Map.Entry<String, String> entry : from.getHeaders().entries()) { String header = entry.getKey(); if (header.equalsIgnoreCase(STORAGE_URL)) { storageUrl = getURI(entry.getValue()); } else if (header.equalsIgnoreCase(AUTH_TOKEN)) { authToken = entry.getValue(); } } if (storageUrl == null || authToken == null) { throw new AuthorizationException("Invalid headers in TempAuth response " + from); } // For portability with keystone, based on common knowledge that these tokens tend to expire in 24 hours // http://docs.openstack.org/api/openstack-object-storage/1.0/content/authentication-object-dev-guide.html Date expires = new Date(System.currentTimeMillis() + TimeUnit.HOURS.toMillis(24)); return Access.builder() .user(User.builder().id(username).name(username).build()) .token(Token.builder().id(authToken).expires(expires).build()) .service(Service.builder().name("Object Storage").type(OBJECT_STORE) .endpoint(Endpoint.builder().publicURL(storageUrl).id(apiVersion).region(storageUrl.getHost()).build()) .build()).build(); }
@Override public Access apply(HttpResponse from) { releasePayload(from); URI storageUrl = null; String authToken = null; for (Map.Entry<String, String> entry : from.getHeaders().entries()) { String header = entry.getKey(); if (header.equalsIgnoreCase(STORAGE_URL)) { storageUrl = getURI(entry.getValue()); } else if (header.equalsIgnoreCase(AUTH_TOKEN)) { authToken = entry.getValue(); } } if (storageUrl == null || authToken == null) { throw new AuthorizationException("Invalid headers in TempAuth response " + from); } // For portability with keystone, based on common knowledge that these tokens tend to expire in 24 hours // http://docs.openstack.org/api/openstack-object-storage/1.0/content/authentication-object-dev-guide.html Date expires = new Date(System.currentTimeMillis() + TimeUnit.HOURS.toMillis(24)); return Access.builder() .user(User.builder().id(username).name(username).build()) .token(Token.builder().id(authToken).expires(expires).build()) .service(Service.builder().name("Object Storage").type(OBJECT_STORE) .endpoint(Endpoint.builder().publicURL(storageUrl).id(apiVersion).region(storageUrl.getHost()).build()) .build()).build(); }
@Test public void testGetEndpointsForToken() { TokenApi api = requestsSendResponses( keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess, authenticatedGET().endpoint(endpoint + "/v2.0/tokens/XXXXXX/endpoints").build(), HttpResponse.builder().statusCode(200).payload(payloadFromResourceWithContentType("/user_endpoints.json", APPLICATION_JSON)).build()) .getTokenApi().get(); Set<? extends Endpoint> endpoints = api.listEndpointsForToken("XXXXXX"); assertEquals(endpoints, ImmutableSet.of( Endpoint.builder().publicURL(URI.create("https://csnode.jclouds.org/v2.0/")) .adminURL(URI.create("https://csnode.jclouds.org:35357/v2.0/")) .region("region-a.geo-1").id("2.0").versionId("2.0").build() )); }
/** * @see Endpoint#getVersionInfo() */ public T versionInfo(String versionInfo) { return versionInfo(URI.create(versionInfo)); }
/** * @see Endpoint#getPublicURL() */ public T publicURL(String publicURL) { return publicURL(URI.create(publicURL)); }
/** * @see Endpoint#getVersionInfo() */ public T versionInfo(String versionInfo) { return versionInfo(URI.create(versionInfo)); }
/** * @see Endpoint#getPublicURL() */ public T publicURL(String publicURL) { return publicURL(URI.create(publicURL)); }
/** * @see Endpoint#getVersionList() */ public T versionList(String versionList) { return versionList(URI.create(versionList)); }