You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by jd...@apache.org on 2014/08/13 18:59:44 UTC

[05/12] Prefer Regions to Zones in OpenStack APIs

http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ExtensionApiLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ExtensionApiLiveTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ExtensionApiLiveTest.java
index 153603a..2db531f 100644
--- a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ExtensionApiLiveTest.java
+++ b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ExtensionApiLiveTest.java
@@ -35,13 +35,13 @@ public class ExtensionApiLiveTest extends BaseNovaApiLiveTest {
 
     /**
      * Tests the listing of Extensions.
-     * 
+     *
      * @throws Exception
      */
     @Test(description = "GET /v${apiVersion}/{tenantId}/extensions")
     public void testListExtensions() throws Exception {
-       for (String zoneId : zones) {
-          ExtensionApi extensionApi = api.getExtensionApiForZone(zoneId);
+       for (String regionId : regions) {
+          ExtensionApi extensionApi = api.getExtensionApi(regionId);
           Set<? extends Extension> response = extensionApi.list();
           assertNotNull(response);
           assertFalse(response.isEmpty());
@@ -58,13 +58,13 @@ public class ExtensionApiLiveTest extends BaseNovaApiLiveTest {
 
     /**
      * Tests retrieval of Extensions using their alias.
-     * 
+     *
      * @throws Exception
      */
     @Test(description = "GET /v${apiVersion}/{tenantId}/extensions/{alias}", dependsOnMethods = { "testListExtensions" })
     public void testGetExtensionByAlias() throws Exception {
-       for (String zoneId : zones) {
-           ExtensionApi extensionApi = api.getExtensionApiForZone(zoneId);
+       for (String regionId : regions) {
+           ExtensionApi extensionApi = api.getExtensionApi(regionId);
            Set<? extends Extension> response = extensionApi.list();
            for (Extension extension : response) {
               Extension details = extensionApi.get(extension.getId());

http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/FlavorApiExpectTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/FlavorApiExpectTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/FlavorApiExpectTest.java
index c52e9b5..d6cb506 100644
--- a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/FlavorApiExpectTest.java
+++ b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/FlavorApiExpectTest.java
@@ -56,9 +56,9 @@ public class FlavorApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenFlavorsExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
             responseWithKeystoneAccess, listFlavors, listFlavorsResponse);
 
-      assertEquals(apiWhenFlavorsExist.getConfiguredZones(), ImmutableSet.of("az-1.region-a.geo-1", "az-2.region-a.geo-1", "az-3.region-a.geo-1"));
+      assertEquals(apiWhenFlavorsExist.getConfiguredRegions(), ImmutableSet.of("az-1.region-a.geo-1", "az-2.region-a.geo-1", "az-3.region-a.geo-1"));
 
-      assertEquals(apiWhenFlavorsExist.getFlavorApiForZone("az-1.region-a.geo-1").list().concat().toString(),
+      assertEquals(apiWhenFlavorsExist.getFlavorApi("az-1.region-a.geo-1").list().concat().toString(),
             new ParseFlavorListTest().expected().toString());
    }
 
@@ -75,7 +75,7 @@ public class FlavorApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenNoServersExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
             responseWithKeystoneAccess, listFlavors, listFlavorsResponse);
 
-      assertTrue(apiWhenNoServersExist.getFlavorApiForZone("az-1.region-a.geo-1").list().concat().isEmpty());
+      assertTrue(apiWhenNoServersExist.getFlavorApi("az-1.region-a.geo-1").list().concat().isEmpty());
    }
 
    // TODO: gson deserializer for Multimap
@@ -94,7 +94,7 @@ public class FlavorApiExpectTest extends BaseNovaApiExpectTest {
             responseWithKeystoneAccess, getFlavor, getFlavorResponse);
 
       assertEquals(
-            apiWhenFlavorsExist.getFlavorApiForZone("az-1.region-a.geo-1").get("52415800-8b69-11e0-9b19-734f1195ff37")
+            apiWhenFlavorsExist.getFlavorApi("az-1.region-a.geo-1").get("52415800-8b69-11e0-9b19-734f1195ff37")
                   .toString(), new ParseFlavorTest().expected().toString());
    }
 
@@ -111,7 +111,7 @@ public class FlavorApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenNoFlavorsExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
             responseWithKeystoneAccess, getFlavor, getFlavorResponse);
 
-      assertNull(apiWhenNoFlavorsExist.getFlavorApiForZone("az-1.region-a.geo-1").get("123"));
+      assertNull(apiWhenNoFlavorsExist.getFlavorApi("az-1.region-a.geo-1").get("123"));
    }
 
    public void testCreateFlavor200() throws Exception {
@@ -130,7 +130,7 @@ public class FlavorApiExpectTest extends BaseNovaApiExpectTest {
             responseWithKeystoneAccess, listFlavors, listFlavorsResponse);
 
       assertEquals(
-            api.getFlavorApiForZone("az-1.region-a.geo-1").create(Flavor.builder()
+            api.getFlavorApi("az-1.region-a.geo-1").create(Flavor.builder()
                   .id("1cb47a44-9b84-4da4-bf81-c1976e8414ab")
                   .name("128 MB Server").ram(128).vcpus(1)
                   .disk(10).build())
@@ -151,6 +151,6 @@ public class FlavorApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi api = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
                responseWithKeystoneAccess, updateMetadata, updateMetadataResponse);
 
-      api.getFlavorApiForZone("az-1.region-a.geo-1").delete(flavorId);
+      api.getFlavorApi("az-1.region-a.geo-1").delete(flavorId);
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/FlavorApiLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/FlavorApiLiveTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/FlavorApiLiveTest.java
index bd10bea..a76fd80 100644
--- a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/FlavorApiLiveTest.java
+++ b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/FlavorApiLiveTest.java
@@ -36,13 +36,13 @@ public class FlavorApiLiveTest extends BaseNovaApiLiveTest {
 
    /**
     * Tests the listing of Flavors.
-    * 
+    *
     * @throws Exception
     */
    @Test(description = "GET /v${apiVersion}/{tenantId}/flavors")
    public void testListFlavors() throws Exception {
-      for (String zoneId : zones) {
-         FlavorApi flavorApi = api.getFlavorApiForZone(zoneId);
+      for (String regionId : regions) {
+         FlavorApi flavorApi = api.getFlavorApi(regionId);
          Set<? extends Resource> response = flavorApi.list().concat().toSet();
          assertNotNull(response);
          assertFalse(response.isEmpty());
@@ -56,13 +56,13 @@ public class FlavorApiLiveTest extends BaseNovaApiLiveTest {
 
    /**
     * Tests the listing of Flavors in detail.
-    * 
+    *
     * @throws Exception
     */
    @Test(description = "GET /v${apiVersion}/{tenantId}/flavors/detail")
    public void testListFlavorsInDetail() throws Exception {
-      for (String zoneId : zones) {
-         FlavorApi flavorApi = api.getFlavorApiForZone(zoneId);
+      for (String regionId : regions) {
+         FlavorApi flavorApi = api.getFlavorApi(regionId);
          Set<? extends Flavor> response = flavorApi.listInDetail().concat().toSet();
          assertNotNull(response);
          assertFalse(response.isEmpty());
@@ -79,13 +79,13 @@ public class FlavorApiLiveTest extends BaseNovaApiLiveTest {
 
    /**
     * Tests getting Flavors by id.
-    * 
+    *
     * @throws Exception
     */
    @Test(description = "GET /v${apiVersion}/{tenantId}/flavors/{id}", dependsOnMethods = { "testListFlavorsInDetail" })
    public void testGetFlavorById() throws Exception {
-      for (String zoneId : zones) {
-         FlavorApi flavorApi = api.getFlavorApiForZone(zoneId);
+      for (String regionId : regions) {
+         FlavorApi flavorApi = api.getFlavorApi(regionId);
          Set<? extends Flavor> response = flavorApi.listInDetail().concat().toSet();
          for (Flavor flavor : response) {
             Flavor details = flavorApi.get(flavor.getId());

http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ImageApiExpectTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ImageApiExpectTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ImageApiExpectTest.java
index d3a5231..d70b111 100644
--- a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ImageApiExpectTest.java
+++ b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ImageApiExpectTest.java
@@ -54,9 +54,9 @@ public class ImageApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenImagesExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
             responseWithKeystoneAccess, list, listResponse);
 
-      assertEquals(apiWhenImagesExist.getConfiguredZones(), ImmutableSet.of("az-1.region-a.geo-1", "az-2.region-a.geo-1", "az-3.region-a.geo-1"));
+      assertEquals(apiWhenImagesExist.getConfiguredRegions(), ImmutableSet.of("az-1.region-a.geo-1", "az-2.region-a.geo-1", "az-3.region-a.geo-1"));
 
-      assertEquals(apiWhenImagesExist.getImageApiForZone("az-1.region-a.geo-1").list().concat().toString(),
+      assertEquals(apiWhenImagesExist.getImageApi("az-1.region-a.geo-1").list().concat().toString(),
             new ParseImageListTest().expected().toString());
    }
 
@@ -73,7 +73,7 @@ public class ImageApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenNoServersExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
             responseWithKeystoneAccess, list, listResponse);
 
-      assertTrue(apiWhenNoServersExist.getImageApiForZone("az-1.region-a.geo-1").list().concat().isEmpty());
+      assertTrue(apiWhenNoServersExist.getImageApi("az-1.region-a.geo-1").list().concat().isEmpty());
    }
 
    public void testGetImageWhenResponseIs2xx() throws Exception {
@@ -92,7 +92,7 @@ public class ImageApiExpectTest extends BaseNovaApiExpectTest {
             responseWithKeystoneAccess, getImage, getImageResponse);
 
       assertEquals(
-            apiWhenImagesExist.getImageApiForZone("az-1.region-a.geo-1").get("52415800-8b69-11e0-9b19-734f5736d2a2")
+            apiWhenImagesExist.getImageApi("az-1.region-a.geo-1").get("52415800-8b69-11e0-9b19-734f5736d2a2")
                   .toString(), new ParseImageTest().expected().toString());
    }
 
@@ -109,7 +109,7 @@ public class ImageApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenNoImagesExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
             responseWithKeystoneAccess, getImage, getImageResponse);
 
-      assertNull(apiWhenNoImagesExist.getImageApiForZone("az-1.region-a.geo-1").get("52415800-8b69-11e0-9b19-734f5736d2a2"));
+      assertNull(apiWhenNoImagesExist.getImageApi("az-1.region-a.geo-1").get("52415800-8b69-11e0-9b19-734f5736d2a2"));
    }
 
    public void testListMetadataWhenResponseIs2xx() throws Exception {
@@ -127,7 +127,7 @@ public class ImageApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
                responseWithKeystoneAccess, getMetadata, getMetadataResponse);
 
-      assertEquals(apiWhenServerExists.getImageApiForZone("az-1.region-a.geo-1").getMetadata(imageId).toString(),
+      assertEquals(apiWhenServerExists.getImageApi("az-1.region-a.geo-1").getMetadata(imageId).toString(),
              new ParseMetadataListTest().expected().toString());
    }
 
@@ -146,7 +146,7 @@ public class ImageApiExpectTest extends BaseNovaApiExpectTest {
                responseWithKeystoneAccess, getMetadata, getMetadataResponse);
 
       try {
-         apiWhenServerExists.getImageApiForZone("az-1.region-a.geo-1").getMetadata(imageId);
+         apiWhenServerExists.getImageApi("az-1.region-a.geo-1").getMetadata(imageId);
          fail("Expected an exception.");
          } catch (Exception e) {
             // expected
@@ -175,7 +175,7 @@ public class ImageApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenImageExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
                responseWithKeystoneAccess, setMetadata, setMetadataResponse);
 
-      assertEquals(apiWhenImageExists.getImageApiForZone("az-1.region-a.geo-1").setMetadata(imageId, metadata).toString(),
+      assertEquals(apiWhenImageExists.getImageApi("az-1.region-a.geo-1").setMetadata(imageId, metadata).toString(),
              new ParseMetadataListTest().expected().toString());
    }
 
@@ -201,7 +201,7 @@ public class ImageApiExpectTest extends BaseNovaApiExpectTest {
                responseWithKeystoneAccess, setMetadata, setMetadataResponse);
 
       try {
-    	 apiWhenServerExists.getImageApiForZone("az-1.region-a.geo-1").setMetadata(imageId, metadata);
+    	 apiWhenServerExists.getImageApi("az-1.region-a.geo-1").setMetadata(imageId, metadata);
          fail("Expected an exception.");
       } catch (Exception e) {
          // expected
@@ -230,7 +230,7 @@ public class ImageApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
                responseWithKeystoneAccess, setMetadata, setMetadataResponse);
 
-      assertEquals(apiWhenServerExists.getImageApiForZone("az-1.region-a.geo-1").updateMetadata(imageId, metadata).toString(),
+      assertEquals(apiWhenServerExists.getImageApi("az-1.region-a.geo-1").updateMetadata(imageId, metadata).toString(),
              new ParseMetadataUpdateTest().expected().toString());
    }
 
@@ -256,7 +256,7 @@ public class ImageApiExpectTest extends BaseNovaApiExpectTest {
                responseWithKeystoneAccess, setMetadata, setMetadataResponse);
 
       try {
-         apiWhenServerExists.getImageApiForZone("az-1.region-a.geo-1").setMetadata(imageId, metadata);
+         apiWhenServerExists.getImageApi("az-1.region-a.geo-1").setMetadata(imageId, metadata);
          fail("Expected an exception.");
       } catch (Exception e) {
          // expected
@@ -280,7 +280,7 @@ public class ImageApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
                responseWithKeystoneAccess, getMetadata, getMetadataResponse);
 
-      assertEquals(apiWhenServerExists.getImageApiForZone("az-1.region-a.geo-1").getMetadata(imageId, "Image Version").toString(),
+      assertEquals(apiWhenServerExists.getImageApi("az-1.region-a.geo-1").getMetadata(imageId, "Image Version").toString(),
              "2.5");
    }
 
@@ -301,7 +301,7 @@ public class ImageApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenImageExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
                responseWithKeystoneAccess, getMetadata, getMetadataResponse);
 
-      assertNull(apiWhenImageExists.getImageApiForZone("az-1.region-a.geo-1").getMetadata(imageId, key));
+      assertNull(apiWhenImageExists.getImageApi("az-1.region-a.geo-1").getMetadata(imageId, key));
    }
 
    public void testSetMetadataItemWhenResponseIs2xx() throws Exception {
@@ -322,7 +322,7 @@ public class ImageApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
                responseWithKeystoneAccess, updateMetadata, updateMetadataResponse);
 
-      assertEquals(apiWhenServerExists.getImageApiForZone("az-1.region-a.geo-1").updateMetadata(imageId, key, "2.5").toString(),
+      assertEquals(apiWhenServerExists.getImageApi("az-1.region-a.geo-1").updateMetadata(imageId, key, "2.5").toString(),
              "2.5");
    }
 
@@ -342,7 +342,7 @@ public class ImageApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenImageExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
                responseWithKeystoneAccess, deleteMetadata, deleteMetadataResponse);
 
-      apiWhenImageExists.getImageApiForZone("az-1.region-a.geo-1").deleteMetadata(imageId, key);
+      apiWhenImageExists.getImageApi("az-1.region-a.geo-1").deleteMetadata(imageId, key);
    }
 
    public void testDeleteMetadataItemWhenResponseIs404() throws Exception {
@@ -361,6 +361,6 @@ public class ImageApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenImageExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
                responseWithKeystoneAccess, deleteMetadata, deleteMetadataResponse);
 
-      apiWhenImageExists.getImageApiForZone("az-1.region-a.geo-1").deleteMetadata(imageId, key);
+      apiWhenImageExists.getImageApi("az-1.region-a.geo-1").deleteMetadata(imageId, key);
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ImageApiLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ImageApiLiveTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ImageApiLiveTest.java
index 0762017..288ba05 100644
--- a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ImageApiLiveTest.java
+++ b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ImageApiLiveTest.java
@@ -36,8 +36,8 @@ public class ImageApiLiveTest extends BaseNovaApiLiveTest {
 
    @Test(description = "GET /v${apiVersion}/{tenantId}/images")
    public void testListImages() throws Exception {
-      for (String zoneId : zones) {
-         ImageApi imageApi = api.getImageApiForZone(zoneId);
+      for (String regionId : regions) {
+         ImageApi imageApi = api.getImageApi(regionId);
          Set<? extends Resource> response = imageApi.list().concat().toSet();
          assertNotNull(response);
          assertFalse(response.isEmpty());
@@ -51,8 +51,8 @@ public class ImageApiLiveTest extends BaseNovaApiLiveTest {
 
    @Test(description = "GET /v${apiVersion}/{tenantId}/images/detail")
    public void testListImagesInDetail() throws Exception {
-      for (String zoneId : api.getConfiguredZones()) {
-         ImageApi imageApi = api.getImageApiForZone(zoneId);
+      for (String regionId : api.getConfiguredRegions()) {
+         ImageApi imageApi = api.getImageApi(regionId);
          Set<? extends Image> response = imageApi.listInDetail().concat().toSet();
          assertNotNull(response);
          assertFalse(response.isEmpty());
@@ -75,8 +75,8 @@ public class ImageApiLiveTest extends BaseNovaApiLiveTest {
 
    @Test(description = "GET /v${apiVersion}/{tenantId}/images/{id}", dependsOnMethods = { "testListImagesInDetail" })
    public void testGetImageById() throws Exception {
-      for (String zoneId : api.getConfiguredZones()) {
-         ImageApi imageApi = api.getImageApiForZone(zoneId);
+      for (String regionId : api.getConfiguredRegions()) {
+         ImageApi imageApi = api.getImageApi(regionId);
          Set<? extends Image> response = imageApi.listInDetail().concat().toSet();
          for (Image image : response) {
             Image details = imageApi.get(image.getId());

http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ServerApiExpectTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ServerApiExpectTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ServerApiExpectTest.java
index cfee8a6..e5fecfc 100644
--- a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ServerApiExpectTest.java
+++ b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ServerApiExpectTest.java
@@ -58,9 +58,9 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenServersExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
             responseWithKeystoneAccess, listServers, listServersResponse);
 
-      assertEquals(apiWhenServersExist.getConfiguredZones(), ImmutableSet.of("az-1.region-a.geo-1", "az-2.region-a.geo-1", "az-3.region-a.geo-1"));
+      assertEquals(apiWhenServersExist.getConfiguredRegions(), ImmutableSet.of("az-1.region-a.geo-1", "az-2.region-a.geo-1", "az-3.region-a.geo-1"));
 
-      assertEquals(apiWhenServersExist.getServerApiForZone("az-1.region-a.geo-1").list().concat().toString(),
+      assertEquals(apiWhenServersExist.getServerApi("az-1.region-a.geo-1").list().concat().toString(),
             new ParseServerListTest().expected().toString());
    }
 
@@ -76,7 +76,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenNoServersExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
             responseWithKeystoneAccess, listServers, listServersResponse);
 
-      assertTrue(apiWhenNoServersExist.getServerApiForZone("az-1.region-a.geo-1").list().concat().isEmpty());
+      assertTrue(apiWhenNoServersExist.getServerApi("az-1.region-a.geo-1").list().concat().isEmpty());
    }
 
    public void testListInDetailServersWhenResponseIs2xx() throws Exception {
@@ -93,9 +93,9 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenServersExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
               responseWithKeystoneAccess, listServers, listInDetailServersResponse);
 
-      assertEquals(apiWhenServersExist.getConfiguredZones(), ImmutableSet.of("az-1.region-a.geo-1", "az-2.region-a.geo-1", "az-3.region-a.geo-1"));
+      assertEquals(apiWhenServersExist.getConfiguredRegions(), ImmutableSet.of("az-1.region-a.geo-1", "az-2.region-a.geo-1", "az-3.region-a.geo-1"));
 
-      assertEquals(apiWhenServersExist.getServerApiForZone("az-1.region-a.geo-1").listInDetail().concat().toString(),
+      assertEquals(apiWhenServersExist.getServerApi("az-1.region-a.geo-1").listInDetail().concat().toString(),
               new ParseServerDetailsStatesTest().expected().toString());
    }
 
@@ -112,7 +112,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenNoServersExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
               responseWithKeystoneAccess, listServers, listInDetailServersResponse);
 
-      assertTrue(apiWhenNoServersExist.getServerApiForZone("az-1.region-a.geo-1").listInDetail().concat().isEmpty());
+      assertTrue(apiWhenNoServersExist.getServerApi("az-1.region-a.geo-1").listInDetail().concat().isEmpty());
    }
 
    public void testCreateServerWhenResponseIs202() throws Exception {
@@ -131,7 +131,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWithNewServer = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
             responseWithKeystoneAccess, createServer, createServerResponse);
 
-      assertEquals(apiWithNewServer.getServerApiForZone("az-1.region-a.geo-1").create("test-e92", "1241", "100").toString(),
+      assertEquals(apiWithNewServer.getServerApi("az-1.region-a.geo-1").create("test-e92", "1241", "100").toString(),
               new ParseCreatedServerTest().expected().toString());
    }
 
@@ -153,7 +153,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
 
       CreateServerOptions options = new CreateServerOptions().availabilityZone("nova");
 
-      assertEquals(apiWithNewServer.getServerApiForZone("az-1.region-a.geo-1").create("test-e92", "1241", "100", options).toString(),
+      assertEquals(apiWithNewServer.getServerApi("az-1.region-a.geo-1").create("test-e92", "1241", "100", options).toString(),
             new ParseCreatedServerTest().expected().toString());
    }
 
@@ -173,7 +173,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWithNewServer = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
             responseWithKeystoneAccess, createServer, createServerResponse);
 
-      assertEquals(apiWithNewServer.getServerApiForZone("az-1.region-a.geo-1").create("test-e92", "1241",
+      assertEquals(apiWithNewServer.getServerApi("az-1.region-a.geo-1").create("test-e92", "1241",
                "100", new CreateServerOptions().securityGroupNames("group1", "group2")).toString(),
               new ParseCreatedServerTest().expected().toString());
    }
@@ -194,7 +194,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWithNewServer = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
             responseWithKeystoneAccess, createServer, createServerResponse);
 
-      assertEquals(apiWithNewServer.getServerApiForZone("az-1.region-a.geo-1").create("test-e92", "1241",
+      assertEquals(apiWithNewServer.getServerApi("az-1.region-a.geo-1").create("test-e92", "1241",
                "100", new CreateServerOptions().networks("b3856ac0-f481-11e2-b778-0800200c9a66", "bf0f0f90-f481-11e2-b778-0800200c9a66")).toString(),
               new ParseCreatedServerTest().expected().toString());
    }
@@ -216,7 +216,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
             keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
             createServer, createServerResponse);
 
-      assertEquals(apiWithNewServer.getServerApiForZone("az-1.region-a.geo-1").create("test-e92", "1241",
+      assertEquals(apiWithNewServer.getServerApi("az-1.region-a.geo-1").create("test-e92", "1241",
                "100", new CreateServerOptions().diskConfig(Server.DISK_CONFIG_AUTO)).toString(),
               new ParseCreatedServerTest().expectedWithDiskConfig(Server.DISK_CONFIG_AUTO).toString());
    }
@@ -238,7 +238,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
             keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
             createServer, createServerResponse);
 
-      assertEquals(apiWithNewServer.getServerApiForZone("az-1.region-a.geo-1").create("test-e92", "1241",
+      assertEquals(apiWithNewServer.getServerApi("az-1.region-a.geo-1").create("test-e92", "1241",
                "100", new CreateServerOptions().diskConfig(Server.DISK_CONFIG_MANUAL)).toString(),
               new ParseCreatedServerTest().expectedWithDiskConfig(Server.DISK_CONFIG_MANUAL).toString());
    }
@@ -261,7 +261,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
 
       RebuildServerOptions options = new RebuildServerOptions().withImage("1234").name("newName").adminPass("password").ipv4Address("1.1.1.1").ipv6Address("fe80::100");
 
-      apiRebuildServer.getServerApiForZone("az-1.region-a.geo-1").rebuild(serverId, options);
+      apiRebuildServer.getServerApi("az-1.region-a.geo-1").rebuild(serverId, options);
    }
 
    public void testCreateImageWhenResponseIs2xx() throws Exception {
@@ -286,7 +286,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
                responseWithKeystoneAccess, createImage, createImageResponse);
 
-      assertEquals(apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").createImageFromServer(imageName, serverId),
+      assertEquals(apiWhenServerExists.getServerApi("az-1.region-a.geo-1").createImageFromServer(imageName, serverId),
             imageId);
    }
 
@@ -309,7 +309,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
                responseWithKeystoneAccess, createImage, createImageResponse);
 
       try {
-         apiWhenServerDoesNotExist.getServerApiForZone("az-1.region-a.geo-1").createImageFromServer(imageName, serverId);
+         apiWhenServerDoesNotExist.getServerApi("az-1.region-a.geo-1").createImageFromServer(imageName, serverId);
          fail("Expected an exception.");
       } catch (Exception e) {
          // expected
@@ -332,7 +332,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
                responseWithKeystoneAccess, stopServer, stopServerResponse);
 
-      apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").stop(serverId);
+      apiWhenServerExists.getServerApi("az-1.region-a.geo-1").stop(serverId);
    }
 
    public void testStopServerWhenResponseIs404() throws Exception {
@@ -352,7 +352,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
                responseWithKeystoneAccess, stopServer, stopServerResponse);
 
       try {
-         apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").stop(serverId);
+         apiWhenServerExists.getServerApi("az-1.region-a.geo-1").stop(serverId);
          fail("Expected an exception.");
       } catch (Exception e) {
          // expected
@@ -376,7 +376,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
                responseWithKeystoneAccess, startServer, startServerResponse);
 
-      apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").start(serverId);
+      apiWhenServerExists.getServerApi("az-1.region-a.geo-1").start(serverId);
    }
 
    public void testStartServerWhenResponseIs404() throws Exception {
@@ -396,7 +396,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
                responseWithKeystoneAccess, startServer, startServerResponse);
 
       try {
-         apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").start(serverId);
+         apiWhenServerExists.getServerApi("az-1.region-a.geo-1").start(serverId);
          fail("Expected an exception.");
       } catch (Exception e) {
          // expected
@@ -418,7 +418,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
                responseWithKeystoneAccess, getMetadata, getMetadataResponse);
 
-      assertEquals(apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").getMetadata(serverId).toString(),
+      assertEquals(apiWhenServerExists.getServerApi("az-1.region-a.geo-1").getMetadata(serverId).toString(),
              new ParseMetadataListTest().expected().toString());
    }
 
@@ -437,7 +437,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
                responseWithKeystoneAccess, getMetadata, getMetadataResponse);
 
       try {
-         apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").getMetadata(serverId);
+         apiWhenServerExists.getServerApi("az-1.region-a.geo-1").getMetadata(serverId);
          fail("Expected an exception.");
       } catch (Exception e) {
          // expected
@@ -466,7 +466,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
                responseWithKeystoneAccess, setMetadata, setMetadataResponse);
 
-      assertEquals(apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").setMetadata(serverId, metadata).toString(),
+      assertEquals(apiWhenServerExists.getServerApi("az-1.region-a.geo-1").setMetadata(serverId, metadata).toString(),
              new ParseMetadataListTest().expected().toString());
    }
 
@@ -492,7 +492,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
                responseWithKeystoneAccess, setMetadata, setMetadataResponse);
 
       try {
-         apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").setMetadata(serverId, metadata);
+         apiWhenServerExists.getServerApi("az-1.region-a.geo-1").setMetadata(serverId, metadata);
          fail("Expected an exception.");
       } catch (Exception e) {
          // expected
@@ -521,7 +521,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
                responseWithKeystoneAccess, setMetadata, setMetadataResponse);
 
-      assertEquals(apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").updateMetadata(serverId, metadata).toString(),
+      assertEquals(apiWhenServerExists.getServerApi("az-1.region-a.geo-1").updateMetadata(serverId, metadata).toString(),
              new ParseMetadataUpdateTest().expected().toString());
    }
 
@@ -548,7 +548,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
                responseWithKeystoneAccess, setMetadata, setMetadataResponse);
 
       try {
-         apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").setMetadata(serverId, metadata);
+         apiWhenServerExists.getServerApi("az-1.region-a.geo-1").setMetadata(serverId, metadata);
          fail("Expected an exception.");
       } catch (Exception e) {
          // expected
@@ -573,7 +573,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
                responseWithKeystoneAccess, getMetadata, getMetadataResponse);
 
-      assertEquals(apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").getMetadata(serverId, key).toString(),
+      assertEquals(apiWhenServerExists.getServerApi("az-1.region-a.geo-1").getMetadata(serverId, key).toString(),
              "Web Head 1");
    }
 
@@ -599,7 +599,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
                responseWithKeystoneAccess, setMetadata, setMetadataResponse);
 
       try {
-         apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").setMetadata(serverId, metadata);
+         apiWhenServerExists.getServerApi("az-1.region-a.geo-1").setMetadata(serverId, metadata);
          fail("Expected an exception.");
       } catch (Exception e) {
          // expected
@@ -628,7 +628,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
                responseWithKeystoneAccess, setMetadata, setMetadataResponse);
 
-      assertEquals(apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").updateMetadata(serverId, metadata).toString(),
+      assertEquals(apiWhenServerExists.getServerApi("az-1.region-a.geo-1").updateMetadata(serverId, metadata).toString(),
              new ParseMetadataUpdateTest().expected().toString());
    }
 
@@ -655,7 +655,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
                responseWithKeystoneAccess, setMetadata, setMetadataResponse);
 
       try {
-         apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").setMetadata(serverId, metadata);
+         apiWhenServerExists.getServerApi("az-1.region-a.geo-1").setMetadata(serverId, metadata);
          fail("Expected an exception.");
       } catch (Exception e) {
          // expected
@@ -678,7 +678,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
                responseWithKeystoneAccess, updateMetadata, updateMetadataResponse);
 
-      apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").deleteMetadata(serverId, key);
+      apiWhenServerExists.getServerApi("az-1.region-a.geo-1").deleteMetadata(serverId, key);
    }
 
    public void testDeleteMetadataItemWhenResponseIs404() throws Exception {
@@ -697,7 +697,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
       NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
                responseWithKeystoneAccess, deleteMetadata, deleteMetadataResponse);
 
-      apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").deleteMetadata(serverId, key);
+      apiWhenServerExists.getServerApi("az-1.region-a.geo-1").deleteMetadata(serverId, key);
    }
 
    public void testGetDiagnosticsWhenResponseIs200() throws Exception {
@@ -714,7 +714,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
 
       NovaApi apiWithNewServer = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
             responseWithKeystoneAccess, getDiagnostics, serverDiagnosticsResponse);
-      assertEquals(apiWithNewServer.getServerApiForZone("az-1.region-a.geo-1").getDiagnostics(serverId),
+      assertEquals(apiWithNewServer.getServerApi("az-1.region-a.geo-1").getDiagnostics(serverId),
              new ParseServerDiagnostics().expected());
    }
 
@@ -729,7 +729,7 @@ public class ServerApiExpectTest extends BaseNovaApiExpectTest {
 
       for (int statusCode : ImmutableSet.of(403, 404, 500)) {
         assertTrue(!requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess, getDiagnostics,
-            HttpResponse.builder().statusCode(statusCode).build()).getServerApiForZone("az-1.region-a.geo-1").getDiagnostics(serverId).isPresent());
+            HttpResponse.builder().statusCode(statusCode).build()).getServerApi("az-1.region-a.geo-1").getDiagnostics(serverId).isPresent());
       }
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ServerApiLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ServerApiLiveTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ServerApiLiveTest.java
index 691999b..beb2b32 100644
--- a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ServerApiLiveTest.java
+++ b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/features/ServerApiLiveTest.java
@@ -48,8 +48,8 @@ public class ServerApiLiveTest extends BaseNovaApiLiveTest {
 
    @Test(description = "GET /v${apiVersion}/{tenantId}/servers")
    public void testListServers() throws Exception {
-      for (String zoneId : zones) {
-         ServerApi serverApi = api.getServerApiForZone(zoneId);
+      for (String regionId : regions) {
+         ServerApi serverApi = api.getServerApi(regionId);
          for (Resource server : serverApi.list().concat()) {
             checkResource(server);
          }
@@ -58,8 +58,8 @@ public class ServerApiLiveTest extends BaseNovaApiLiveTest {
 
    @Test(description = "GET /v${apiVersion}/{tenantId}/servers/detail")
    public void testListServersInDetail() throws Exception {
-      for (String zoneId : zones) {
-         ServerApi serverApi = api.getServerApiForZone(zoneId);
+      for (String regionId : regions) {
+         ServerApi serverApi = api.getServerApi(regionId);
          for (Server server : serverApi.listInDetail().concat()) {
             checkServer(server);
          }
@@ -68,8 +68,8 @@ public class ServerApiLiveTest extends BaseNovaApiLiveTest {
 
    @Test(description = "GET /v${apiVersion}/{tenantId}/servers/{id}", dependsOnMethods = { "testListServersInDetail" })
    public void testGetServerById() throws Exception {
-      for (String zoneId : zones) {
-         ServerApi serverApi = api.getServerApiForZone(zoneId);
+      for (String regionId : regions) {
+         ServerApi serverApi = api.getServerApi(regionId);
          for (Resource server : serverApi.list().concat()) {
             Server details = serverApi.get(server.getId());
             assertEquals(details.getId(), server.getId());
@@ -85,12 +85,12 @@ public class ServerApiLiveTest extends BaseNovaApiLiveTest {
       String serverId = null;
       String availabilityZone;
 
-      for (String zoneId : zones) {
-         ServerApi serverApi = api.getServerApiForZone(zoneId);
-         Optional<? extends AvailabilityZoneApi> availabilityZoneApi = api.getAvailabilityZoneApi(zoneId);
+      for (String regionId : regions) {
+         ServerApi serverApi = api.getServerApi(regionId);
+         Optional<? extends AvailabilityZoneApi> availabilityZoneApi = api.getAvailabilityZoneApi(regionId);
          availabilityZone = availabilityZoneApi.isPresent() ? Iterables.getLast(availabilityZoneApi.get().list()).getName() : "nova";
          try {
-            serverId = createServer(zoneId, availabilityZone).getId();
+            serverId = createServer(regionId, availabilityZone).getId();
             Server server = serverApi.get(serverId);
             assertEquals(server.getStatus(), ACTIVE);
          } finally {
@@ -110,14 +110,14 @@ public class ServerApiLiveTest extends BaseNovaApiLiveTest {
    @Test(enabled = false)
    public void testCreateWithNetworkOptions() {
       String serverId = null;
-      for (String zoneId : zones) {
-         ServerApi serverApi = api.getServerApiForZone(zoneId);
+      for (String regionId : regions) {
+         ServerApi serverApi = api.getServerApi(regionId);
          try {
             CreateServerOptions options = CreateServerOptions.Builder.novaNetworks(
                   // This network UUID must match an existing network.
                   ImmutableSet.of(Network.builder().networkUuid("bc4cfa2b-2b27-4671-8e8f-73009623def0").fixedIp("192.168.55.56").build())
                   );
-            ServerCreated server = serverApi.create(hostName, imageIdForZone(zoneId), "1", options);
+            ServerCreated server = serverApi.create(hostName, imageIdForRegion(regionId), "1", options);
             serverId = server.getId();
 
             awaitActive(serverApi).apply(server.getId());
@@ -135,10 +135,10 @@ public class ServerApiLiveTest extends BaseNovaApiLiveTest {
    @Test
    public void testCreateInWrongAvailabilityZone() {
       String serverId = null;
-      for (String zoneId : zones) {
-         ServerApi serverApi = api.getServerApiForZone(zoneId);
+      for (String regionId : regions) {
+         ServerApi serverApi = api.getServerApi(regionId);
          try {
-             serverId = createServer(zoneId, "err").getId();
+             serverId = createServer(regionId, "err").getId();
          } catch (HttpResponseException e) {
             // Here is an implementation detail difference between OpenStack and some providers.
             // Some providers accept a bad availability zone and create the server in the zoneId.
@@ -157,10 +157,10 @@ public class ServerApiLiveTest extends BaseNovaApiLiveTest {
 
       String serverId = null;
 
-      for (String zoneId : zones) {
-         ServerApi serverApi = api.getServerApiForZone(zoneId);
+      for (String regionId : regions) {
+         ServerApi serverApi = api.getServerApi(regionId);
          try {
-            serverId = createServer(zoneId, null).getId();
+            serverId = createServer(regionId, null).getId();
 
             Server server = serverApi.get(serverId);
 
@@ -189,15 +189,15 @@ public class ServerApiLiveTest extends BaseNovaApiLiveTest {
       }
    }
 
-   private Server createServer(String zoneId, String availabilityZoneId) {
-      ServerApi serverApi = api.getServerApiForZone(zoneId);
+   private Server createServer(String regionId, String availabilityZoneId) {
+      ServerApi serverApi = api.getServerApi(regionId);
 
       CreateServerOptions options = new CreateServerOptions();
       if (availabilityZoneId != null) {
           options = options.availabilityZone(availabilityZoneId);
       }
 
-      ServerCreated server = serverApi.create(hostName, imageIdForZone(zoneId), flavorRefForZone(zoneId), options);
+      ServerCreated server = serverApi.create(hostName, imageIdForRegion(regionId), flavorRefForRegion(regionId), options);
 
       awaitActive(serverApi).apply(server.getId());
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/functions/CreateSecurityGroupIfNeededTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/functions/CreateSecurityGroupIfNeededTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/functions/CreateSecurityGroupIfNeededTest.java
index fc15e92..3ee404f 100644
--- a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/functions/CreateSecurityGroupIfNeededTest.java
+++ b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/functions/CreateSecurityGroupIfNeededTest.java
@@ -24,8 +24,8 @@ import org.jclouds.http.HttpRequest;
 import org.jclouds.http.HttpResponse;
 import org.jclouds.openstack.nova.v2_0.NovaApi;
 import org.jclouds.openstack.nova.v2_0.compute.functions.CreateSecurityGroupIfNeeded;
-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.RegionSecurityGroupNameAndPorts;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.SecurityGroupInRegion;
 import org.jclouds.openstack.nova.v2_0.internal.BaseNovaApiExpectTest;
 import org.jclouds.openstack.nova.v2_0.parse.ParseComputeServiceTypicalSecurityGroupTest;
 import org.testng.annotations.Test;
@@ -50,7 +50,7 @@ public class CreateSecurityGroupIfNeededTest extends BaseNovaApiExpectTest {
    public void testCreateNewGroup() throws Exception {
 
       Builder<HttpRequest, HttpResponse> builder = ImmutableMap.builder();
-      
+
       builder.put(keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess);
       builder.put(extensionsOfNovaRequest, extensionsOfNovaResponse);
       int groupId = 2769;
@@ -62,11 +62,11 @@ public class CreateSecurityGroupIfNeededTest extends BaseNovaApiExpectTest {
                                  "application/json; charset=UTF-8")).build();
 
       builder.put(create, createResponse);
-      
+
       int ruleId = 10331;
-      
+
       for (int port : ImmutableList.of(22, 8080)) {
-         
+
          HttpRequest createCidrRule = HttpRequest.builder().method("POST").endpoint(
                   URI.create("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v2/3456/os-security-group-rules")).headers(
                   ImmutableMultimap.<String, String> builder().put("Accept", "application/json").put("X-Auth-Token",
@@ -75,13 +75,13 @@ public class CreateSecurityGroupIfNeededTest extends BaseNovaApiExpectTest {
                            payloadFromStringWithContentType(
                                     String.format("{\"security_group_rule\":{\"parent_group_id\":\"%s\",\"cidr\":\"0.0.0.0/0\",\"ip_protocol\":\"tcp\",\"from_port\":\"%d\",\"to_port\":\"%d\"}}",
                                                       groupId, port, port), "application/json")).build();
-         
+
          HttpResponse createCidrRuleResponse = HttpResponse.builder().statusCode(200)
                   .payload(
                            payloadFromStringWithContentType(
                                     String.format("{\"security_group_rule\": {\"from_port\": %d, \"group\": {}, \"ip_protocol\": \"tcp\", \"to_port\": %d, \"parent_group_id\": %d, \"ip_range\": {\"cidr\": \"0.0.0.0/0\"}, \"id\": %d}}",
                                              port, port, groupId, ruleId++), "application/json; charset=UTF-8")).build();
-         
+
          builder.put(createCidrRule, createCidrRuleResponse);
 
          HttpRequest createSelfRule = HttpRequest.builder().method("POST").endpoint(
@@ -99,10 +99,10 @@ public class CreateSecurityGroupIfNeededTest extends BaseNovaApiExpectTest {
                            payloadFromStringWithContentType(
                                     String.format("{\"security_group_rule\": {\"from_port\": %d, \"group\": {\"tenant_id\": \"37936628937291\", \"name\": \"jclouds_mygroup\"}, \"ip_protocol\": \"tcp\", \"to_port\": %d, \"parent_group_id\": %d, \"ip_range\": {}, \"id\": %d}}",
                                              port, port, groupId, ruleId++), "application/json; charset=UTF-8")).build();
-         
+
          builder.put(createSelfRule, createSelfRuleResponse);
       }
-      
+
       HttpRequest getSecurityGroup = HttpRequest.builder().method("GET").endpoint(
                URI.create("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v2/3456/os-security-groups/" + groupId)).headers(
                ImmutableMultimap.<String, String> builder().put("Accept", "application/json").put("X-Auth-Token",
@@ -110,7 +110,7 @@ public class CreateSecurityGroupIfNeededTest extends BaseNovaApiExpectTest {
 
       HttpResponse getSecurityGroupResponse = HttpResponse.builder().statusCode(200).payload(
                payloadFromResource("/securitygroup_details_computeservice_typical.json")).build();
-      
+
       builder.put(getSecurityGroup, getSecurityGroupResponse);
 
       NovaApi apiCanCreateSecurityGroup = requestsSendResponses(builder.build());
@@ -119,8 +119,8 @@ public class CreateSecurityGroupIfNeededTest extends BaseNovaApiExpectTest {
 
       // we can find it
       assertEquals(fn.apply(
-               new ZoneSecurityGroupNameAndPorts("az-1.region-a.geo-1", "jclouds_mygroup", ImmutableSet.of(22, 8080)))
-               .toString(), new SecurityGroupInZone(new ParseComputeServiceTypicalSecurityGroupTest().expected(),
+               new RegionSecurityGroupNameAndPorts("az-1.region-a.geo-1", "jclouds_mygroup", ImmutableSet.of(22, 8080)))
+               .toString(), new SecurityGroupInRegion(new ParseComputeServiceTypicalSecurityGroupTest().expected(),
                "az-1.region-a.geo-1").toString());
 
    }
@@ -128,7 +128,7 @@ public class CreateSecurityGroupIfNeededTest extends BaseNovaApiExpectTest {
    public void testReturnExistingGroupOnAlreadyExists() throws Exception {
 
       Builder<HttpRequest, HttpResponse> builder = ImmutableMap.builder();
-      
+
       builder.put(keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess);
       builder.put(extensionsOfNovaRequest, extensionsOfNovaResponse);
 
@@ -139,7 +139,7 @@ public class CreateSecurityGroupIfNeededTest extends BaseNovaApiExpectTest {
                                  "application/json; charset=UTF-8")).build();
 
       builder.put(create, createResponse);
-          
+
       HttpRequest list = HttpRequest.builder().method("GET").endpoint(
                URI.create("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v2/3456/os-security-groups")).headers(
                ImmutableMultimap.<String, String> builder().put("Accept", "application/json").put("X-Auth-Token",
@@ -156,8 +156,8 @@ public class CreateSecurityGroupIfNeededTest extends BaseNovaApiExpectTest {
 
       // we can find it
       assertEquals(fn.apply(
-               new ZoneSecurityGroupNameAndPorts("az-1.region-a.geo-1", "jclouds_mygroup", ImmutableSet.of(22, 8080)))
-               .toString(), new SecurityGroupInZone(new ParseComputeServiceTypicalSecurityGroupTest().expected(),
+               new RegionSecurityGroupNameAndPorts("az-1.region-a.geo-1", "jclouds_mygroup", ImmutableSet.of(22, 8080)))
+               .toString(), new SecurityGroupInRegion(new ParseComputeServiceTypicalSecurityGroupTest().expected(),
                "az-1.region-a.geo-1").toString());
 
    }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/functions/FindSecurityGroupWithNameAndReturnTrueExpectTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/functions/FindSecurityGroupWithNameAndReturnTrueExpectTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/functions/FindSecurityGroupWithNameAndReturnTrueExpectTest.java
index d9c467e..d49fb8c 100644
--- a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/functions/FindSecurityGroupWithNameAndReturnTrueExpectTest.java
+++ b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/functions/FindSecurityGroupWithNameAndReturnTrueExpectTest.java
@@ -26,8 +26,8 @@ import java.util.concurrent.atomic.AtomicReference;
 import org.jclouds.http.HttpRequest;
 import org.jclouds.http.HttpResponse;
 import org.jclouds.openstack.nova.v2_0.NovaApi;
-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.RegionAndName;
+import org.jclouds.openstack.nova.v2_0.domain.regionscoped.SecurityGroupInRegion;
 import org.jclouds.openstack.nova.v2_0.internal.BaseNovaApiExpectTest;
 import org.jclouds.openstack.nova.v2_0.parse.ParseSecurityGroupListTest;
 import org.jclouds.openstack.nova.v2_0.predicates.FindSecurityGroupWithNameAndReturnTrue;
@@ -56,14 +56,14 @@ public class FindSecurityGroupWithNameAndReturnTrueExpectTest extends BaseNovaAp
       FindSecurityGroupWithNameAndReturnTrue predicate = new FindSecurityGroupWithNameAndReturnTrue(
                apiWhenSecurityGroupsExist);
 
-      AtomicReference<ZoneAndName> securityGroupInZoneRef = Atomics.newReference(ZoneAndName
-               .fromZoneAndName("az-1.region-a.geo-1", "name1"));
+      AtomicReference<RegionAndName> securityGroupInRegionRef = Atomics.newReference(RegionAndName
+               .fromRegionAndName("az-1.region-a.geo-1", "name1"));
 
       // we can find it
-      assertTrue(predicate.apply(securityGroupInZoneRef));
+      assertTrue(predicate.apply(securityGroupInRegionRef));
 
       // the reference is now up to date, and includes the actual group found.
-      assertEquals(securityGroupInZoneRef.get().toString(), new SecurityGroupInZone(Iterables
+      assertEquals(securityGroupInRegionRef.get().toString(), new SecurityGroupInRegion(Iterables
                .getOnlyElement(new ParseSecurityGroupListTest().expected()), "az-1.region-a.geo-1").toString());
 
    }
@@ -84,15 +84,15 @@ public class FindSecurityGroupWithNameAndReturnTrueExpectTest extends BaseNovaAp
       FindSecurityGroupWithNameAndReturnTrue predicate = new FindSecurityGroupWithNameAndReturnTrue(
                apiWhenSecurityGroupsExist);
 
-      ZoneAndName zoneAndGroup = ZoneAndName.fromZoneAndName("az-1.region-a.geo-1", "name2");
+      RegionAndName regionAndGroup = RegionAndName.fromRegionAndName("az-1.region-a.geo-1", "name2");
 
-      AtomicReference<ZoneAndName> securityGroupInZoneRef = Atomics.newReference(zoneAndGroup);
+      AtomicReference<RegionAndName> securityGroupInRegionRef = Atomics.newReference(regionAndGroup);
 
       // we cannot find it
-      assertFalse(predicate.apply(securityGroupInZoneRef));
+      assertFalse(predicate.apply(securityGroupInRegionRef));
 
       // the reference is the same
-      assertEquals(securityGroupInZoneRef.get(), zoneAndGroup);
+      assertEquals(securityGroupInRegionRef.get(), regionAndGroup);
 
    }
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/functions/InternalURLLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/functions/InternalURLLiveTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/functions/InternalURLLiveTest.java
index e313c34..7886d7e 100644
--- a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/functions/InternalURLLiveTest.java
+++ b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/functions/InternalURLLiveTest.java
@@ -31,18 +31,18 @@ import com.google.inject.Module;
 /**
  * Simple live test to check the correct loading of the internal endpoint
  * services.
- * 
- * 
+ *
+ *
  */
 @Test(groups = "live", testName = "InternalURLLiveTest")
 public class InternalURLLiveTest extends BaseNovaApiLiveTest {
 
    @Test(description = "InternalUrl service endpoints loader")
    public void testGetInternalUrlServiceEndpoint() throws Exception {
-      String zone = api.getConfiguredZones().iterator().next();
+      String region = api.getConfiguredRegions().iterator().next();
       // List current servers to ensure that can reach nova with internalUrl ip
       try {
-         api.getServerApiForZone(zone).list().concat().toList();
+         api.getServerApi(region).list().concat().toList();
       } catch (Exception e) {
          Assert.fail("Could not retrieve servers list using the internalUrl", e);
       }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/internal/BaseNovaApiLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/internal/BaseNovaApiLiveTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/internal/BaseNovaApiLiveTest.java
index acc830e..c6adf58 100644
--- a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/internal/BaseNovaApiLiveTest.java
+++ b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/internal/BaseNovaApiLiveTest.java
@@ -19,10 +19,6 @@ package org.jclouds.openstack.nova.v2_0.internal;
 import java.util.Properties;
 import java.util.Set;
 
-import com.google.common.collect.ComparisonChain;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Ordering;
 import org.jclouds.apis.BaseApiLiveTest;
 import org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties;
 import org.jclouds.openstack.nova.v2_0.NovaApi;
@@ -40,6 +36,10 @@ import org.testng.annotations.BeforeClass;
 import org.testng.annotations.Test;
 
 import com.google.common.base.Throwables;
+import com.google.common.collect.ComparisonChain;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Ordering;
 
 /**
  * Tests behavior of {@code NovaApi}
@@ -52,23 +52,23 @@ public class BaseNovaApiLiveTest extends BaseApiLiveTest<NovaApi> {
       provider = "openstack-nova";
    }
 
-   protected Set<String> zones;
+   protected Set<String> regions;
 
    @BeforeClass(groups = { "integration", "live" })
    @Override
    public void setup() {
       super.setup();
 
-      String testZone = System.getProperty("test." + provider + ".zone");
+      String testRegion = System.getProperty("test." + provider + ".region");
 
-      if (testZone != null) {
-         zones = ImmutableSet.of(testZone);
+      if (testRegion != null) {
+         regions = ImmutableSet.of(testRegion);
       } else {
-         zones = api.getConfiguredZones();
+         regions = api.getConfiguredRegions();
       }
 
-      for (String zone : zones) {
-         ServerApi serverApi = api.getServerApiForZone(zone);
+      for (String region : regions) {
+         ServerApi serverApi = api.getServerApi(region);
          for (Resource server : serverApi.list().concat()) {
             if (server.getName().equals(hostName))
                serverApi.delete(server.getId());
@@ -84,13 +84,13 @@ public class BaseNovaApiLiveTest extends BaseApiLiveTest<NovaApi> {
       return props;
    }
 
-   protected Server createServerInZone(String zoneId) {
-      return createServerInZone(zoneId, new CreateServerOptions());
+   protected Server createServerInRegion(String regionId) {
+      return createServerInRegion(regionId, new CreateServerOptions());
    }
 
-   protected Server createServerInZone(String zoneId, CreateServerOptions options) {
-      ServerApi serverApi = api.getServerApiForZone(zoneId);
-      ServerCreated server = serverApi.create(hostName, imageIdForZone(zoneId), flavorRefForZone(zoneId), options);
+   protected Server createServerInRegion(String regionId, CreateServerOptions options) {
+      ServerApi serverApi = api.getServerApi(regionId);
+      ServerCreated server = serverApi.create(hostName, imageIdForRegion(regionId), flavorRefForRegion(regionId), options);
       blockUntilServerInState(server.getId(), serverApi, Status.ACTIVE);
       return serverApi.get(server.getId());
    }
@@ -113,15 +113,15 @@ public class BaseNovaApiLiveTest extends BaseApiLiveTest<NovaApi> {
       }
    }
 
-   protected String imageIdForZone(String zoneId) {
-      ImageApi imageApi = api.getImageApiForZone(zoneId);
+   protected String imageIdForRegion(String regionId) {
+      ImageApi imageApi = api.getImageApi(regionId);
 
       // Get the first image from the list as it tends to be "lighter" and faster to start
       return Iterables.get(imageApi.list().concat(), 0).getId();
    }
 
-   protected String flavorRefForZone(String zoneId) {
-      FlavorApi flavorApi = api.getFlavorApiForZone(zoneId);
+   protected String flavorRefForRegion(String regionId) {
+      FlavorApi flavorApi = api.getFlavorApi(regionId);
       return DEFAULT_FLAVOR_ORDERING.min(flavorApi.listInDetail().concat()).getId();
    }
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/predicates/ServerPredicatesMockTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/predicates/ServerPredicatesMockTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/predicates/ServerPredicatesMockTest.java
index a636b15..47eed14 100644
--- a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/predicates/ServerPredicatesMockTest.java
+++ b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/predicates/ServerPredicatesMockTest.java
@@ -45,7 +45,7 @@ public class ServerPredicatesMockTest extends BaseOpenStackMockTest<NovaApi> {
 
       try {
          NovaApi novaApi = api(server.getUrl("/").toString(), "openstack-nova");
-         ServerApi serverApi = novaApi.getServerApiForZone("RegionOne");
+         ServerApi serverApi = novaApi.getServerApi("RegionOne");
 
          boolean result = awaitActive(serverApi).apply("71752");
 
@@ -70,7 +70,7 @@ public class ServerPredicatesMockTest extends BaseOpenStackMockTest<NovaApi> {
 
       try {
          NovaApi novaApi = api(server.getUrl("/").toString(), "openstack-nova");
-         ServerApi serverApi = novaApi.getServerApiForZone("RegionOne");
+         ServerApi serverApi = novaApi.getServerApi("RegionOne");
 
          boolean result = awaitShutoff(serverApi).apply("71752");
 
@@ -92,7 +92,7 @@ public class ServerPredicatesMockTest extends BaseOpenStackMockTest<NovaApi> {
 
       try {
          NovaApi novaApi = api(server.getUrl("/").toString(), "openstack-nova");
-         ServerApi serverApi = novaApi.getServerApiForZone("RegionOne");
+         ServerApi serverApi = novaApi.getServerApi("RegionOne");
 
          boolean result = awaitStatus(serverApi, ACTIVE, 3, 1).apply("71752");
 

http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/TroveApi.java
----------------------------------------------------------------------
diff --git a/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/TroveApi.java b/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/TroveApi.java
index 3e13ed3..332527d 100644
--- a/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/TroveApi.java
+++ b/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/TroveApi.java
@@ -18,11 +18,13 @@ package org.jclouds.openstack.trove.v1;
 
 import java.io.Closeable;
 import java.util.Set;
+
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
+
 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.keystone.v2_0.domain.Tenant;
 import org.jclouds.openstack.trove.v1.features.DatabaseApi;
 import org.jclouds.openstack.trove.v1.features.FlavorApi;
@@ -30,57 +32,109 @@ import org.jclouds.openstack.trove.v1.features.InstanceApi;
 import org.jclouds.openstack.trove.v1.features.UserApi;
 import org.jclouds.rest.annotations.Delegate;
 import org.jclouds.rest.annotations.EndpointParam;
+
 import com.google.common.base.Optional;
 import com.google.inject.Provides;
 
 /**
- * Provides access to Trove.
- *  
- * @see <a href="http://api.openstack.org/">API Doc</a>
+ * Provides access to the OpenStack Trove (Database) v2 API.
+ *
  */
-public interface TroveApi extends Closeable{
+public interface TroveApi extends Closeable {
+   /**
+    * Provides a set of all regions available.
+    *
+    * @return the Region codes configured
+    */
+   @Provides
+   @Region
+   Set<String> getConfiguredRegions();
+
+   /**
+    * Provides access to Flavor features.
+    */
+   @Delegate
+   FlavorApi getFlavorApi(@EndpointParam(parser = RegionToEndpoint.class) @Nullable String region);
+
+   /**
+    * Provides access to Instance features.
+    */
+   @Delegate
+   InstanceApi getInstanceApi(@EndpointParam(parser = RegionToEndpoint.class) @Nullable String region);
+
+   /**
+    * Provides access to User features.
+    */
+   @Delegate
+   @Path("/instances/{instanceId}")
+   UserApi getUserApi(@EndpointParam(parser = RegionToEndpoint.class) @Nullable String region,
+         @PathParam("instanceId") String instanceId);
+
+   /**
+    * Provides access to Database features.
+    */
+   @Delegate
+   @Path("/instances/{instanceId}")
+   DatabaseApi getDatabaseApi(@EndpointParam(parser = RegionToEndpoint.class) @Nullable String region,
+         @PathParam("instanceId") String instanceId);
+
    /**
     * Provides a set of all zones available.
-    * 
+    *
     * @return the Zone codes configured
+    * @deprecated Please use {@link #getConfiguredRegions()} as this method will be removed
+    *             in jclouds 3.0.
     */
+   @Deprecated
    @Provides
-   @Zone
+   @Region
    Set<String> getConfiguredZones();
 
    /**
     * Provides access to Flavor features.
+    * @deprecated Please use {@link #getFlavorApi(String region)} as this method will be removed
+    *             in jclouds 3.0.
     */
+   @Deprecated
    @Delegate
    FlavorApi getFlavorApiForZone(
-         @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
+         @EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone);
 
    /**
     * Provides access to Instance features.
+    * @deprecated Please use {@link #getInstanceApi(String region)} as this method will be removed
+    *             in jclouds 3.0.
     */
+   @Deprecated
    @Delegate
    InstanceApi getInstanceApiForZone(
-         @EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone);
+         @EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone);
 
    /**
     * Provides access to User features.
+    * @deprecated Please use {@link #getUserApi(String region, String instanceId)} as this method will be
+    *             removed in jclouds 3.0.
     */
+   @Deprecated
    @Delegate
    @Path("/instances/{instanceId}")
-   UserApi getUserApiForZoneAndInstance(@EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone,
+   UserApi getUserApiForZoneAndInstance(@EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone,
          @PathParam("instanceId") String instanceId);
 
    /**
     * Provides access to Database features.
+    * @deprecated Please use {@link #getDatabaseApi(String region, String instanceId)} as this method will
+    *             be removed in jclouds 3.0.
     */
+   @Deprecated
    @Delegate
    @Path("/instances/{instanceId}")
-   DatabaseApi getDatabaseApiForZoneAndInstance(@EndpointParam(parser = ZoneToEndpoint.class) @Nullable String zone,
+   DatabaseApi getDatabaseApiForZoneAndInstance(@EndpointParam(parser = RegionToEndpoint.class) @Nullable String zone,
          @PathParam("instanceId") String instanceId);
 
    /**
     * Provides the Tenant.
     */
-   @Provides 
+   @Provides
    Optional<Tenant> getCurrentTenantId();
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/TroveApiMetadata.java
----------------------------------------------------------------------
diff --git a/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/TroveApiMetadata.java b/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/TroveApiMetadata.java
index b9ff808..c40d941 100644
--- a/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/TroveApiMetadata.java
+++ b/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/TroveApiMetadata.java
@@ -25,7 +25,7 @@ import java.util.Properties;
 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.trove.v1.config.TroveHttpApiModule;
 import org.jclouds.openstack.trove.v1.config.TroveParserModule;
 import org.jclouds.openstack.v2_0.ServiceType;
@@ -38,7 +38,7 @@ import com.google.inject.Module;
  * Implementation of {@link org.jclouds.apis.ApiMetadata} for the OpenStack Trove v1 API.
  */
 public class TroveApiMetadata extends BaseHttpApiMetadata<TroveApi> {
-      
+
    @Override
    public Builder toBuilder() {
       return new Builder().fromApiMetadata(this);
@@ -61,7 +61,7 @@ public class TroveApiMetadata extends BaseHttpApiMetadata<TroveApi> {
 
    public static class Builder extends BaseHttpApiMetadata.Builder<TroveApi, Builder> {
 
-      protected Builder() {         
+      protected Builder() {
           id("openstack-trove")
          .name("OpenStack Trove API")
          .identityName("${tenantName}:${userName} or ${userName}, if your keystone supports a default tenant")
@@ -74,7 +74,7 @@ public class TroveApiMetadata extends BaseHttpApiMetadata<TroveApi> {
          .defaultModules(ImmutableSet.<Class<? extends Module>>builder()
                                      .add(AuthenticationApiModule.class)
                                      .add(KeystoneAuthenticationModule.class)
-                                     .add(ZoneModule.class)
+                                     .add(RegionModule.class)
                                      .add(TroveParserModule.class)
                                      .add(TroveHttpApiModule.class)
                                      .build());

http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/features/DatabaseApi.java
----------------------------------------------------------------------
diff --git a/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/features/DatabaseApi.java b/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/features/DatabaseApi.java
index f185091..cec9cac 100644
--- a/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/features/DatabaseApi.java
+++ b/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/features/DatabaseApi.java
@@ -41,19 +41,15 @@ import com.google.common.collect.FluentIterable;
 
 /**
  * This API is for creating, listing, and deleting a Database
- * 
- * @see <a href="http://sourceforge.net/apps/trac/reddwarf/">api doc</a>
- * @see <a
- *      href="https://github.com/reddwarf-nextgen/reddwarf">api
- *      src</a>
+ *
  */
 @SkipEncoding({'/', '='})
 @RequestFilters(AuthenticateRequest.class)
 public interface DatabaseApi {
-    
+
    /**
     * Same as create(String, null, null)
-    * @see DatabaseApi#create(String, String, String) 
+    * @see DatabaseApi#create(String, String, String)
     */
    @Named("database:create")
    @POST
@@ -62,10 +58,10 @@ public interface DatabaseApi {
    @Fallback(FalseOnNotFoundOr404.class)
    @MapBinder(BindCreateDatabaseToJson.class)
    boolean create(@PayloadParam("database") String database);
-   
+
    /**
     * This operation creates a new database within the specified instance.
-    * 
+    *
     * @param database The name of the database to be created
     * @param character_set Optional. Set of symbols and encodings. The default character set is utf8.
     * @param collate Optional. Set of rules for comparing characters in a character set. The default value for collate is utf8_general_ci.
@@ -78,7 +74,7 @@ public interface DatabaseApi {
    @Fallback(FalseOnNotFoundOr404.class)
    @MapBinder(BindCreateDatabaseToJson.class)
    boolean create(@PayloadParam("database") String database, @PayloadParam("character_set") String character_set, @PayloadParam("collate") String collate);
-   
+
    /**
     * This operation deletes the specified database for the specified database instance.
     *
@@ -91,7 +87,7 @@ public interface DatabaseApi {
    @Consumes(MediaType.APPLICATION_JSON)
    @Fallback(FalseOnNotFoundOr404.class)
    boolean delete(@PathParam("name") String databaseName);
-   
+
    /**
     * This operation lists the databases for the specified database instance.
     *
@@ -99,9 +95,9 @@ public interface DatabaseApi {
     */
    @Named("database:list")
    @GET
-   @Path("/databases")   
+   @Path("/databases")
    @ResponseParser(ParseDatabaseListForUser.class)
    @Consumes(MediaType.APPLICATION_JSON)
-   @Fallback(EmptyFluentIterableOnNotFoundOr404.class)   
-   FluentIterable<String> list();   
+   @Fallback(EmptyFluentIterableOnNotFoundOr404.class)
+   FluentIterable<String> list();
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/features/FlavorApi.java
----------------------------------------------------------------------
diff --git a/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/features/FlavorApi.java b/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/features/FlavorApi.java
index 611fb28..b71a570 100644
--- a/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/features/FlavorApi.java
+++ b/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/features/FlavorApi.java
@@ -36,13 +36,8 @@ import com.google.common.collect.FluentIterable;
 
 /**
  * This API strictly for listing and retrieving Flavor. Flavors cannot be created or deleted.
- * @see org.jclouds.openstack.trove.v1.domain.Flavor
- * Flavor
- * 
- * @see <a href="http://sourceforge.net/apps/trac/reddwarf/">api doc</a>
- * @see <a
- *      href="https://github.com/reddwarf-nextgen/reddwarf">api
- *      src</a>
+ *
+ * @see Flavor
  */
 @SkipEncoding({'/', '='})
 @RequestFilters(AuthenticateRequest.class)
@@ -59,7 +54,7 @@ public interface FlavorApi {
    @Consumes(MediaType.APPLICATION_JSON)
    @Fallback(EmptyFluentIterableOnNotFoundOr404.class)
    FluentIterable<Flavor> list();
-   
+
    /**
     * Returns a Flavor by id.
     *
@@ -73,7 +68,7 @@ public interface FlavorApi {
    @Consumes(MediaType.APPLICATION_JSON)
    @Fallback(NullOnNotFoundOr404.class)
    Flavor get(@PathParam("id") int flavorId);
-   
+
    /**
     * Returns a list of Flavors by Account ID (Tenant Id).
     *

http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/features/InstanceApi.java
----------------------------------------------------------------------
diff --git a/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/features/InstanceApi.java b/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/features/InstanceApi.java
index 6880ee7..84d8f96 100644
--- a/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/features/InstanceApi.java
+++ b/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/features/InstanceApi.java
@@ -24,6 +24,7 @@ import javax.ws.rs.POST;
 import javax.ws.rs.Path;
 import javax.ws.rs.PathParam;
 import javax.ws.rs.core.MediaType;
+
 import org.jclouds.Fallbacks.EmptyFluentIterableOnNotFoundOr404;
 import org.jclouds.Fallbacks.FalseOnNotFoundOr404;
 import org.jclouds.Fallbacks.NullOnNotFoundOr404;
@@ -32,6 +33,7 @@ import org.jclouds.openstack.keystone.v2_0.filters.AuthenticateRequest;
 import org.jclouds.openstack.trove.v1.binders.BindCreateInstanceToJson;
 import org.jclouds.openstack.trove.v1.domain.Instance;
 import org.jclouds.openstack.trove.v1.functions.ParsePasswordFromRootedInstance;
+import org.jclouds.rest.ResourceNotFoundException;
 import org.jclouds.rest.annotations.Fallback;
 import org.jclouds.rest.annotations.MapBinder;
 import org.jclouds.rest.annotations.PayloadParam;
@@ -39,22 +41,18 @@ import org.jclouds.rest.annotations.RequestFilters;
 import org.jclouds.rest.annotations.ResponseParser;
 import org.jclouds.rest.annotations.SelectJson;
 import org.jclouds.rest.annotations.SkipEncoding;
+
 import com.google.common.collect.FluentIterable;
 
 /**
  * This API is for creating, listing, and deleting an Instance, and allows enabling a root user.
- * @see org.jclouds.openstack.trove.v1.domain.Instance
- * Instance
- * 
- * @see <a href="http://sourceforge.net/apps/trac/reddwarf/">api doc</a>
- * @see <a
- *      href="https://github.com/reddwarf-nextgen/reddwarf">api
- *      src</a>
+
+ * @see Instance
  */
 @SkipEncoding({'/', '='})
 @RequestFilters(AuthenticateRequest.class)
 public interface InstanceApi {
-    
+
    /**
     * Same as {@link #create(String, int, String)} but accept an integer Flavor ID.
     *
@@ -62,7 +60,7 @@ public interface InstanceApi {
     * @param volumeSize The size in GB of the instance volume.
     * @param name The name of the instance.
     * @return The instance created.
-    * 
+    *
     * @see InstanceApi#create(String, int, String)
     */
    @Named("instance:create")
@@ -88,7 +86,7 @@ public interface InstanceApi {
    @Consumes(MediaType.APPLICATION_JSON)
    @MapBinder(BindCreateInstanceToJson.class)
    Instance create(@PayloadParam("flavorRef") String flavor, @PayloadParam("size") int volumeSize, @PayloadParam("name") String name);
-   
+
    /**
     * Deletes an Instance by id.
     *
@@ -101,7 +99,7 @@ public interface InstanceApi {
    @Consumes(MediaType.APPLICATION_JSON)
    @Fallback(FalseOnNotFoundOr404.class)
    boolean delete(@PathParam("id") String instanceId);
-   
+
    /**
     * Enables root for an instance.
     *
@@ -115,7 +113,7 @@ public interface InstanceApi {
    @ResponseParser(ParsePasswordFromRootedInstance.class)
    @Fallback(NullOnNotFoundOr404.class)
    String enableRoot(@PathParam("id") String instanceId);
-   
+
    /**
     * Checks to see if root is enabled for an instance.
     *
@@ -129,7 +127,7 @@ public interface InstanceApi {
    @Consumes(MediaType.APPLICATION_JSON)
    @SelectJson("rootEnabled")
    boolean isRooted(@PathParam("id") String instanceId);
-   
+
    /**
     * Returns a summary list of Instances.
     *
@@ -142,7 +140,7 @@ public interface InstanceApi {
    @Consumes(MediaType.APPLICATION_JSON)
    @Fallback(EmptyFluentIterableOnNotFoundOr404.class)
    FluentIterable<Instance> list();
-      
+
    /**
     * Returns an Instance by id.
     *

http://git-wip-us.apache.org/repos/asf/jclouds/blob/744cd5d7/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/features/UserApi.java
----------------------------------------------------------------------
diff --git a/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/features/UserApi.java b/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/features/UserApi.java
index 3827e95..45f4ea2 100644
--- a/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/features/UserApi.java
+++ b/apis/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/features/UserApi.java
@@ -48,18 +48,13 @@ import com.google.common.collect.FluentIterable;
 
 /**
  * This API is for creating, listing, and deleting a User. Also allows listing, granting, and revoking access permissions for users.
- * @see org.jclouds.openstack.trove.v1.domain.User
- * User
- * 
- * @see <a href="http://sourceforge.net/apps/trac/reddwarf/">api doc</a>
- * @see <a
- *      href="https://github.com/reddwarf-nextgen/reddwarf">api
- *      src</a>
+ *
+ * @see User
  */
 @SkipEncoding({'/', '='})
 @RequestFilters(AuthenticateRequest.class)
 public interface UserApi {
-    
+
    /**
     * Create database users.
     * A user is granted all privileges on the specified databases.
@@ -77,7 +72,7 @@ public interface UserApi {
    @Fallback(FalseOnNotFoundOr404.class)
    @MapBinder(BindCreateUserToJson.class)
    boolean create(@PayloadParam("users") Set<User> users);
-   
+
    /**
     * Create a database user by name, password, and database name. Simpler overload for {@link #create(String, Set)}.
     *
@@ -93,7 +88,7 @@ public interface UserApi {
    @Fallback(FalseOnNotFoundOr404.class)
    @MapBinder(BindCreateUserToJson.class)
    boolean create(@PayloadParam("name") String userName, @PayloadParam("password") String password, @PayloadParam("databaseName") String databaseName);
-   
+
    /**
     * Create a database user by name, password, and database name. Simpler overload for {@link #create(String, Set)}.
     *
@@ -126,7 +121,7 @@ public interface UserApi {
    @Fallback(FalseOnNotFoundOr404.class)
    @MapBinder(BindGrantUserToJson.class)
    boolean grant(@PathParam("name") String userName, @PayloadParam("databases") List<String> databases);
-   
+
    /**
     * This operation grants access for the specified user to a database for the specified instance. Simpler overload for {@link #create(String, Set)}.
     * The user is granted all privileges.
@@ -142,7 +137,7 @@ public interface UserApi {
    @Fallback(FalseOnNotFoundOr404.class)
    @MapBinder(BindGrantUserToJson.class)
    boolean grant(@PathParam("name") String userName, @PayloadParam("databaseName") String databaseName);
-   
+
    /**
     * This operation grants access for the specified user to a database for the specified instance.
     * The user is granted all privileges.
@@ -157,7 +152,7 @@ public interface UserApi {
    @Consumes(MediaType.APPLICATION_JSON)
    @Fallback(FalseOnNotFoundOr404.class)
    boolean revoke(@PathParam("name") String userName, @PathParam("databaseName") String databaseName);
-   
+
    /**
     * This operation deletes the specified user for the specified database instance.
     *
@@ -170,7 +165,7 @@ public interface UserApi {
    @Consumes(MediaType.APPLICATION_JSON)
    @Fallback(FalseOnNotFoundOr404.class)
    boolean delete(@PathParam("name") String userName);
-   
+
    /**
     * This operation lists the users in the specified database instance.
     * This operation does not return the system users (database administrators that administer the health of the database). Also, this operation returns the "root" user only if "root" user has been enabled.
@@ -184,7 +179,7 @@ public interface UserApi {
    @Consumes(MediaType.APPLICATION_JSON)
    @Fallback(EmptyFluentIterableOnNotFoundOr404.class)
    FluentIterable<User> list();
-   
+
    /**
     * This operation shows a list of all databases to which a user has access.
     *
@@ -199,7 +194,7 @@ public interface UserApi {
    @Consumes(MediaType.APPLICATION_JSON)
    @Fallback(EmptyFluentIterableOnNotFoundOr404.class)
    FluentIterable<String> getDatabaseList(@PathParam("name") String userName);
-      
+
    /**
     * Returns a User by identifier.
     *
@@ -215,7 +210,7 @@ public interface UserApi {
    @Fallback(NullOnNotFoundOr404.class)
    @Nullable
    User get(@PathParam("name") String name);
-   
+
    /**
     * Returns a User by name and allowed host.
     *