{
private VolumeApi volumeApi;
private Status status;
@@ -112,14 +112,14 @@ public class VolumePredicates {
@Override
public boolean apply(Volume volume) {
checkNotNull(volume, "volume must be defined");
-
+
if (status.equals(volume.getStatus())) {
return true;
}
else {
Volume volumeUpdated = volumeApi.get(volume.getId());
checkNotNull(volumeUpdated, "Volume %s not found.", volume.getId());
-
+
return status.equals(volumeUpdated.getStatus());
}
}
diff --git a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/QuotasApiExpectTest.java b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/QuotasApiExpectTest.java
index 74ac6b92cf..e5dc3f930b 100644
--- a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/QuotasApiExpectTest.java
+++ b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/QuotasApiExpectTest.java
@@ -16,15 +16,15 @@
*/
package org.jclouds.openstack.cinder.v1.features;
+import static org.testng.Assert.assertEquals;
+
+import java.net.URI;
+
import org.jclouds.http.HttpResponse;
import org.jclouds.openstack.cinder.v1.domain.VolumeQuota;
import org.jclouds.openstack.cinder.v1.internal.BaseCinderApiExpectTest;
import org.testng.annotations.Test;
-import java.net.URI;
-
-import static org.testng.Assert.assertEquals;
-
@Test(groups = "unit", testName = "QuotaApiExpectTest")
public class QuotasApiExpectTest extends BaseCinderApiExpectTest {
diff --git a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/QuotasApiLiveTest.java b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/QuotasApiLiveTest.java
index 9fea6cbb88..91ab647153 100644
--- a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/QuotasApiLiveTest.java
+++ b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/QuotasApiLiveTest.java
@@ -16,15 +16,16 @@
*/
package org.jclouds.openstack.cinder.v1.features;
-import com.google.common.collect.Iterables;
+import static org.testng.Assert.assertTrue;
+
+import java.util.concurrent.ExecutionException;
+
import org.jclouds.openstack.cinder.v1.domain.VolumeQuota;
import org.jclouds.openstack.cinder.v1.internal.BaseCinderApiLiveTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
-import java.util.concurrent.ExecutionException;
-
-import static org.testng.Assert.assertTrue;
+import com.google.common.collect.Iterables;
@Test(groups = "live", testName = "QuotasApiLiveTest", singleThreaded = true)
public class QuotasApiLiveTest extends BaseCinderApiLiveTest {
@@ -39,8 +40,8 @@ public class QuotasApiLiveTest extends BaseCinderApiLiveTest {
@BeforeClass(groups = {"integration", "live"})
public void setupContext() {
super.setup();
- String zone = Iterables.getFirst(api.getConfiguredZones(), "nova");
- quotaApi = api.getQuotaApi(zone);
+ String region = Iterables.getFirst(api.getConfiguredRegions(), "nova");
+ quotaApi = api.getQuotaApi(region);
}
public void testGetStorageQuotas() throws ExecutionException, InterruptedException {
diff --git a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/SnapshotApiExpectTest.java b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/SnapshotApiExpectTest.java
index 9ab2e33dc6..cda5ce8539 100644
--- a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/SnapshotApiExpectTest.java
+++ b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/SnapshotApiExpectTest.java
@@ -56,7 +56,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest {
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/snapshot_list_simple.json")).build()
- ).getSnapshotApiForZone("RegionOne");
+ ).getSnapshotApi("RegionOne");
Set extends Snapshot> snapshots = api.list().toSet();
assertEquals(snapshots, ImmutableSet.of(testSnapshot()));
@@ -69,7 +69,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest {
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).build(),
HttpResponse.builder().statusCode(404).build()
- ).getSnapshotApiForZone("RegionOne");
+ ).getSnapshotApi("RegionOne");
Set extends Snapshot> snapshots = api.list().toSet();
assertTrue(snapshots.isEmpty());
@@ -82,7 +82,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest {
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/snapshot_list_details.json")).build()
- ).getSnapshotApiForZone("RegionOne");
+ ).getSnapshotApi("RegionOne");
Set extends Snapshot> snapshots = api.listInDetail().toSet();
assertEquals(snapshots, ImmutableSet.of(testSnapshot()));
@@ -104,7 +104,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest {
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).build(),
HttpResponse.builder().statusCode(404).build()
- ).getSnapshotApiForZone("RegionOne");
+ ).getSnapshotApi("RegionOne");
Set extends Snapshot> snapshots = api.listInDetail().toSet();
assertTrue(snapshots.isEmpty());
@@ -117,7 +117,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest {
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/snapshot_get.json")).build()
- ).getSnapshotApiForZone("RegionOne");
+ ).getSnapshotApi("RegionOne");
Snapshot snapshot = api.get("67d03df1-ce5d-4ba7-adbe-492ceb80170b");
assertEquals(snapshot, testSnapshot());
@@ -130,7 +130,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest {
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).build(),
HttpResponse.builder().statusCode(404).build()
- ).getSnapshotApiForZone("RegionOne");
+ ).getSnapshotApi("RegionOne");
assertNull(api.get("67d03df1-ce5d-4ba7-adbe-492ceb80170b"));
}
@@ -145,7 +145,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest {
.payload(payloadFromResourceWithContentType("/snapshot_create.json", MediaType.APPLICATION_JSON))
.build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/snapshot_create_response.json")).build()
- ).getSnapshotApiForZone("RegionOne");
+ ).getSnapshotApi("RegionOne");
CreateSnapshotOptions options = CreateSnapshotOptions.Builder
.name("jclouds-test-snapshot")
@@ -167,7 +167,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest {
.payload(payloadFromResourceWithContentType("/snapshot_create.json", MediaType.APPLICATION_JSON))
.build(),
HttpResponse.builder().statusCode(404).build()
- ).getSnapshotApiForZone("RegionOne");
+ ).getSnapshotApi("RegionOne");
CreateSnapshotOptions options = CreateSnapshotOptions.Builder
.name("jclouds-test-snapshot")
@@ -193,7 +193,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest {
.wrap("{\"badRequest\": {\"message\": \"Invalid volume: must be available\", \"code\": 400}}"
.getBytes())))
.build()
- ).getSnapshotApiForZone("RegionOne");
+ ).getSnapshotApi("RegionOne");
CreateSnapshotOptions options = CreateSnapshotOptions.Builder
.name("jclouds-test-snapshot")
@@ -214,7 +214,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest {
.payload(payloadFromResourceWithContentType("/snapshot_create.json", MediaType.APPLICATION_JSON))
.build(),
HttpResponse.builder().statusCode(401).build()
- ).getSnapshotApiForZone("RegionOne");
+ ).getSnapshotApi("RegionOne");
CreateSnapshotOptions options = CreateSnapshotOptions.Builder
.name("jclouds-test-snapshot")
@@ -231,7 +231,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest {
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).method("DELETE").build(),
HttpResponse.builder().statusCode(200).build()
- ).getSnapshotApiForZone("RegionOne");
+ ).getSnapshotApi("RegionOne");
assertTrue(api.delete("67d03df1-ce5d-4ba7-adbe-492ceb80170b"));
}
@@ -244,7 +244,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest {
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).method("DELETE").build(),
HttpResponse.builder().statusCode(401).build()
- ).getSnapshotApiForZone("RegionOne");
+ ).getSnapshotApi("RegionOne");
api.delete("67d03df1-ce5d-4ba7-adbe-492ceb80170b");
}
@@ -256,7 +256,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest {
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).method("DELETE").build(),
HttpResponse.builder().statusCode(404).build()
- ).getSnapshotApiForZone("RegionOne");
+ ).getSnapshotApi("RegionOne");
assertFalse(api.delete("67d03df1-ce5d-4ba7-adbe-492ceb80170b"));
}
@@ -274,7 +274,7 @@ public class SnapshotApiExpectTest extends BaseCinderApiExpectTest {
.wrap("{\"badRequest\": {\"message\": \"Invalid volume: Volume Snapshot status must be available or error\", \"code\": 400}}"
.getBytes())))
.build()
- ).getSnapshotApiForZone("RegionOne");
+ ).getSnapshotApi("RegionOne");
api.delete("67d03df1-ce5d-4ba7-adbe-492ceb80170b");
}
diff --git a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeAndSnapshotApiLiveTest.java b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeAndSnapshotApiLiveTest.java
index 050253b299..8e2dbe0b2c 100644
--- a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeAndSnapshotApiLiveTest.java
+++ b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeAndSnapshotApiLiveTest.java
@@ -42,12 +42,12 @@ import com.google.common.collect.Iterables;
@Test(groups = "live", testName = "VolumeApiLiveTest", singleThreaded = true)
public class VolumeAndSnapshotApiLiveTest extends BaseCinderApiLiveTest {
private static final String name = System.getProperty("user.name").replace('.', '-').toLowerCase();
-
- private String zone;
+
+ private String region;
private VolumeApi volumeApi;
private SnapshotApi snapshotApi;
-
+
private Volume testVolume;
private Snapshot testSnapshot;
@@ -55,9 +55,9 @@ public class VolumeAndSnapshotApiLiveTest extends BaseCinderApiLiveTest {
@Override
public void setup() {
super.setup();
- zone = Iterables.getLast(api.getConfiguredZones(), "nova");
- volumeApi = api.getVolumeApiForZone(zone);
- snapshotApi = api.getSnapshotApiForZone(zone);
+ region = Iterables.getLast(api.getConfiguredRegions(), "nova");
+ volumeApi = api.getVolumeApi(region);
+ snapshotApi = api.getSnapshotApi(region);
}
@AfterClass(groups = { "integration", "live" })
@@ -81,7 +81,7 @@ public class VolumeAndSnapshotApiLiveTest extends BaseCinderApiLiveTest {
.name(name)
.description("description of test volume");
testVolume = volumeApi.create(100, options);
-
+
assertTrue(VolumePredicates.awaitAvailable(volumeApi).apply(testVolume));
}
diff --git a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeApiExpectTest.java b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeApiExpectTest.java
index 336d09b7d6..0372dd55f2 100644
--- a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeApiExpectTest.java
+++ b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeApiExpectTest.java
@@ -53,7 +53,7 @@ public class VolumeApiExpectTest extends BaseCinderApiExpectTest {
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/volume_list_simple.json")).build()
- ).getVolumeApiForZone("RegionOne");
+ ).getVolumeApi("RegionOne");
Set extends Volume> volumes = api.list().toSet();
assertEquals(volumes, ImmutableSet.of(testVolume()));
@@ -66,7 +66,7 @@ public class VolumeApiExpectTest extends BaseCinderApiExpectTest {
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).build(),
HttpResponse.builder().statusCode(404).build()
- ).getVolumeApiForZone("RegionOne");
+ ).getVolumeApi("RegionOne");
Set extends Volume> volumes = api.list().toSet();
assertTrue(volumes.isEmpty());
@@ -79,7 +79,7 @@ public class VolumeApiExpectTest extends BaseCinderApiExpectTest {
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/volume_list_details.json")).build()
- ).getVolumeApiForZone("RegionOne");
+ ).getVolumeApi("RegionOne");
Set extends Volume> volumes = api.listInDetail().toSet();
assertEquals(volumes, ImmutableSet.of(testVolume()));
@@ -92,7 +92,7 @@ public class VolumeApiExpectTest extends BaseCinderApiExpectTest {
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).build(),
HttpResponse.builder().statusCode(404).build()
- ).getVolumeApiForZone("RegionOne");
+ ).getVolumeApi("RegionOne");
Set extends Volume> volumes = api.listInDetail().toSet();
assertTrue(volumes.isEmpty());
@@ -108,7 +108,7 @@ public class VolumeApiExpectTest extends BaseCinderApiExpectTest {
.payload(payloadFromResourceWithContentType("/volume_create.json", MediaType.APPLICATION_JSON))
.build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/volume_create_response.json")).build()
- ).getVolumeApiForZone("RegionOne");
+ ).getVolumeApi("RegionOne");
CreateVolumeOptions options = CreateVolumeOptions.Builder
.name("jclouds-test-volume")
@@ -129,7 +129,7 @@ public class VolumeApiExpectTest extends BaseCinderApiExpectTest {
.payload(payloadFromResourceWithContentType("/volume_create.json", MediaType.APPLICATION_JSON))
.build(),
HttpResponse.builder().statusCode(404).payload(payloadFromResource("/volume_create_response.json")).build()
- ).getVolumeApiForZone("RegionOne");
+ ).getVolumeApi("RegionOne");
CreateVolumeOptions options = CreateVolumeOptions.Builder
.name("jclouds-test-volume")
@@ -144,7 +144,7 @@ public class VolumeApiExpectTest extends BaseCinderApiExpectTest {
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/volume_get.json")).build()
- ).getVolumeApiForZone("RegionOne");
+ ).getVolumeApi("RegionOne");
Volume volume = api.get("60761c60-0f56-4499-b522-ff13e120af10");
assertEquals(volume, testVolume());
@@ -163,7 +163,7 @@ public class VolumeApiExpectTest extends BaseCinderApiExpectTest {
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).build(),
HttpResponse.builder().statusCode(404).build()
- ).getVolumeApiForZone("RegionOne");
+ ).getVolumeApi("RegionOne");
assertNull(api.get("60761c60-0f56-4499-b522-ff13e120af10"));
}
@@ -175,7 +175,7 @@ public class VolumeApiExpectTest extends BaseCinderApiExpectTest {
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).method("DELETE").build(),
HttpResponse.builder().statusCode(202).build()
- ).getVolumeApiForZone("RegionOne");
+ ).getVolumeApi("RegionOne");
assertTrue(api.delete("60761c60-0f56-4499-b522-ff13e120af10"));
}
@@ -187,7 +187,7 @@ public class VolumeApiExpectTest extends BaseCinderApiExpectTest {
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).method("DELETE").build(),
HttpResponse.builder().statusCode(404).build()
- ).getVolumeApiForZone("RegionOne");
+ ).getVolumeApi("RegionOne");
assertFalse(api.delete("60761c60-0f56-4499-b522-ff13e120af10"));
}
diff --git a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeTypeApiExpectTest.java b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeTypeApiExpectTest.java
index 29c4713e0a..d8c8b92c8c 100644
--- a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeTypeApiExpectTest.java
+++ b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeTypeApiExpectTest.java
@@ -46,7 +46,7 @@ public class VolumeTypeApiExpectTest extends BaseCinderApiExpectTest {
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/volume_type_list_simple.json")).build()
- ).getVolumeTypeApiForZone("RegionOne");
+ ).getVolumeTypeApi("RegionOne");
Set extends VolumeType> types = api.list().toSet();
assertEquals(types, ImmutableSet.of(testVolumeType()));
@@ -59,7 +59,7 @@ public class VolumeTypeApiExpectTest extends BaseCinderApiExpectTest {
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/volume_type_get.json")).build()
- ).getVolumeTypeApiForZone("RegionOne");
+ ).getVolumeTypeApi("RegionOne");
VolumeType type = api.get("1");
assertEquals(type, testVolumeType());
@@ -72,7 +72,7 @@ public class VolumeTypeApiExpectTest extends BaseCinderApiExpectTest {
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).build(),
HttpResponse.builder().statusCode(404).build()
- ).getVolumeTypeApiForZone("RegionOne");
+ ).getVolumeTypeApi("RegionOne");
assertNull(api.get("X"));
}
diff --git a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeTypeApiLiveTest.java b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeTypeApiLiveTest.java
index 6eb1e4877b..bbb18fcdf9 100644
--- a/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeTypeApiLiveTest.java
+++ b/apis/openstack-cinder/src/test/java/org/jclouds/openstack/cinder/v1/features/VolumeTypeApiLiveTest.java
@@ -34,14 +34,14 @@ import com.google.common.collect.Iterables;
@Test(groups = "live", testName = "VolumeTypeApiLiveTest", singleThreaded = true)
public class VolumeTypeApiLiveTest extends BaseCinderApiLiveTest {
private VolumeTypeApi volumeTypeApi;
- private String zone;
+ private String region;
@BeforeGroups(groups = {"integration", "live"})
@Override
public void setup() {
super.setup();
- zone = Iterables.getLast(api.getConfiguredZones(), "nova");
- volumeTypeApi = api.getVolumeTypeApiForZone(zone);
+ region = Iterables.getLast(api.getConfiguredRegions(), "nova");
+ volumeTypeApi = api.getVolumeTypeApi(region);
}
@AfterClass(groups = { "integration", "live" })
diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneAuthenticationModule.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneAuthenticationModule.java
index 70479c73e3..eaff908b16 100644
--- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneAuthenticationModule.java
+++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneAuthenticationModule.java
@@ -80,7 +80,7 @@ public class KeystoneAuthenticationModule extends AbstractModule {
* add the above annotation to any {@link AsyncApi} classes by placing it on the type. ex.
* {@code @Endpoint(CloudDNS.class)}
* add the following to your {@link org.jclouds.rest.config.RestClientModule}
- *
+ *
*
* bind(new TypeLiteral<Supplier<URI>>() {
* }).annotatedWith(CloudDNS.class).to(new TypeLiteral<Supplier<URI>>() {
@@ -148,6 +148,11 @@ public class KeystoneAuthenticationModule extends AbstractModule {
}
+ /**
+ * @deprecated All OpenStack APIs rely on regions in jclouds 2.0 and this module will be removed
+ * in jclouds 3.0.
+ */
+ @Deprecated
public static class ZoneModule extends AbstractModule {
@Override
protected void configure() {
diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneHttpApiModule.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneHttpApiModule.java
index 62fde44bc1..691d044ff9 100644
--- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneHttpApiModule.java
+++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneHttpApiModule.java
@@ -106,7 +106,7 @@ public class KeystoneHttpApiModule extends HttpApiModule {
@Provides
@Singleton
- public LoadingCache> provideExtensionsByZone(final javax.inject.Provider keystoneApi) {
+ public LoadingCache> provideExtensionsByRegion(final javax.inject.Provider keystoneApi) {
return CacheBuilder.newBuilder().expireAfterWrite(23, TimeUnit.HOURS)
.build(CacheLoader.from(Suppliers.memoize(new Supplier>() {
@Override
diff --git a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneRestClientModule.java b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneRestClientModule.java
index fe85de20e1..4824edf996 100644
--- a/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneRestClientModule.java
+++ b/apis/openstack-keystone/src/main/java/org/jclouds/openstack/keystone/v2_0/config/KeystoneRestClientModule.java
@@ -148,7 +148,7 @@ public class KeystoneRestClientModule> provideExtensionsByZone(final javax.inject.Provider keystoneApi) {
+ public LoadingCache> provideExtensionsByRegion(final javax.inject.Provider keystoneApi) {
return CacheBuilder.newBuilder().expireAfterWrite(23, TimeUnit.HOURS)
.build(CacheLoader.from(Suppliers.memoize(new Supplier>() {
@Override
diff --git a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/v2_0/functions/PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSetTest.java b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/v2_0/functions/PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSetTest.java
index 08160bb8ce..624a0bd54a 100644
--- a/apis/openstack-keystone/src/test/java/org/jclouds/openstack/v2_0/functions/PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSetTest.java
+++ b/apis/openstack-keystone/src/test/java/org/jclouds/openstack/v2_0/functions/PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSetTest.java
@@ -54,7 +54,7 @@ public class PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensio
"Keypair Support").build();
@org.jclouds.openstack.v2_0.services.Extension(of = ServiceType.COMPUTE, namespace = "http://docs.openstack.org/ext/keypairs/api/v1.1")
- interface KeyPairAsyncApi {
+ interface KeyPairApi {
}
@@ -64,50 +64,50 @@ public class PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensio
"Floating IPs support").build();
@org.jclouds.openstack.v2_0.services.Extension(of = ServiceType.COMPUTE, namespace = "http://docs.openstack.org/ext/floating_ips/api/v1.1")
- interface FloatingIPAsyncApi {
+ interface FloatingIPApi {
}
- interface NovaAsyncApi {
+ interface NovaApi {
@Delegate
- Optional getFloatingIPExtensionForZone(String zone);
+ Optional getFloatingIPExtensionApi(String region);
@Delegate
- Optional getKeyPairExtensionForZone(String zone);
+ Optional getKeyPairExtensionApi(String region);
}
InvocationSuccess getFloatingIPExtension(List args) throws SecurityException, NoSuchMethodException {
return InvocationSuccess.create(
- Invocation.create(method(NovaAsyncApi.class, "getFloatingIPExtensionForZone", String.class), args), "foo");
+ Invocation.create(method(NovaApi.class, "getFloatingIPExtensionApi", String.class), args), "foo");
}
InvocationSuccess getKeyPairExtension(List args) throws SecurityException, NoSuchMethodException {
return InvocationSuccess.create(
- Invocation.create(method(NovaAsyncApi.class, "getKeyPairExtensionForZone", String.class), args), "foo");
+ Invocation.create(method(NovaApi.class, "getKeyPairExtensionApi", String.class), args), "foo");
}
public void testPresentWhenExtensionsIncludeNamespaceFromAnnotationAbsentWhenNot() throws SecurityException, NoSuchMethodException {
- assertEquals(whenExtensionsInZoneInclude("zone", keypairs, floatingIps).apply(getFloatingIPExtension(ImmutableList. of("zone"))), Optional.of("foo"));
- assertEquals(whenExtensionsInZoneInclude("zone", keypairs, floatingIps).apply(getKeyPairExtension(ImmutableList. of("zone"))), Optional.of("foo"));
- assertEquals(whenExtensionsInZoneInclude("zone", keypairs).apply(getFloatingIPExtension(ImmutableList. of("zone"))), Optional.absent());
- assertEquals(whenExtensionsInZoneInclude("zone", floatingIps).apply(getKeyPairExtension(ImmutableList. of("zone"))), Optional.absent());
+ assertEquals(whenExtensionsInRegionInclude("region", keypairs, floatingIps).apply(getFloatingIPExtension(ImmutableList. of("region"))), Optional.of("foo"));
+ assertEquals(whenExtensionsInRegionInclude("region", keypairs, floatingIps).apply(getKeyPairExtension(ImmutableList. of("region"))), Optional.of("foo"));
+ assertEquals(whenExtensionsInRegionInclude("region", keypairs).apply(getFloatingIPExtension(ImmutableList. of("region"))), Optional.absent());
+ assertEquals(whenExtensionsInRegionInclude("region", floatingIps).apply(getKeyPairExtension(ImmutableList. of("region"))), Optional.absent());
}
-
- public void testZoneWithoutExtensionsReturnsAbsent() throws SecurityException, NoSuchMethodException {
- assertEquals(whenExtensionsInZoneInclude("zone", floatingIps).apply(
- getFloatingIPExtension(ImmutableList. of("differentzone"))), Optional.absent());
- assertEquals(whenExtensionsInZoneInclude("zone", keypairs).apply(
- getKeyPairExtension(ImmutableList. of("differentzone"))), Optional.absent());
+
+ public void testRegionWithoutExtensionsReturnsAbsent() throws SecurityException, NoSuchMethodException {
+ assertEquals(whenExtensionsInRegionInclude("region", floatingIps).apply(
+ getFloatingIPExtension(ImmutableList. of("differentregion"))), Optional.absent());
+ assertEquals(whenExtensionsInRegionInclude("region", keypairs).apply(
+ getKeyPairExtension(ImmutableList. of("differentregion"))), Optional.absent());
}
/**
* It is possible that the /extensions call returned the correct extension, but that the
* namespaces were different, for whatever reason. One way to address this is to have a multimap
* of the authoritative namespace to alternate onces, which could be wired up with guice
- *
+ *
*/
public void testPresentWhenAliasForExtensionMapsToNamespace() throws SecurityException, NoSuchMethodException {
Extension keypairsWithDifferentNamespace = keypairs.toBuilder().namespace(
@@ -116,22 +116,22 @@ public class PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensio
Multimap aliases = ImmutableMultimap.of(keypairs.getNamespace(), keypairsWithDifferentNamespace
.getNamespace());
- assertEquals(whenExtensionsAndAliasesInZoneInclude("zone", ImmutableSet.of(keypairsWithDifferentNamespace), aliases).apply(
- getKeyPairExtension(ImmutableList. of("zone"))), Optional.of("foo"));
- assertEquals(whenExtensionsAndAliasesInZoneInclude("zone", ImmutableSet.of(keypairsWithDifferentNamespace), aliases).apply(
- getFloatingIPExtension(ImmutableList. of("zone"))), Optional.absent());
+ assertEquals(whenExtensionsAndAliasesInRegionInclude("region", ImmutableSet.of(keypairsWithDifferentNamespace), aliases).apply(
+ getKeyPairExtension(ImmutableList. of("region"))), Optional.of("foo"));
+ assertEquals(whenExtensionsAndAliasesInRegionInclude("region", ImmutableSet.of(keypairsWithDifferentNamespace), aliases).apply(
+ getFloatingIPExtension(ImmutableList. of("region"))), Optional.absent());
}
- private PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSet whenExtensionsInZoneInclude(
- String zone, Extension... extensions) {
- return whenExtensionsAndAliasesInZoneInclude(zone, ImmutableSet.copyOf(extensions), ImmutableMultimap. of());
+ private PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSet whenExtensionsInRegionInclude(
+ String region, Extension... extensions) {
+ return whenExtensionsAndAliasesInRegionInclude(region, ImmutableSet.copyOf(extensions), ImmutableMultimap. of());
}
- private PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSet whenExtensionsAndAliasesInZoneInclude(
- String zone, final Set extensions, final Multimap aliases) {
- final LoadingCache> extensionsForZone = CacheBuilder.newBuilder().build(
- CacheLoader.from(Functions.forMap(ImmutableMap.>of(zone, extensions, "differentzone",
+ private PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSet whenExtensionsAndAliasesInRegionInclude(
+ String region, final Set extensions, final Multimap aliases) {
+ final LoadingCache> extensionsForRegion = CacheBuilder.newBuilder().build(
+ CacheLoader.from(Functions.forMap(ImmutableMap.>of(region, extensions, "differentregion",
ImmutableSet. of()))));
PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSet fn = Guice.createInjector(
@@ -142,7 +142,7 @@ public class PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensio
@Provides
LoadingCache> getExtensions() {
- return extensionsForZone;
+ return extensionsForRegion;
}
@Provides
@@ -150,7 +150,7 @@ public class PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensio
return aliases;
}
}).getInstance(PresentWhenExtensionAnnotationNamespaceEqualsAnyNamespaceInExtensionsSet.class);
-
+
return fn;
}
}
diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/NovaApi.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/NovaApi.java
index 9f8d30203b..63fb5ab9cf 100644
--- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/NovaApi.java
+++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/NovaApi.java
@@ -20,8 +20,8 @@ import java.io.Closeable;
import java.util.Set;
import org.jclouds.javax.annotation.Nullable;
-import org.jclouds.location.Zone;
-import org.jclouds.location.functions.ZoneToEndpoint;
+import org.jclouds.location.Region;
+import org.jclouds.location.functions.RegionToEndpoint;
import org.jclouds.openstack.nova.v2_0.extensions.AvailabilityZoneApi;
import org.jclouds.openstack.nova.v2_0.extensions.ConsolesApi;
import org.jclouds.openstack.nova.v2_0.extensions.FlavorExtraSpecsApi;
@@ -49,156 +49,413 @@ import com.google.common.base.Optional;
import com.google.inject.Provides;
/**
- * Provides access to the OpenStack Compute (Nova) API.
+ * Provides access to the OpenStack Compute (Nova) v2 API.
*
*
*/
public interface NovaApi extends Closeable {
/**
*
- * @return the Zone codes configured
+ * @return the Region codes configured
*/
@Provides
- @Zone
- Set getConfiguredZones();
+ @Region
+ Set getConfiguredRegions();
/**
* Provides access to Server features.
*/
@Delegate
- ServerApi getServerApiForZone(
- @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
+ ServerApi getServerApi(@EndpointParam(parser = RegionToEndpoint.class) @Nullable String region);
/**
* Provides access to Flavor features.
*/
@Delegate
- FlavorApi getFlavorApiForZone(
- @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
+ FlavorApi getFlavorApi(@EndpointParam(parser = RegionToEndpoint.class) @Nullable String region);
/**
* Provides access to Extension features.
*/
@Delegate
- ExtensionApi getExtensionApiForZone(
- @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
+ ExtensionApi getExtensionApi(@EndpointParam(parser = RegionToEndpoint.class) @Nullable String region);
/**
* Provides access to Image features.
*/
@Delegate
- ImageApi getImageApiForZone(
- @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
+ ImageApi getImageApi(@EndpointParam(parser = RegionToEndpoint.class) @Nullable String region);
/**
- * Provides access to availability zone features
+ * Provides access to Availability Zone features.
+ *
+ * NOTE
+ * This API is an extension that may or may not be present in your OpenStack cloud. Use the Optional return type
+ * to determine if it is present.
*/
@Delegate
Optional extends AvailabilityZoneApi> getAvailabilityZoneApi(
- @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String region);
/**
* Provides access to Floating IP features.
+ *
+ * NOTE
+ * This API is an extension that may or may not be present in your OpenStack cloud. Use the Optional return type
+ * to determine if it is present.
*/
@Delegate
- Optional extends FloatingIPApi> getFloatingIPExtensionForZone(
- @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
+ Optional extends FloatingIPApi> getFloatingIPApi(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String region);
/**
* Provides access to Security Group features.
+ *
+ * NOTE
+ * This API is an extension that may or may not be present in your OpenStack cloud. Use the Optional return type
+ * to determine if it is present.
*/
@Delegate
- Optional extends SecurityGroupApi> getSecurityGroupExtensionForZone(
- @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
+ Optional extends SecurityGroupApi> getSecurityGroupApi(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String region);
/**
* Provides access to Key Pair features.
+ *
+ * NOTE
+ * This API is an extension that may or may not be present in your OpenStack cloud. Use the Optional return type
+ * to determine if it is present.
*/
@Delegate
- Optional extends KeyPairApi> getKeyPairExtensionForZone(
- @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
+ Optional extends KeyPairApi> getKeyPairApi(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String region);
/**
* Provides access to Host Administration features.
+ *
+ * NOTE
+ * This API is an extension that may or may not be present in your OpenStack cloud. Use the Optional return type
+ * to determine if it is present.
*/
@Delegate
- Optional extends HostAdministrationApi> getHostAdministrationExtensionForZone(
- @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
+ Optional extends HostAdministrationApi> getHostAdministrationApi(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String region);
/**
* Provides access to Simple Tenant Usage features.
+ *
+ * NOTE
+ * This API is an extension that may or may not be present in your OpenStack cloud. Use the Optional return type
+ * to determine if it is present.
*/
@Delegate
- Optional extends SimpleTenantUsageApi> getSimpleTenantUsageExtensionForZone(
- @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
+ Optional extends SimpleTenantUsageApi> getSimpleTenantUsageApi(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String region);
/**
* Provides access to Virtual Interface features.
+ *
+ * NOTE
+ * This API is an extension that may or may not be present in your OpenStack cloud. Use the Optional return type
+ * to determine if it is present.
*/
@Delegate
- Optional extends VirtualInterfaceApi> getVirtualInterfaceExtensionForZone(
- @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
+ Optional extends VirtualInterfaceApi> getVirtualInterfaceApi(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String region);
/**
* Provides access to Server Extra Data features.
+ *
+ * NOTE
+ * This API is an extension that may or may not be present in your OpenStack cloud. Use the Optional return type
+ * to determine if it is present.
*/
@Delegate
- Optional extends ServerWithSecurityGroupsApi> getServerWithSecurityGroupsExtensionForZone(
- @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
+ Optional extends ServerWithSecurityGroupsApi> getServerWithSecurityGroupsApi(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String region);
/**
* Provides access to Server Admin Actions features.
+ *
+ * NOTE
+ * This API is an extension that may or may not be present in your OpenStack cloud. Use the Optional return type
+ * to determine if it is present.
*/
@Delegate
- Optional extends ServerAdminApi> getServerAdminExtensionForZone(
- @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
+ Optional extends ServerAdminApi> getServerAdminApi(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String region);
/**
* Provides access to Aggregate features.
+ *
+ * NOTE
+ * This API is an extension that may or may not be present in your OpenStack cloud. Use the Optional return type
+ * to determine if it is present.
*/
@Delegate
- Optional extends HostAggregateApi> getHostAggregateExtensionForZone(
- @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
+ Optional extends HostAggregateApi> getHostAggregateApi(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String region);
/**
* Provides access to Flavor extra specs features.
+ *
+ * NOTE
+ * This API is an extension that may or may not be present in your OpenStack cloud. Use the Optional return type
+ * to determine if it is present.
*/
@Delegate
- Optional extends FlavorExtraSpecsApi> getFlavorExtraSpecsExtensionForZone(
- @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
+ Optional extends FlavorExtraSpecsApi> getFlavorExtraSpecsApi(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String region);
/**
* Provides access to Quota features.
+ *
+ * NOTE
+ * This API is an extension that may or may not be present in your OpenStack cloud. Use the Optional return type
+ * to determine if it is present.
*/
@Delegate
- Optional extends QuotaApi> getQuotaExtensionForZone(
- @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
+ Optional extends QuotaApi> getQuotaApi(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String region);
/**
* Provides access to Volume features.
+ *
+ * NOTE
+ * This API is an extension that may or may not be present in your OpenStack cloud. Use the Optional return type
+ * to determine if it is present.
*/
@Delegate
- Optional extends VolumeApi> getVolumeExtensionForZone(
- @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
+ Optional extends VolumeApi> getVolumeApi(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String region);
/**
* Provides access to Volume Attachment features.
+ *
+ * NOTE
+ * This API is an extension that may or may not be present in your OpenStack cloud. Use the Optional return type
+ * to determine if it is present.
*/
@Delegate
- Optional extends VolumeAttachmentApi> getVolumeAttachmentExtensionForZone(
- @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
+ Optional extends VolumeAttachmentApi> getVolumeAttachmentApi(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String region);
/**
* Provides access to Volume Type features.
+ *
+ * NOTE
+ * This API is an extension that may or may not be present in your OpenStack cloud. Use the Optional return type
+ * to determine if it is present.
*/
@Delegate
+ Optional extends VolumeTypeApi> getVolumeTypeApi(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String region);
+
+ /**
+ * Provides access to Console features.
+ *
+ * NOTE
+ * This API is an extension that may or may not be present in your OpenStack cloud. Use the Optional return type
+ * to determine if it is present.
+ */
+ @Delegate
+ Optional extends ConsolesApi> getConsolesApi(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String region);
+
+ /**
+ * @return the Zone codes configured
+ * @deprecated Please use {@link #getConfiguredRegions()} as this method will be removed in jclouds 3.0.
+ */
+ @Deprecated
+ @Provides
+ @Region
+ Set getConfiguredZones();
+
+ /**
+ * Provides access to Server features.
+ * @deprecated Please use {@link #getServerApi(String)} as this method will be removed in jclouds 3.0.
+ */
+ @Deprecated
+ @Delegate
+ ServerApi getServerApiForZone(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone);
+
+ /**
+ * Provides access to Flavor features.
+ * @deprecated Please use {@link #getFlavorApi(String)} as this method will be removed in jclouds 3.0.
+ */
+ @Deprecated
+ @Delegate
+ FlavorApi getFlavorApiForZone(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone);
+
+ /**
+ * Provides access to Extension features.
+ * @deprecated Please use {@link #getExtensionApi(String region)} as this method will be removed
+ * in jclouds 3.0.
+ */
+ @Deprecated
+ @Delegate
+ ExtensionApi getExtensionApiForZone(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone);
+
+ /**
+ * Provides access to Image features.
+ * @deprecated Please use {@link #getImageApi(String region)} as this method will be removed
+ * in jclouds 3.0.
+ */
+ @Deprecated
+ @Delegate
+ ImageApi getImageApiForZone(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone);
+
+ /**
+ * Provides access to Floating IP features.
+ * @deprecated Please use {@link #getFloatingIPApi(String region)} as this method will be removed
+ * in jclouds 3.0.
+ */
+ @Deprecated
+ @Delegate
+ Optional extends FloatingIPApi> getFloatingIPExtensionForZone(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone);
+
+ /**
+ * Provides access to Security Group features.
+ * @deprecated Please use {@link #getSecurityGroupApi(String region)} as this method will be removed
+ * in jclouds 3.0.
+ */
+ @Deprecated
+ @Delegate
+ Optional extends SecurityGroupApi> getSecurityGroupExtensionForZone(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone);
+
+ /**
+ * Provides access to Key Pair features.
+ * @deprecated Please use {@link #getKeyPairApi(String region)} as this method will be removed
+ * in jclouds 3.0.
+ */
+ @Deprecated
+ @Delegate
+ Optional extends KeyPairApi> getKeyPairExtensionForZone(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone);
+
+ /**
+ * Provides access to Host Administration features.
+ * @deprecated Please use {@link #getHostAdministrationApi(String region)} as this method will be removed
+ * in jclouds 3.0.
+ */
+ @Deprecated
+ @Delegate
+ Optional extends HostAdministrationApi> getHostAdministrationExtensionForZone(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone);
+
+ /**
+ * Provides access to Simple Tenant Usage features.
+ * @deprecated Please use {@link #getSimpleTenantUsageApi(String region)} as this method will be removed
+ * in jclouds 3.0.
+ */
+ @Deprecated
+ @Delegate
+ Optional extends SimpleTenantUsageApi> getSimpleTenantUsageExtensionForZone(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone);
+
+ /**
+ * Provides access to Virtual Interface features.
+ * @deprecated Please use {@link #getVirtualInterfaceApi(String region)} as this method will be removed
+ * in jclouds 3.0.
+ */
+ @Deprecated
+ @Delegate
+ Optional extends VirtualInterfaceApi> getVirtualInterfaceExtensionForZone(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone);
+
+ /**
+ * Provides access to Server Extra Data features.
+ * @deprecated Please use {@link #getServerWithSecurityGroupsApi(String region)} as this method will be removed
+ * in jclouds 3.0.
+ */
+ @Deprecated
+ @Delegate
+ Optional extends ServerWithSecurityGroupsApi> getServerWithSecurityGroupsExtensionForZone(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone);
+
+ /**
+ * Provides access to Server Admin Actions features.
+ * @deprecated Please use {@link #getServerAdminApi(String region)} as this method will be removed
+ * in jclouds 3.0.
+ */
+ @Deprecated
+ @Delegate
+ Optional extends ServerAdminApi> getServerAdminExtensionForZone(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone);
+
+ /**
+ * Provides access to Aggregate features.
+ * @deprecated Please use {@link #getHostAggregateApi(String region)} as this method will be removed
+ * in jclouds 3.0.
+ */
+ @Deprecated
+ @Delegate
+ Optional extends HostAggregateApi> getHostAggregateExtensionForZone(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone);
+
+ /**
+ * Provides access to Flavor extra specs features.
+ * @deprecated Please use {@link #getFlavorExtraSpecsApi(String)} as this method will be removed
+ * in jclouds 3.0.
+ */
+ @Deprecated
+ @Delegate
+ Optional extends FlavorExtraSpecsApi> getFlavorExtraSpecsExtensionForZone(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone);
+
+ /**
+ * Provides access to Quota features.
+ * @deprecated Please use {@link #getQuotaApi(String region)} as this method will be removed
+ * in jclouds 3.0.
+ */
+ @Deprecated
+ @Delegate
+ Optional extends QuotaApi> getQuotaExtensionForZone(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone);
+
+ /**
+ * Provides access to Volume features.
+ * @deprecated Please use {@link #getVolumeApi(String region)} as this method will be removed
+ * in jclouds 3.0.
+ */
+ @Deprecated
+ @Delegate
+ Optional extends VolumeApi> getVolumeExtensionForZone(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone);
+
+ /**
+ * Provides access to Volume Attachment features.
+ * @deprecated Please use {@link #getVolumeAttachmentApi(String region)} as this method will be removed
+ * in jclouds 3.0.
+ */
+ @Deprecated
+ @Delegate
+ Optional extends VolumeAttachmentApi> getVolumeAttachmentExtensionForZone(
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone);
+
+ /**
+ * Provides access to Volume Type features.
+ * @deprecated Please use {@link #getVolumeTypeApi(String region)} as this method will be removed
+ * in jclouds 3.0.
+ */
+ @Deprecated
+ @Delegate
Optional extends VolumeTypeApi> getVolumeTypeExtensionForZone(
- @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone);
/**
* Provides synchronous access to Console features.
+ * @deprecated Please use {@link #getConsolesApi(String region)} as this method will be removed
+ * in jclouds 3.0.
*/
+ @Deprecated
@Delegate
Optional extends ConsolesApi> getConsolesExtensionForZone(
- @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
+ @EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone);
}
diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/NovaApiMetadata.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/NovaApiMetadata.java
index 4dfd4010f5..be37fe7ca8 100644
--- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/NovaApiMetadata.java
+++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/NovaApiMetadata.java
@@ -31,7 +31,7 @@ import org.jclouds.compute.ComputeServiceContext;
import org.jclouds.openstack.keystone.v2_0.config.AuthenticationApiModule;
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.ZoneModule;
+import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule.RegionModule;
import org.jclouds.openstack.nova.v2_0.compute.config.NovaComputeServiceContextModule;
import org.jclouds.openstack.nova.v2_0.config.NovaHttpApiModule;
import org.jclouds.openstack.nova.v2_0.config.NovaParserModule;
@@ -92,7 +92,7 @@ public class NovaApiMetadata extends BaseHttpApiMetadata {
.defaultModules(ImmutableSet.>builder()
.add(AuthenticationApiModule.class)
.add(KeystoneAuthenticationModule.class)
- .add(ZoneModule.class)
+ .add(RegionModule.class)
.add(NovaParserModule.class)
.add(NovaHttpApiModule.class)
.add(NovaComputeServiceContextModule.class).build());
diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/NovaComputeService.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/NovaComputeService.java
index 163bbe47b3..6586395f35 100644
--- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/NovaComputeService.java
+++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/NovaComputeService.java
@@ -61,8 +61,8 @@ import org.jclouds.openstack.nova.v2_0.NovaApi;
import org.jclouds.openstack.nova.v2_0.compute.options.NovaTemplateOptions;
import org.jclouds.openstack.nova.v2_0.domain.KeyPair;
import org.jclouds.openstack.nova.v2_0.domain.SecurityGroup;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.SecurityGroupInZone;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.ZoneAndName;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.SecurityGroupInRegion;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.RegionAndName;
import org.jclouds.openstack.nova.v2_0.extensions.KeyPairApi;
import org.jclouds.openstack.nova.v2_0.extensions.SecurityGroupApi;
import org.jclouds.openstack.nova.v2_0.predicates.SecurityGroupPredicates;
@@ -81,9 +81,9 @@ import com.google.common.util.concurrent.ListeningExecutorService;
@Singleton
public class NovaComputeService extends BaseComputeService {
protected final NovaApi novaApi;
- protected final LoadingCache securityGroupMap;
- protected final LoadingCache keyPairCache;
- protected final Function, Multimap> orphanedGroupsByZoneId;
+ protected final LoadingCache securityGroupMap;
+ protected final LoadingCache keyPairCache;
+ protected final Function, Multimap> orphanedGroupsByRegionId;
protected final GroupNamingConvention.Factory namingConvention;
@Inject
@@ -102,9 +102,9 @@ public class NovaComputeService extends BaseComputeService {
RunScriptOnNode.Factory runScriptOnNodeFactory, InitAdminAccess initAdminAccess,
PersistNodeCredentials persistNodeCredentials, Timeouts timeouts,
@Named(Constants.PROPERTY_USER_THREADS) ListeningExecutorService userExecutor, NovaApi novaApi,
- LoadingCache securityGroupMap,
- LoadingCache keyPairCache,
- Function, Multimap> orphanedGroupsByZoneId,
+ LoadingCache securityGroupMap,
+ LoadingCache keyPairCache,
+ Function, Multimap> orphanedGroupsByRegionId,
GroupNamingConvention.Factory namingConvention, Optional imageExtension,
Optional securityGroupExtension) {
super(context, credentialStore, images, sizes, locations, listNodesStrategy, getImageStrategy,
@@ -115,53 +115,53 @@ public class NovaComputeService extends BaseComputeService {
this.novaApi = checkNotNull(novaApi, "novaApi");
this.securityGroupMap = checkNotNull(securityGroupMap, "securityGroupMap");
this.keyPairCache = checkNotNull(keyPairCache, "keyPairCache");
- this.orphanedGroupsByZoneId = checkNotNull(orphanedGroupsByZoneId, "orphanedGroupsByZoneId");
+ this.orphanedGroupsByRegionId = checkNotNull(orphanedGroupsByRegionId, "orphanedGroupsByRegionId");
this.namingConvention = checkNotNull(namingConvention, "namingConvention");
}
@Override
protected void cleanUpIncidentalResourcesOfDeadNodes(Set extends NodeMetadata> deadNodes) {
- Multimap zoneToZoneAndGroupNames = orphanedGroupsByZoneId.apply(deadNodes);
- for (Map.Entry> entry : zoneToZoneAndGroupNames.asMap().entrySet()) {
- cleanOrphanedGroupsInZone(ImmutableSet.copyOf(entry.getValue()), entry.getKey());
+ Multimap regionToRegionAndGroupNames = orphanedGroupsByRegionId.apply(deadNodes);
+ for (Map.Entry> entry : regionToRegionAndGroupNames.asMap().entrySet()) {
+ cleanOrphanedGroupsInRegion(ImmutableSet.copyOf(entry.getValue()), entry.getKey());
}
}
- protected void cleanOrphanedGroupsInZone(Set groups, String zoneId) {
- cleanupOrphanedSecurityGroupsInZone(groups, zoneId);
- cleanupOrphanedKeyPairsInZone(groups, zoneId);
+ protected void cleanOrphanedGroupsInRegion(Set groups, String regionId) {
+ cleanupOrphanedSecurityGroupsInRegion(groups, regionId);
+ cleanupOrphanedKeyPairsInRegion(groups, regionId);
}
- private void cleanupOrphanedSecurityGroupsInZone(Set groups, String zoneId) {
- Optional extends SecurityGroupApi> securityGroupApi = novaApi.getSecurityGroupExtensionForZone(zoneId);
+ private void cleanupOrphanedSecurityGroupsInRegion(Set groups, String regionId) {
+ Optional extends SecurityGroupApi> securityGroupApi = novaApi.getSecurityGroupApi(regionId);
if (securityGroupApi.isPresent()) {
for (String group : groups) {
for (SecurityGroup securityGroup : Iterables.filter(securityGroupApi.get().list(),
SecurityGroupPredicates.nameMatches(namingConvention.create().containsGroup(group)))) {
- ZoneAndName zoneAndName = ZoneAndName.fromZoneAndName(zoneId, securityGroup.getName());
- logger.debug(">> deleting securityGroup(%s)", zoneAndName);
+ RegionAndName regionAndName = RegionAndName.fromRegionAndName(regionId, securityGroup.getName());
+ logger.debug(">> deleting securityGroup(%s)", regionAndName);
securityGroupApi.get().delete(securityGroup.getId());
// TODO: test this clear happens
- securityGroupMap.invalidate(zoneAndName);
- logger.debug("<< deleted securityGroup(%s)", zoneAndName);
+ securityGroupMap.invalidate(regionAndName);
+ logger.debug("<< deleted securityGroup(%s)", regionAndName);
}
}
}
}
- private void cleanupOrphanedKeyPairsInZone(Set groups, String zoneId) {
- Optional extends KeyPairApi> keyPairApi = novaApi.getKeyPairExtensionForZone(zoneId);
+ private void cleanupOrphanedKeyPairsInRegion(Set groups, String regionId) {
+ Optional extends KeyPairApi> keyPairApi = novaApi.getKeyPairApi(regionId);
if (keyPairApi.isPresent()) {
for (String group : groups) {
for (KeyPair pair : keyPairApi.get().list().filter(nameMatches(namingConvention.create().containsGroup(group)))) {
- ZoneAndName zoneAndName = ZoneAndName.fromZoneAndName(zoneId, pair.getName());
- logger.debug(">> deleting keypair(%s)", zoneAndName);
+ RegionAndName regionAndName = RegionAndName.fromRegionAndName(regionId, pair.getName());
+ logger.debug(">> deleting keypair(%s)", regionAndName);
keyPairApi.get().delete(pair.getName());
// TODO: test this clear happens
- keyPairCache.invalidate(zoneAndName);
- logger.debug("<< deleted keypair(%s)", zoneAndName);
+ keyPairCache.invalidate(regionAndName);
+ logger.debug("<< deleted keypair(%s)", regionAndName);
}
- keyPairCache.invalidate(ZoneAndName.fromZoneAndName(zoneId,
+ keyPairCache.invalidate(RegionAndName.fromRegionAndName(regionId,
namingConvention.create().sharedNameForGroup(group)));
}
}
@@ -174,7 +174,5 @@ public class NovaComputeService extends BaseComputeService {
public NovaTemplateOptions templateOptions() {
return NovaTemplateOptions.class.cast(super.templateOptions());
}
-
-
}
diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/NovaComputeServiceAdapter.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/NovaComputeServiceAdapter.java
index 236189913b..f0c973bb12 100644
--- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/NovaComputeServiceAdapter.java
+++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/NovaComputeServiceAdapter.java
@@ -34,22 +34,23 @@ import org.jclouds.compute.domain.Template;
import org.jclouds.compute.reference.ComputeServiceConstants;
import org.jclouds.domain.Location;
import org.jclouds.domain.LoginCredentials;
-import org.jclouds.location.Zone;
+import org.jclouds.location.Region;
import org.jclouds.logging.Logger;
import org.jclouds.openstack.nova.v2_0.NovaApi;
import org.jclouds.openstack.nova.v2_0.compute.functions.RemoveFloatingIpFromNodeAndDeallocate;
import org.jclouds.openstack.nova.v2_0.compute.options.NovaTemplateOptions;
+import org.jclouds.openstack.nova.v2_0.compute.strategy.ApplyNovaTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddToSet;
import org.jclouds.openstack.nova.v2_0.domain.Flavor;
import org.jclouds.openstack.nova.v2_0.domain.Image;
import org.jclouds.openstack.nova.v2_0.domain.KeyPair;
import org.jclouds.openstack.nova.v2_0.domain.RebootType;
import org.jclouds.openstack.nova.v2_0.domain.Server;
import org.jclouds.openstack.nova.v2_0.domain.ServerCreated;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.FlavorInZone;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.ImageInZone;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.ServerInZone;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.ZoneAndId;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.ZoneAndName;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.FlavorInRegion;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.ImageInRegion;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.RegionAndId;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.RegionAndName;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.ServerInRegion;
import org.jclouds.openstack.nova.v2_0.options.CreateServerOptions;
import org.jclouds.openstack.nova.v2_0.predicates.ImagePredicates;
@@ -67,23 +68,23 @@ import com.google.common.collect.ImmutableSet.Builder;
* model to the computeService generic domain model.
*/
public class NovaComputeServiceAdapter implements
- ComputeServiceAdapter {
+ ComputeServiceAdapter {
@Resource
@Named(ComputeServiceConstants.COMPUTE_LOGGER)
protected Logger logger = Logger.NULL;
protected final NovaApi novaApi;
- protected final Supplier> zoneIds;
+ protected final Supplier> regionIds;
protected final RemoveFloatingIpFromNodeAndDeallocate removeFloatingIpFromNodeAndDeallocate;
- protected final LoadingCache keyPairCache;
+ protected final LoadingCache keyPairCache;
@Inject
- public NovaComputeServiceAdapter(NovaApi novaApi, @Zone Supplier> zoneIds,
+ public NovaComputeServiceAdapter(NovaApi novaApi, @Region Supplier> regionIds,
RemoveFloatingIpFromNodeAndDeallocate removeFloatingIpFromNodeAndDeallocate,
- LoadingCache keyPairCache) {
+ LoadingCache keyPairCache) {
this.novaApi = checkNotNull(novaApi, "novaApi");
- this.zoneIds = checkNotNull(zoneIds, "zoneIds");
+ this.regionIds = checkNotNull(regionIds, "regionIds");
this.removeFloatingIpFromNodeAndDeallocate = checkNotNull(removeFloatingIpFromNodeAndDeallocate,
"removeFloatingIpFromNodeAndDeallocate");
this.keyPairCache = checkNotNull(keyPairCache, "keyPairCache");
@@ -95,7 +96,7 @@ public class NovaComputeServiceAdapter implements
* done so.
*/
@Override
- public NodeAndInitialCredentials createNodeWithGroupEncodedIntoName(String group, String name,
+ public NodeAndInitialCredentials createNodeWithGroupEncodedIntoName(String group, String name,
Template template) {
LoginCredentials.Builder credentialsBuilder = LoginCredentials.builder();
@@ -118,40 +119,40 @@ public class NovaComputeServiceAdapter implements
Optional privateKey = Optional.absent();
if (templateOptions.getKeyPairName() != null) {
options.keyPairName(templateOptions.getKeyPairName());
- KeyPair keyPair = keyPairCache.getIfPresent(ZoneAndName.fromZoneAndName(template.getLocation().getId(), templateOptions.getKeyPairName()));
+ KeyPair keyPair = keyPairCache.getIfPresent(RegionAndName.fromRegionAndName(template.getLocation().getId(), templateOptions.getKeyPairName()));
if (keyPair != null && keyPair.getPrivateKey() != null) {
privateKey = Optional.of(keyPair.getPrivateKey());
credentialsBuilder.privateKey(privateKey.get());
}
}
- String zoneId = template.getLocation().getId();
+ String regionId = template.getLocation().getId();
String imageId = template.getImage().getProviderId();
String flavorId = template.getHardware().getProviderId();
- logger.debug(">> creating new server zone(%s) name(%s) image(%s) flavor(%s) options(%s)", zoneId, name, imageId, flavorId, options);
- ServerCreated lightweightServer = novaApi.getServerApiForZone(zoneId).create(name, imageId, flavorId, options);
- Server server = novaApi.getServerApiForZone(zoneId).get(lightweightServer.getId());
+ logger.debug(">> creating new server region(%s) name(%s) image(%s) flavor(%s) options(%s)", regionId, name, imageId, flavorId, options);
+ ServerCreated lightweightServer = novaApi.getServerApi(regionId).create(name, imageId, flavorId, options);
+ Server server = novaApi.getServerApi(regionId).get(lightweightServer.getId());
logger.trace("<< server(%s)", server.getId());
- ServerInZone serverInZone = new ServerInZone(server, zoneId);
+ ServerInRegion serverInRegion = new ServerInRegion(server, regionId);
if (!privateKey.isPresent() && lightweightServer.getAdminPass().isPresent())
credentialsBuilder.password(lightweightServer.getAdminPass().get());
- return new NodeAndInitialCredentials(serverInZone, serverInZone.slashEncode(), credentialsBuilder
+ return new NodeAndInitialCredentials(serverInRegion, serverInRegion.slashEncode(), credentialsBuilder
.build());
}
@Override
- public Iterable listHardwareProfiles() {
- Builder builder = ImmutableSet.builder();
- for (final String zoneId : zoneIds.get()) {
- builder.addAll(transform(novaApi.getFlavorApiForZone(zoneId).listInDetail().concat(),
- new Function() {
+ public Iterable listHardwareProfiles() {
+ Builder builder = ImmutableSet.builder();
+ for (final String regionId : regionIds.get()) {
+ builder.addAll(transform(novaApi.getFlavorApi(regionId).listInDetail().concat(),
+ new Function() {
@Override
- public FlavorInZone apply(Flavor arg0) {
- return new FlavorInZone(arg0, zoneId);
+ public FlavorInRegion apply(Flavor arg0) {
+ return new FlavorInRegion(arg0, regionId);
}
}));
@@ -160,19 +161,19 @@ public class NovaComputeServiceAdapter implements
}
@Override
- public Iterable listImages() {
- Builder builder = ImmutableSet.builder();
- Set zones = zoneIds.get();
- checkState(zones.size() > 0, "no zones found in supplier %s", zoneIds);
- for (final String zoneId : zones) {
- Set extends Image> images = novaApi.getImageApiForZone(zoneId).listInDetail().concat().toSet();
+ public Iterable listImages() {
+ Builder builder = ImmutableSet.builder();
+ Set regions = regionIds.get();
+ checkState(regions.size() > 0, "no regions found in supplier %s", regionIds);
+ for (final String regionId : regions) {
+ Set extends Image> images = novaApi.getImageApi(regionId).listInDetail().concat().toSet();
if (images.size() == 0) {
- logger.debug("no images found in zone %s", zoneId);
+ logger.debug("no images found in region %s", regionId);
continue;
}
Iterable extends Image> active = filter(images, ImagePredicates.statusEquals(Image.Status.ACTIVE));
if (images.size() == 0) {
- logger.debug("no images with status active in zone %s; non-active: %s", zoneId,
+ logger.debug("no images with status active in region %s; non-active: %s", regionId,
transform(active, new Function() {
@Override
@@ -184,11 +185,11 @@ public class NovaComputeServiceAdapter implements
}));
continue;
}
- builder.addAll(transform(active, new Function() {
+ builder.addAll(transform(active, new Function() {
@Override
- public ImageInZone apply(Image arg0) {
- return new ImageInZone(arg0, zoneId);
+ public ImageInRegion apply(Image arg0) {
+ return new ImageInRegion(arg0, regionId);
}
}));
@@ -197,15 +198,15 @@ public class NovaComputeServiceAdapter implements
}
@Override
- public Iterable listNodes() {
- Builder builder = ImmutableSet.builder();
- for (final String zoneId : zoneIds.get()) {
- builder.addAll(novaApi.getServerApiForZone(zoneId).listInDetail().concat()
- .transform(new Function() {
+ public Iterable listNodes() {
+ Builder builder = ImmutableSet.builder();
+ for (final String regionId : regionIds.get()) {
+ builder.addAll(novaApi.getServerApi(regionId).listInDetail().concat()
+ .transform(new Function() {
@Override
- public ServerInZone apply(Server arg0) {
- return new ServerInZone(arg0, zoneId);
+ public ServerInRegion apply(Server arg0) {
+ return new ServerInRegion(arg0, regionId);
}
}));
@@ -214,11 +215,11 @@ public class NovaComputeServiceAdapter implements
}
@Override
- public Iterable listNodesByIds(final Iterable ids) {
- return filter(listNodes(), new Predicate() {
+ public Iterable listNodesByIds(final Iterable ids) {
+ return filter(listNodes(), new Predicate() {
@Override
- public boolean apply(ServerInZone server) {
+ public boolean apply(ServerInRegion server) {
return contains(ids, server.slashEncode());
}
});
@@ -231,43 +232,43 @@ public class NovaComputeServiceAdapter implements
}
@Override
- public ServerInZone getNode(String id) {
- ZoneAndId zoneAndId = ZoneAndId.fromSlashEncoded(id);
- Server server = novaApi.getServerApiForZone(zoneAndId.getZone()).get(zoneAndId.getId());
- return server == null ? null : new ServerInZone(server, zoneAndId.getZone());
+ public ServerInRegion getNode(String id) {
+ RegionAndId regionAndId = RegionAndId.fromSlashEncoded(id);
+ Server server = novaApi.getServerApi(regionAndId.getRegion()).get(regionAndId.getId());
+ return server == null ? null : new ServerInRegion(server, regionAndId.getRegion());
}
@Override
- public ImageInZone getImage(String id) {
- ZoneAndId zoneAndId = ZoneAndId.fromSlashEncoded(id);
- Image image = novaApi.getImageApiForZone(zoneAndId.getZone()).get(zoneAndId.getId());
- return image == null ? null : new ImageInZone(image, zoneAndId.getZone());
+ public ImageInRegion getImage(String id) {
+ RegionAndId regionAndId = RegionAndId.fromSlashEncoded(id);
+ Image image = novaApi.getImageApi(regionAndId.getRegion()).get(regionAndId.getId());
+ return image == null ? null : new ImageInRegion(image, regionAndId.getRegion());
}
@Override
public void destroyNode(String id) {
- ZoneAndId zoneAndId = ZoneAndId.fromSlashEncoded(id);
- if (novaApi.getFloatingIPExtensionForZone(zoneAndId.getZone()).isPresent()) {
+ RegionAndId regionAndId = RegionAndId.fromSlashEncoded(id);
+ if (novaApi.getFloatingIPApi(regionAndId.getRegion()).isPresent()) {
try {
- removeFloatingIpFromNodeAndDeallocate.apply(zoneAndId);
+ removeFloatingIpFromNodeAndDeallocate.apply(regionAndId);
} catch (RuntimeException e) {
logger.warn(e, "<< error removing and deallocating ip from node(%s): %s", id, e.getMessage());
}
}
- novaApi.getServerApiForZone(zoneAndId.getZone()).delete(zoneAndId.getId());
+ novaApi.getServerApi(regionAndId.getRegion()).delete(regionAndId.getId());
}
@Override
public void rebootNode(String id) {
- ZoneAndId zoneAndId = ZoneAndId.fromSlashEncoded(id);
- novaApi.getServerApiForZone(zoneAndId.getZone()).reboot(zoneAndId.getId(), RebootType.HARD);
+ RegionAndId regionAndId = RegionAndId.fromSlashEncoded(id);
+ novaApi.getServerApi(regionAndId.getRegion()).reboot(regionAndId.getId(), RebootType.HARD);
}
@Override
public void resumeNode(String id) {
- ZoneAndId zoneAndId = ZoneAndId.fromSlashEncoded(id);
- if (novaApi.getServerAdminExtensionForZone(zoneAndId.getZone()).isPresent()) {
- novaApi.getServerAdminExtensionForZone(zoneAndId.getZone()).get().resume(zoneAndId.getId());
+ RegionAndId regionAndId = RegionAndId.fromSlashEncoded(id);
+ if (novaApi.getServerAdminApi(regionAndId.getRegion()).isPresent()) {
+ novaApi.getServerAdminApi(regionAndId.getRegion()).get().resume(regionAndId.getId());
} else {
throw new UnsupportedOperationException("resume requires installation of the Admin Actions extension");
}
@@ -275,9 +276,9 @@ public class NovaComputeServiceAdapter implements
@Override
public void suspendNode(String id) {
- ZoneAndId zoneAndId = ZoneAndId.fromSlashEncoded(id);
- if (novaApi.getServerAdminExtensionForZone(zoneAndId.getZone()).isPresent()) {
- novaApi.getServerAdminExtensionForZone(zoneAndId.getZone()).get().suspend(zoneAndId.getId());
+ RegionAndId regionAndId = RegionAndId.fromSlashEncoded(id);
+ if (novaApi.getServerAdminApi(regionAndId.getRegion()).isPresent()) {
+ novaApi.getServerAdminApi(regionAndId.getRegion()).get().suspend(regionAndId.getId());
} else {
throw new UnsupportedOperationException("suspend requires installation of the Admin Actions extension");
}
diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/config/NovaComputeServiceContextModule.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/config/NovaComputeServiceContextModule.java
index e070bdb11f..cabca593ef 100644
--- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/config/NovaComputeServiceContextModule.java
+++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/config/NovaComputeServiceContextModule.java
@@ -52,14 +52,14 @@ import org.jclouds.openstack.nova.v2_0.compute.NovaComputeServiceAdapter;
import org.jclouds.openstack.nova.v2_0.compute.extensions.NovaImageExtension;
import org.jclouds.openstack.nova.v2_0.compute.extensions.NovaSecurityGroupExtension;
import org.jclouds.openstack.nova.v2_0.compute.functions.CreateSecurityGroupIfNeeded;
-import org.jclouds.openstack.nova.v2_0.compute.functions.FlavorInZoneToHardware;
-import org.jclouds.openstack.nova.v2_0.compute.functions.ImageInZoneToImage;
+import org.jclouds.openstack.nova.v2_0.compute.functions.FlavorInRegionToHardware;
+import org.jclouds.openstack.nova.v2_0.compute.functions.ImageInRegionToImage;
import org.jclouds.openstack.nova.v2_0.compute.functions.ImageToOperatingSystem;
-import org.jclouds.openstack.nova.v2_0.compute.functions.NovaSecurityGroupInZoneToSecurityGroup;
+import org.jclouds.openstack.nova.v2_0.compute.functions.NovaSecurityGroupInRegionToSecurityGroup;
import org.jclouds.openstack.nova.v2_0.compute.functions.NovaSecurityGroupToSecurityGroup;
-import org.jclouds.openstack.nova.v2_0.compute.functions.OrphanedGroupsByZoneId;
+import org.jclouds.openstack.nova.v2_0.compute.functions.OrphanedGroupsByRegionId;
import org.jclouds.openstack.nova.v2_0.compute.functions.SecurityGroupRuleToIpPermission;
-import org.jclouds.openstack.nova.v2_0.compute.functions.ServerInZoneToNodeMetadata;
+import org.jclouds.openstack.nova.v2_0.compute.functions.ServerInRegionToNodeMetadata;
import org.jclouds.openstack.nova.v2_0.compute.loaders.CreateUniqueKeyPair;
import org.jclouds.openstack.nova.v2_0.compute.loaders.FindSecurityGroupOrCreate;
import org.jclouds.openstack.nova.v2_0.compute.loaders.LoadFloatingIpsForInstance;
@@ -69,13 +69,13 @@ import org.jclouds.openstack.nova.v2_0.domain.FloatingIP;
import org.jclouds.openstack.nova.v2_0.domain.KeyPair;
import org.jclouds.openstack.nova.v2_0.domain.SecurityGroupRule;
import org.jclouds.openstack.nova.v2_0.domain.Server;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.FlavorInZone;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.ImageInZone;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.SecurityGroupInZone;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.ServerInZone;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.ZoneAndId;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.ZoneAndName;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.ZoneSecurityGroupNameAndPorts;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.FlavorInRegion;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.ImageInRegion;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.SecurityGroupInRegion;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.ServerInRegion;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.RegionAndId;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.RegionAndName;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.RegionSecurityGroupNameAndPorts;
import org.jclouds.openstack.nova.v2_0.predicates.FindSecurityGroupWithNameAndReturnTrue;
import com.google.common.annotations.VisibleForTesting;
@@ -100,19 +100,19 @@ import com.google.inject.name.Names;
* Module for building a compute service context for Nova
*/
public class NovaComputeServiceContextModule extends
- ComputeServiceAdapterContextModule {
+ ComputeServiceAdapterContextModule {
@SuppressWarnings("unchecked")
@Override
protected void configure() {
super.configure();
- bind(new TypeLiteral>() {
+ bind(new TypeLiteral>() {
}).to(NovaComputeServiceAdapter.class);
bind(ComputeService.class).to(NovaComputeService.class);
- bind(new TypeLiteral>() {
- }).to(ServerInZoneToNodeMetadata.class);
+ bind(new TypeLiteral>() {
+ }).to(ServerInRegionToNodeMetadata.class);
bind(new TypeLiteral>() {
}).to(SecurityGroupRuleToIpPermission.class);
@@ -120,19 +120,19 @@ public class NovaComputeServiceContextModule extends
bind(new TypeLiteral>() {
}).to(NovaSecurityGroupToSecurityGroup.class);
- bind(new TypeLiteral>() {
- }).to(NovaSecurityGroupInZoneToSecurityGroup.class);
+ bind(new TypeLiteral>() {
+ }).to(NovaSecurityGroupInRegionToSecurityGroup.class);
bind(new TypeLiteral, Multimap>>() {
- }).to(OrphanedGroupsByZoneId.class);
+ }).to(OrphanedGroupsByRegionId.class);
- bind(new TypeLiteral>() {
- }).to(ImageInZoneToImage.class);
+ bind(new TypeLiteral>() {
+ }).to(ImageInRegionToImage.class);
bind(new TypeLiteral>() {
}).to(ImageToOperatingSystem.class);
- bind(new TypeLiteral>() {
- }).to(FlavorInZoneToHardware.class);
+ bind(new TypeLiteral>() {
+ }).to(FlavorInRegionToHardware.class);
// we aren't converting location from a provider-specific type
bind(new TypeLiteral>() {
@@ -140,19 +140,19 @@ public class NovaComputeServiceContextModule extends
bind(TemplateOptions.class).to(NovaTemplateOptions.class);
- bind(new TypeLiteral>>() {
+ bind(new TypeLiteral>>() {
}).annotatedWith(Names.named("FLOATINGIP")).to(LoadFloatingIpsForInstance.class);
- bind(new TypeLiteral>() {
+ bind(new TypeLiteral>() {
}).to(CreateSecurityGroupIfNeeded.class);
- bind(new TypeLiteral>() {
+ bind(new TypeLiteral>() {
}).to(FindSecurityGroupOrCreate.class);
bind(CreateNodesWithGroupEncodedIntoNameThenAddToSet.class).to(
ApplyNovaTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddToSet.class);
- bind(new TypeLiteral>() {
+ bind(new TypeLiteral>() {
}).to(CreateUniqueKeyPair.class);
bind(new TypeLiteral() {
@@ -174,15 +174,15 @@ public class NovaComputeServiceContextModule extends
@Provides
@Singleton
@Named("FLOATINGIP")
- protected LoadingCache> instanceToFloatingIps(
- @Named("FLOATINGIP") CacheLoader> in) {
+ protected LoadingCache> instanceToFloatingIps(
+ @Named("FLOATINGIP") CacheLoader> in) {
return CacheBuilder.newBuilder().build(in);
}
@Provides
@Singleton
- protected LoadingCache securityGroupMap(
- CacheLoader in) {
+ protected LoadingCache securityGroupMap(
+ CacheLoader in) {
return CacheBuilder.newBuilder().build(in);
}
@@ -195,7 +195,7 @@ public class NovaComputeServiceContextModule extends
@Provides
@Singleton
@Named("SECURITYGROUP_PRESENT")
- protected Predicate> securityGroupEventualConsistencyDelay(
+ protected Predicate> securityGroupEventualConsistencyDelay(
FindSecurityGroupWithNameAndReturnTrue in,
@Named(TIMEOUT_SECURITYGROUP_PRESENT) long msDelay) {
return retry(in, msDelay, 100l, MILLISECONDS);
@@ -203,8 +203,8 @@ public class NovaComputeServiceContextModule extends
@Provides
@Singleton
- protected LoadingCache keyPairMap(
- CacheLoader in) {
+ protected LoadingCache keyPairMap(
+ CacheLoader in) {
return CacheBuilder.newBuilder().build(in);
}
diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/extensions/NovaImageExtension.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/extensions/NovaImageExtension.java
index dfee4d1d26..9e12d97bf3 100644
--- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/extensions/NovaImageExtension.java
+++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/extensions/NovaImageExtension.java
@@ -46,7 +46,7 @@ import org.jclouds.domain.Location;
import org.jclouds.logging.Logger;
import org.jclouds.openstack.nova.v2_0.NovaApi;
import org.jclouds.openstack.nova.v2_0.domain.Server;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.ZoneAndId;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.RegionAndId;
import com.google.common.base.Predicate;
import com.google.common.base.Supplier;
@@ -82,10 +82,10 @@ public class NovaImageExtension implements ImageExtension {
@Override
public ImageTemplate buildImageTemplateFromNode(String name, final String id) {
- ZoneAndId zoneAndId = ZoneAndId.fromSlashEncoded(id);
- Server server = novaApi.getServerApiForZone(zoneAndId.getZone()).get(zoneAndId.getId());
+ RegionAndId regionAndId = RegionAndId.fromSlashEncoded(id);
+ Server server = novaApi.getServerApi(regionAndId.getRegion()).get(regionAndId.getId());
if (server == null)
- throw new NoSuchElementException("Cannot find server with id: " + zoneAndId);
+ throw new NoSuchElementException("Cannot find server with id: " + regionAndId);
CloneImageTemplate template = new ImageTemplateBuilder.CloneImageTemplateBuilder().nodeId(id).name(name).build();
return template;
}
@@ -95,19 +95,19 @@ public class NovaImageExtension implements ImageExtension {
checkState(template instanceof CloneImageTemplate,
" openstack-nova only supports creating images through cloning.");
CloneImageTemplate cloneTemplate = (CloneImageTemplate) template;
- ZoneAndId sourceImageZoneAndId = ZoneAndId.fromSlashEncoded(cloneTemplate.getSourceNodeId());
+ RegionAndId sourceImageRegionAndId = RegionAndId.fromSlashEncoded(cloneTemplate.getSourceNodeId());
- String newImageId = novaApi.getServerApiForZone(sourceImageZoneAndId.getZone()).createImageFromServer(
- cloneTemplate.getName(), sourceImageZoneAndId.getId());
+ String newImageId = novaApi.getServerApi(sourceImageRegionAndId.getRegion()).createImageFromServer(
+ cloneTemplate.getName(), sourceImageRegionAndId.getId());
- final ZoneAndId targetImageZoneAndId = ZoneAndId.fromZoneAndId(sourceImageZoneAndId.getZone(), newImageId);
+ final RegionAndId targetImageRegionAndId = RegionAndId.fromRegionAndId(sourceImageRegionAndId.getRegion(), newImageId);
logger.info(">> Registered new Image %s, waiting for it to become available.", newImageId);
-
+
final AtomicReference image = Atomics.newReference(new ImageBuilder()
- .location(find(locations.get(), idEquals(targetImageZoneAndId.getZone())))
- .id(targetImageZoneAndId.slashEncode())
- .providerId(targetImageZoneAndId.getId())
+ .location(find(locations.get(), idEquals(targetImageRegionAndId.getRegion())))
+ .id(targetImageRegionAndId.slashEncode())
+ .providerId(targetImageRegionAndId.getId())
.description(cloneTemplate.getName())
.operatingSystem(OperatingSystem.builder().description(cloneTemplate.getName()).build())
.status(Image.Status.PENDING).build());
@@ -125,9 +125,9 @@ public class NovaImageExtension implements ImageExtension {
@Override
public boolean deleteImage(String id) {
- ZoneAndId zoneAndId = ZoneAndId.fromSlashEncoded(id);
+ RegionAndId regionAndId = RegionAndId.fromSlashEncoded(id);
try {
- this.novaApi.getImageApiForZone(zoneAndId.getZone()).delete(zoneAndId.getId());
+ this.novaApi.getImageApi(regionAndId.getRegion()).delete(regionAndId.getId());
} catch (Exception e) {
return false;
}
diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/extensions/NovaSecurityGroupExtension.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/extensions/NovaSecurityGroupExtension.java
index e808ed366b..0899bb30e6 100644
--- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/extensions/NovaSecurityGroupExtension.java
+++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/extensions/NovaSecurityGroupExtension.java
@@ -40,17 +40,17 @@ import org.jclouds.compute.domain.SecurityGroup;
import org.jclouds.compute.extensions.SecurityGroupExtension;
import org.jclouds.compute.functions.GroupNamingConvention;
import org.jclouds.domain.Location;
-import org.jclouds.location.Zone;
+import org.jclouds.location.Region;
import org.jclouds.net.domain.IpPermission;
import org.jclouds.net.domain.IpProtocol;
import org.jclouds.openstack.nova.v2_0.NovaApi;
import org.jclouds.openstack.nova.v2_0.domain.Ingress;
import org.jclouds.openstack.nova.v2_0.domain.SecurityGroupRule;
import org.jclouds.openstack.nova.v2_0.domain.ServerWithSecurityGroups;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.SecurityGroupInZone;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.ZoneAndId;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.ZoneAndName;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.ZoneSecurityGroupNameAndPorts;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.RegionAndId;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.RegionAndName;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.RegionSecurityGroupNameAndPorts;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.SecurityGroupInRegion;
import org.jclouds.openstack.nova.v2_0.extensions.SecurityGroupApi;
import org.jclouds.openstack.nova.v2_0.extensions.ServerWithSecurityGroupsApi;
@@ -70,22 +70,22 @@ public class NovaSecurityGroupExtension implements SecurityGroupExtension {
protected final NovaApi api;
protected final ListeningExecutorService userExecutor;
- protected final Supplier> zoneIds;
- protected final Function groupConverter;
- protected final LoadingCache groupCreator;
+ protected final Supplier> regionIds;
+ protected final Function groupConverter;
+ protected final LoadingCache groupCreator;
protected final GroupNamingConvention.Factory namingConvention;
@Inject
public NovaSecurityGroupExtension(NovaApi api,
@Named(Constants.PROPERTY_USER_THREADS) ListeningExecutorService userExecutor,
- @Zone Supplier> zoneIds,
- Function groupConverter,
- LoadingCache groupCreator,
+ @Region Supplier> regionIds,
+ Function groupConverter,
+ LoadingCache groupCreator,
GroupNamingConvention.Factory namingConvention) {
this.api = checkNotNull(api, "api");
this.userExecutor = checkNotNull(userExecutor, "userExecutor");
- this.zoneIds = checkNotNull(zoneIds, "zoneIds");
+ this.regionIds = checkNotNull(regionIds, "regionIds");
this.groupConverter = checkNotNull(groupConverter, "groupConverter");
this.groupCreator = checkNotNull(groupCreator, "groupCreator");
this.namingConvention = checkNotNull(namingConvention, "namingConvention");
@@ -93,7 +93,7 @@ public class NovaSecurityGroupExtension implements SecurityGroupExtension {
@Override
public Set listSecurityGroups() {
- Iterable extends SecurityGroupInZone> rawGroups = pollSecurityGroups();
+ Iterable extends SecurityGroupInRegion> rawGroups = pollSecurityGroups();
Iterable groups = transform(filter(rawGroups, notNull()),
groupConverter);
return ImmutableSet.copyOf(groups);
@@ -102,15 +102,15 @@ public class NovaSecurityGroupExtension implements SecurityGroupExtension {
@Override
public Set listSecurityGroupsInLocation(final Location location) {
- String zone = location.getId();
- if (zone == null) {
+ String region = location.getId();
+ if (region == null) {
return ImmutableSet.of();
}
- return listSecurityGroupsInLocation(zone);
+ return listSecurityGroupsInLocation(region);
}
- public Set listSecurityGroupsInLocation(String zone) {
- Iterable extends SecurityGroupInZone> rawGroups = pollSecurityGroupsByZone(zone);
+ public Set listSecurityGroupsInLocation(String region) {
+ Iterable extends SecurityGroupInRegion> rawGroups = pollSecurityGroupsByRegion(region);
Iterable groups = transform(filter(rawGroups, notNull()),
groupConverter);
return ImmutableSet.copyOf(groups);
@@ -118,12 +118,12 @@ public class NovaSecurityGroupExtension implements SecurityGroupExtension {
@Override
public Set listSecurityGroupsForNode(String id) {
- ZoneAndId zoneAndId = ZoneAndId.fromSlashEncoded(checkNotNull(id, "id"));
- String zone = zoneAndId.getZone();
- String instanceId = zoneAndId.getId();
+ RegionAndId regionAndId = RegionAndId.fromSlashEncoded(checkNotNull(id, "id"));
+ String region = regionAndId.getRegion();
+ String instanceId = regionAndId.getId();
- Optional extends ServerWithSecurityGroupsApi> serverApi = api.getServerWithSecurityGroupsExtensionForZone(zone);
- Optional extends SecurityGroupApi> sgApi = api.getSecurityGroupExtensionForZone(zone);
+ Optional extends ServerWithSecurityGroupsApi> serverApi = api.getServerWithSecurityGroupsApi(region);
+ Optional extends SecurityGroupApi> sgApi = api.getSecurityGroupApi(region);
if (!serverApi.isPresent() || !sgApi.isPresent()) {
return ImmutableSet.of();
@@ -135,54 +135,54 @@ public class NovaSecurityGroupExtension implements SecurityGroupExtension {
}
Set groupNames = instance.getSecurityGroupNames();
- Set extends SecurityGroupInZone> rawGroups =
- sgApi.get().list().filter(nameIn(groupNames)).transform(groupToGroupInZone(zone)).toSet();
+ Set extends SecurityGroupInRegion> rawGroups =
+ sgApi.get().list().filter(nameIn(groupNames)).transform(groupToGroupInRegion(region)).toSet();
return ImmutableSet.copyOf(transform(filter(rawGroups, notNull()), groupConverter));
}
@Override
public SecurityGroup getSecurityGroupById(String id) {
- ZoneAndId zoneAndId = ZoneAndId.fromSlashEncoded(checkNotNull(id, "id"));
- String zone = zoneAndId.getZone();
- String groupId = zoneAndId.getId();
+ RegionAndId regionAndId = RegionAndId.fromSlashEncoded(checkNotNull(id, "id"));
+ String region = regionAndId.getRegion();
+ String groupId = regionAndId.getId();
- Optional extends SecurityGroupApi> sgApi = api.getSecurityGroupExtensionForZone(zone);
+ Optional extends SecurityGroupApi> sgApi = api.getSecurityGroupApi(region);
if (!sgApi.isPresent()) {
return null;
}
- SecurityGroupInZone rawGroup = new SecurityGroupInZone(sgApi.get().get(groupId), zone);
+ SecurityGroupInRegion rawGroup = new SecurityGroupInRegion(sgApi.get().get(groupId), region);
return groupConverter.apply(rawGroup);
}
@Override
public SecurityGroup createSecurityGroup(String name, Location location) {
- String zone = location.getId();
- if (zone == null) {
+ String region = location.getId();
+ if (region == null) {
return null;
}
- return createSecurityGroup(name, zone);
+ return createSecurityGroup(name, region);
}
- public SecurityGroup createSecurityGroup(String name, String zone) {
+ public SecurityGroup createSecurityGroup(String name, String region) {
String markerGroup = namingConvention.create().sharedNameForGroup(name);
- ZoneSecurityGroupNameAndPorts zoneAndName = new ZoneSecurityGroupNameAndPorts(zone, markerGroup, ImmutableSet. of());
+ RegionSecurityGroupNameAndPorts regionAndName = new RegionSecurityGroupNameAndPorts(region, markerGroup, ImmutableSet. of());
- SecurityGroupInZone rawGroup = groupCreator.getUnchecked(zoneAndName);
+ SecurityGroupInRegion rawGroup = groupCreator.getUnchecked(regionAndName);
return groupConverter.apply(rawGroup);
}
@Override
public boolean removeSecurityGroup(String id) {
checkNotNull(id, "id");
- ZoneAndId zoneAndId = ZoneAndId.fromSlashEncoded(id);
- String zone = zoneAndId.getZone();
- String groupId = zoneAndId.getId();
+ RegionAndId regionAndId = RegionAndId.fromSlashEncoded(id);
+ String region = regionAndId.getRegion();
+ String groupId = regionAndId.getId();
- Optional extends SecurityGroupApi> sgApi = api.getSecurityGroupExtensionForZone(zone);
+ Optional extends SecurityGroupApi> sgApi = api.getSecurityGroupApi(region);
if (!sgApi.isPresent()) {
return false;
@@ -194,16 +194,16 @@ public class NovaSecurityGroupExtension implements SecurityGroupExtension {
sgApi.get().delete(groupId);
// TODO: test this clear happens
- groupCreator.invalidate(new ZoneSecurityGroupNameAndPorts(zone, groupId, ImmutableSet. of()));
+ groupCreator.invalidate(new RegionSecurityGroupNameAndPorts(region, groupId, ImmutableSet. of()));
return true;
}
@Override
public SecurityGroup addIpPermission(IpPermission ipPermission, SecurityGroup group) {
- String zone = group.getLocation().getId();
- ZoneAndId groupZoneAndId = ZoneAndId.fromSlashEncoded(group.getId());
- String id = groupZoneAndId.getId();
- Optional extends SecurityGroupApi> sgApi = api.getSecurityGroupExtensionForZone(zone);
+ String region = group.getLocation().getId();
+ RegionAndId groupRegionAndId = RegionAndId.fromSlashEncoded(group.getId());
+ String id = groupRegionAndId.getId();
+ Optional extends SecurityGroupApi> sgApi = api.getSecurityGroupApi(region);
if (!sgApi.isPresent()) {
return null;
@@ -222,9 +222,9 @@ public class NovaSecurityGroupExtension implements SecurityGroupExtension {
}
if (ipPermission.getGroupIds().size() > 0) {
- for (String zoneAndGroupRaw : ipPermission.getGroupIds()) {
- ZoneAndId zoneAndId = ZoneAndId.fromSlashEncoded(zoneAndGroupRaw);
- String groupId = zoneAndId.getId();
+ for (String regionAndGroupRaw : ipPermission.getGroupIds()) {
+ RegionAndId regionAndId = RegionAndId.fromSlashEncoded(regionAndGroupRaw);
+ String groupId = regionAndId.getId();
sgApi.get().createRuleAllowingSecurityGroupId(id,
Ingress.builder()
.ipProtocol(ipPermission.getIpProtocol())
@@ -235,7 +235,7 @@ public class NovaSecurityGroupExtension implements SecurityGroupExtension {
}
}
- return getSecurityGroupById(ZoneAndId.fromZoneAndId(zone, id).slashEncode());
+ return getSecurityGroupById(RegionAndId.fromRegionAndId(region, id).slashEncode());
}
@Override
@@ -256,11 +256,11 @@ public class NovaSecurityGroupExtension implements SecurityGroupExtension {
@Override
public SecurityGroup removeIpPermission(IpPermission ipPermission, SecurityGroup group) {
- String zone = group.getLocation().getId();
- ZoneAndId groupZoneAndId = ZoneAndId.fromSlashEncoded(group.getId());
- String id = groupZoneAndId.getId();
+ String region = group.getLocation().getId();
+ RegionAndId groupRegionAndId = RegionAndId.fromSlashEncoded(group.getId());
+ String id = groupRegionAndId.getId();
- Optional extends SecurityGroupApi> sgApi = api.getSecurityGroupExtensionForZone(zone);
+ Optional extends SecurityGroupApi> sgApi = api.getSecurityGroupApi(region);
if (!sgApi.isPresent()) {
return null;
@@ -291,7 +291,7 @@ public class NovaSecurityGroupExtension implements SecurityGroupExtension {
}
}
- return getSecurityGroupById(ZoneAndId.fromZoneAndId(zone, id).slashEncode());
+ return getSecurityGroupById(RegionAndId.fromRegionAndId(region, id).slashEncode());
}
@Override
@@ -330,41 +330,41 @@ public class NovaSecurityGroupExtension implements SecurityGroupExtension {
return false;
}
- protected Iterable extends SecurityGroupInZone> pollSecurityGroups() {
- Iterable extends Set extends SecurityGroupInZone>> groups
- = transform(zoneIds.get(), allSecurityGroupsInZone());
+ protected Iterable extends SecurityGroupInRegion> pollSecurityGroups() {
+ Iterable extends Set extends SecurityGroupInRegion>> groups
+ = transform(regionIds.get(), allSecurityGroupsInRegion());
return concat(groups);
}
- protected Iterable extends SecurityGroupInZone> pollSecurityGroupsByZone(String zone) {
- return allSecurityGroupsInZone().apply(zone);
+ protected Iterable extends SecurityGroupInRegion> pollSecurityGroupsByRegion(String region) {
+ return allSecurityGroupsInRegion().apply(region);
}
- protected Function> allSecurityGroupsInZone() {
- return new Function>() {
+ protected Function> allSecurityGroupsInRegion() {
+ return new Function>() {
@Override
- public Set extends SecurityGroupInZone> apply(final String from) {
- Optional extends SecurityGroupApi> sgApi = api.getSecurityGroupExtensionForZone(from);
+ public Set extends SecurityGroupInRegion> apply(final String from) {
+ Optional extends SecurityGroupApi> sgApi = api.getSecurityGroupApi(from);
if (!sgApi.isPresent()) {
return ImmutableSet.of();
}
- return sgApi.get().list().transform(groupToGroupInZone(from)).toSet();
+ return sgApi.get().list().transform(groupToGroupInRegion(from)).toSet();
}
};
}
- protected Function groupToGroupInZone(final String zone) {
- return new Function() {
+ protected Function groupToGroupInRegion(final String region) {
+ return new Function() {
@Override
- public SecurityGroupInZone apply(org.jclouds.openstack.nova.v2_0.domain.SecurityGroup group) {
- return new SecurityGroupInZone(group, zone);
+ public SecurityGroupInRegion apply(org.jclouds.openstack.nova.v2_0.domain.SecurityGroup group) {
+ return new SecurityGroupInRegion(group, region);
}
};
}
diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/AllocateAndAddFloatingIpToNode.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/AllocateAndAddFloatingIpToNode.java
index b734e0729d..1de8fd8365 100644
--- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/AllocateAndAddFloatingIpToNode.java
+++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/AllocateAndAddFloatingIpToNode.java
@@ -35,7 +35,7 @@ import org.jclouds.logging.Logger;
import org.jclouds.openstack.nova.v2_0.NovaApi;
import org.jclouds.openstack.nova.v2_0.compute.options.NodeAndNovaTemplateOptions;
import org.jclouds.openstack.nova.v2_0.domain.FloatingIP;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.ZoneAndId;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.RegionAndId;
import org.jclouds.openstack.nova.v2_0.extensions.FloatingIPApi;
import org.jclouds.rest.InsufficientResourcesException;
@@ -60,11 +60,11 @@ public class AllocateAndAddFloatingIpToNode implements
private final Predicate> nodeRunning;
private final NovaApi novaApi;
- private final LoadingCache> floatingIpCache;
+ private final LoadingCache> floatingIpCache;
@Inject
public AllocateAndAddFloatingIpToNode(@Named(TIMEOUT_NODE_RUNNING) Predicate> nodeRunning,
- NovaApi novaApi, @Named("FLOATINGIP") LoadingCache> floatingIpCache) {
+ NovaApi novaApi, @Named("FLOATINGIP") LoadingCache> floatingIpCache) {
this.nodeRunning = checkNotNull(nodeRunning, "nodeRunning");
this.novaApi = checkNotNull(novaApi, "novaApi");
this.floatingIpCache = checkNotNull(floatingIpCache, "floatingIpCache");
@@ -75,8 +75,8 @@ public class AllocateAndAddFloatingIpToNode implements
checkState(nodeRunning.apply(input.get().getNodeMetadata()), "node never achieved state running %s", input.get().getNodeMetadata());
NodeMetadata node = input.get().getNodeMetadata().get();
// node's location is a host
- String zoneId = node.getLocation().getParent().getId();
- FloatingIPApi floatingIpApi = novaApi.getFloatingIPExtensionForZone(zoneId).get();
+ String regionId = node.getLocation().getParent().getId();
+ FloatingIPApi floatingIpApi = novaApi.getFloatingIPApi(regionId).get();
Optional> poolNames = input.get().getNovaTemplateOptions().get().getFloatingIpPoolNames();
Optional ip = allocateFloatingIPForNode(floatingIpApi, poolNames, node.getId());
@@ -87,7 +87,7 @@ public class AllocateAndAddFloatingIpToNode implements
floatingIpApi.addToServer(ip.get().getIp(), node.getProviderId());
input.get().getNodeMetadata().set(NodeMetadataBuilder.fromNodeMetadata(node).publicAddresses(ImmutableSet.of(ip.get().getIp())).build());
- floatingIpCache.invalidate(ZoneAndId.fromSlashEncoded(node.getId()));
+ floatingIpCache.invalidate(RegionAndId.fromSlashEncoded(node.getId()));
return input.get().getNodeMetadata();
}
diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/CreateSecurityGroupIfNeeded.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/CreateSecurityGroupIfNeeded.java
index 5a87105137..4c2c8cc476 100644
--- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/CreateSecurityGroupIfNeeded.java
+++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/CreateSecurityGroupIfNeeded.java
@@ -32,15 +32,15 @@ import org.jclouds.net.domain.IpProtocol;
import org.jclouds.openstack.nova.v2_0.NovaApi;
import org.jclouds.openstack.nova.v2_0.domain.Ingress;
import org.jclouds.openstack.nova.v2_0.domain.SecurityGroup;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.SecurityGroupInZone;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.ZoneSecurityGroupNameAndPorts;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.SecurityGroupInRegion;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.RegionSecurityGroupNameAndPorts;
import org.jclouds.openstack.nova.v2_0.extensions.SecurityGroupApi;
import com.google.common.base.Function;
import com.google.common.base.Optional;
@Singleton
-public class CreateSecurityGroupIfNeeded implements Function {
+public class CreateSecurityGroupIfNeeded implements Function {
@Resource
@Named(ComputeServiceConstants.COMPUTE_LOGGER)
protected Logger logger = Logger.NULL;
@@ -52,29 +52,29 @@ public class CreateSecurityGroupIfNeeded implements Function api = novaApi.getSecurityGroupExtensionForZone(zoneId);
- checkArgument(api.isPresent(), "Security groups are required, but the extension is not availablein zone %s!", zoneId);
- logger.debug(">> creating securityGroup %s", zoneSecurityGroupNameAndPorts);
+ String regionId = regionSecurityGroupNameAndPorts.getRegion();
+ Optional extends SecurityGroupApi> api = novaApi.getSecurityGroupApi(regionId);
+ checkArgument(api.isPresent(), "Security groups are required, but the extension is not available in region %s!", regionId);
+ logger.debug(">> creating securityGroup %s", regionSecurityGroupNameAndPorts);
try {
SecurityGroup securityGroup = api.get().createWithDescription(
- zoneSecurityGroupNameAndPorts.getName(), zoneSecurityGroupNameAndPorts.getName());
+ regionSecurityGroupNameAndPorts.getName(), regionSecurityGroupNameAndPorts.getName());
logger.debug("<< created securityGroup(%s)", securityGroup);
- for (int port : zoneSecurityGroupNameAndPorts.getPorts()) {
+ for (int port : regionSecurityGroupNameAndPorts.getPorts()) {
authorizeGroupToItselfAndAllIPsToTCPPort(api.get(), securityGroup, port);
}
- return new SecurityGroupInZone(api.get().get(securityGroup.getId()), zoneId);
+ return new SecurityGroupInRegion(api.get().get(securityGroup.getId()), regionId);
} catch (IllegalStateException e) {
- logger.trace("<< trying to find securityGroup(%s): %s", zoneSecurityGroupNameAndPorts, e.getMessage());
- SecurityGroup group = find(api.get().list(), nameEquals(zoneSecurityGroupNameAndPorts
+ logger.trace("<< trying to find securityGroup(%s): %s", regionSecurityGroupNameAndPorts, e.getMessage());
+ SecurityGroup group = find(api.get().list(), nameEquals(regionSecurityGroupNameAndPorts
.getName()));
logger.debug("<< reused securityGroup(%s)", group.getId());
- return new SecurityGroupInZone(group, zoneId);
+ return new SecurityGroupInRegion(group, regionId);
}
}
diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/FlavorInZoneToHardware.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/FlavorInRegionToHardware.java
similarity index 72%
rename from apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/FlavorInZoneToHardware.java
rename to apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/FlavorInRegionToHardware.java
index 4e8a776023..7387bed4e7 100644
--- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/FlavorInZoneToHardware.java
+++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/FlavorInRegionToHardware.java
@@ -29,29 +29,29 @@ import org.jclouds.compute.domain.Processor;
import org.jclouds.compute.domain.internal.VolumeImpl;
import org.jclouds.domain.Location;
import org.jclouds.openstack.nova.v2_0.domain.Flavor;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.FlavorInZone;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.FlavorInRegion;
import com.google.common.base.Function;
import com.google.common.base.Supplier;
/**
- * A function for transforming the nova specific FlavorInZone object to the generic Hardware object.
+ * A function for transforming the nova specific FlavorInRegion object to the generic Hardware object.
*/
-public class FlavorInZoneToHardware implements Function {
+public class FlavorInRegionToHardware implements Function {
private final Supplier> locationIndex;
@Inject
- public FlavorInZoneToHardware(Supplier> locationIndex) {
+ public FlavorInRegionToHardware(Supplier> locationIndex) {
this.locationIndex = checkNotNull(locationIndex, "locationIndex");
}
@Override
- public Hardware apply(FlavorInZone flavorInZone) {
- Location location = locationIndex.get().get(flavorInZone.getZone());
- checkState(location != null, "location %s not in locationIndex: %s", flavorInZone.getZone(), locationIndex.get());
- Flavor flavor = flavorInZone.getFlavor();
- return new HardwareBuilder().id(flavorInZone.slashEncode()).providerId(flavor.getId()).name(flavor.getName())
+ public Hardware apply(FlavorInRegion flavorInRegion) {
+ Location location = locationIndex.get().get(flavorInRegion.getRegion());
+ checkState(location != null, "location %s not in locationIndex: %s", flavorInRegion.getRegion(), locationIndex.get());
+ Flavor flavor = flavorInRegion.getFlavor();
+ return new HardwareBuilder().id(flavorInRegion.slashEncode()).providerId(flavor.getId()).name(flavor.getName())
.ram(flavor.getRam()).processor(new Processor(flavor.getVcpus(), 1.0)).volume(
new VolumeImpl(Float.valueOf(flavor.getDisk()), true, true)).location(location).build();
}
diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/ImageInZoneToImage.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/ImageInRegionToImage.java
similarity index 81%
rename from apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/ImageInZoneToImage.java
rename to apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/ImageInRegionToImage.java
index c2f6f6ca15..35a6787d29 100644
--- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/ImageInZoneToImage.java
+++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/ImageInRegionToImage.java
@@ -28,7 +28,7 @@ import org.jclouds.compute.domain.ImageBuilder;
import org.jclouds.compute.domain.OperatingSystem;
import org.jclouds.domain.Location;
import org.jclouds.openstack.nova.v2_0.domain.Image.Status;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.ImageInZone;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.ImageInRegion;
import com.google.common.base.Function;
import com.google.common.base.MoreObjects;
@@ -37,13 +37,13 @@ import com.google.common.base.Supplier;
/**
* A function for transforming a nova-specific Image into a generic Image object.
*/
-public class ImageInZoneToImage implements Function {
+public class ImageInRegionToImage implements Function {
private final Map toPortableImageStatus;
private final Function imageToOs;
private final Supplier> locationIndex;
@Inject
- public ImageInZoneToImage(Map toPortableImageStatus,
+ public ImageInRegionToImage(Map toPortableImageStatus,
Function imageToOs,
Supplier> locationIndex) {
this.toPortableImageStatus = checkNotNull(toPortableImageStatus, "toPortableImageStatus");
@@ -52,15 +52,15 @@ public class ImageInZoneToImage implements Function {
}
@Override
- public Image apply(ImageInZone imageInZone) {
- Location location = locationIndex.get().get(imageInZone.getZone());
- checkState(location != null, "location %s not in locationIndex: %s", imageInZone.getZone(), locationIndex.get());
- org.jclouds.openstack.nova.v2_0.domain.Image image = imageInZone.getImage();
- return new ImageBuilder().id(imageInZone.slashEncode()).providerId(image.getId()).name(image.getName())
+ public Image apply(ImageInRegion imageInRegion) {
+ Location location = locationIndex.get().get(imageInRegion.getRegion());
+ checkState(location != null, "location %s not in locationIndex: %s", imageInRegion.getRegion(), locationIndex.get());
+ org.jclouds.openstack.nova.v2_0.domain.Image image = imageInRegion.getImage();
+ return new ImageBuilder().id(imageInRegion.slashEncode()).providerId(image.getId()).name(image.getName())
.userMetadata(image.getMetadata()).operatingSystem(imageToOs.apply(image)).description(image.getName())
.location(location).status(toPortableImageStatus.get(image.getStatus())).build();
}
-
+
@Override
public String toString() {
return MoreObjects.toStringHelper(this).toString();
diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/NovaSecurityGroupInZoneToSecurityGroup.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/NovaSecurityGroupInRegionToSecurityGroup.java
similarity index 76%
rename from apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/NovaSecurityGroupInZoneToSecurityGroup.java
rename to apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/NovaSecurityGroupInRegionToSecurityGroup.java
index 1991e775c5..08b4e2d8ea 100644
--- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/NovaSecurityGroupInZoneToSecurityGroup.java
+++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/NovaSecurityGroupInRegionToSecurityGroup.java
@@ -30,7 +30,7 @@ import org.jclouds.compute.domain.SecurityGroupBuilder;
import org.jclouds.compute.reference.ComputeServiceConstants;
import org.jclouds.domain.Location;
import org.jclouds.logging.Logger;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.SecurityGroupInZone;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.SecurityGroupInRegion;
import com.google.common.base.Function;
import com.google.common.base.Supplier;
@@ -42,7 +42,7 @@ import com.google.inject.Inject;
* SecurityGroup object.
*/
@Singleton
-public class NovaSecurityGroupInZoneToSecurityGroup implements Function {
+public class NovaSecurityGroupInRegionToSecurityGroup implements Function {
@Resource
@Named(ComputeServiceConstants.COMPUTE_LOGGER)
protected Logger logger = Logger.NULL;
@@ -51,22 +51,22 @@ public class NovaSecurityGroupInZoneToSecurityGroup implements Function> locationIndex;
@Inject
- public NovaSecurityGroupInZoneToSecurityGroup(Function baseConverter,
+ public NovaSecurityGroupInRegionToSecurityGroup(Function baseConverter,
Supplier> locationIndex) {
this.baseConverter = checkNotNull(baseConverter, "baseConverter");
this.locationIndex = checkNotNull(locationIndex, "locationIndex");
}
@Override
- public SecurityGroup apply(SecurityGroupInZone group) {
+ public SecurityGroup apply(SecurityGroupInRegion group) {
SecurityGroupBuilder builder = SecurityGroupBuilder.fromSecurityGroup(baseConverter.apply(group.getSecurityGroup()));
- Location zone = locationIndex.get().get(group.getZone());
- checkState(zone != null, "location %s not in locationIndex: %s", group.getZone(), locationIndex.get());
+ Location region = locationIndex.get().get(group.getRegion());
+ checkState(region != null, "location %s not in locationIndex: %s", group.getRegion(), locationIndex.get());
- builder.location(zone);
+ builder.location(region);
- builder.id(group.getZone() + "/" + group.getSecurityGroup().getId());
+ builder.id(group.getRegion() + "/" + group.getSecurityGroup().getId());
return builder.build();
}
diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/OrphanedGroupsByZoneId.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/OrphanedGroupsByRegionId.java
similarity index 68%
rename from apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/OrphanedGroupsByZoneId.java
rename to apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/OrphanedGroupsByRegionId.java
index f49330fbf7..1a42952a6a 100644
--- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/OrphanedGroupsByZoneId.java
+++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/OrphanedGroupsByRegionId.java
@@ -30,7 +30,7 @@ import org.jclouds.compute.domain.NodeMetadata;
import org.jclouds.compute.predicates.NodePredicates;
import org.jclouds.domain.LocationScope;
import org.jclouds.openstack.nova.v2_0.compute.predicates.AllNodesInGroupTerminated;
-import org.jclouds.openstack.nova.v2_0.domain.zonescoped.ZoneAndName;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.RegionAndName;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Function;
@@ -39,35 +39,35 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Multimap;
import com.google.common.collect.Multimaps;
-public class OrphanedGroupsByZoneId implements Function, Multimap> {
- private final Predicate allNodesInGroupTerminated;
+public class OrphanedGroupsByRegionId implements Function, Multimap> {
+ private final Predicate allNodesInGroupTerminated;
@Inject
- protected OrphanedGroupsByZoneId(ComputeService computeService) {
+ protected OrphanedGroupsByRegionId(ComputeService computeService) {
this(new AllNodesInGroupTerminated(checkNotNull(computeService, "computeService")));
}
@VisibleForTesting
- OrphanedGroupsByZoneId(Predicate allNodesInGroupTerminated) {
+ OrphanedGroupsByRegionId(Predicate allNodesInGroupTerminated) {
this.allNodesInGroupTerminated = checkNotNull(allNodesInGroupTerminated, "allNodesInGroupTerminated");
}
public Multimap apply(Set extends NodeMetadata> deadNodes) {
Iterable extends NodeMetadata> nodesWithGroup = filter(deadNodes, NodePredicates.hasGroup());
- Set zoneAndGroupNames = ImmutableSet.copyOf(filter(transform(nodesWithGroup,
- new Function() {
+ Set