From 3af547a1a6e597ea1b38fb273195ac1ef00d29dd Mon Sep 17 00:00:00 2001
From: Monty Taylor <mordred@inaugust.com>
Date: Sat, 11 Oct 2014 14:25:50 -0700
Subject: [PATCH] Fix operation on clouds with availability-zones

In a cloud with AZs, you can get multiple entries back from the service
catalog - one for each AZ and then one that is AZ agnostic that's tied
to the region. If the region_name is plumbed all the way through, this
works as intended.

Change-Id: I3b365ea306e8111fc80830672ae8080a5d1dc8e0
---
 openstackclient/common/clientmanager.py | 4 ++--
 openstackclient/compute/client.py       | 2 +-
 openstackclient/network/client.py       | 3 ++-
 openstackclient/volume/client.py        | 2 +-
 4 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/openstackclient/common/clientmanager.py b/openstackclient/common/clientmanager.py
index 0542b47362..387721a453 100644
--- a/openstackclient/common/clientmanager.py
+++ b/openstackclient/common/clientmanager.py
@@ -110,13 +110,13 @@ class ClientManager(object):
 
         return
 
-    def get_endpoint_for_service_type(self, service_type):
+    def get_endpoint_for_service_type(self, service_type, region_name=None):
         """Return the endpoint URL for the service type."""
         # See if we are using password flow auth, i.e. we have a
         # service catalog to select endpoints from
         if self._service_catalog:
             endpoint = self._service_catalog.url_for(
-                service_type=service_type)
+                service_type=service_type, region_name=region_name)
         else:
             # Hope we were given the correct URL.
             endpoint = self._auth_url or self._url
diff --git a/openstackclient/compute/client.py b/openstackclient/compute/client.py
index dc50507eb2..d473295b71 100644
--- a/openstackclient/compute/client.py
+++ b/openstackclient/compute/client.py
@@ -68,7 +68,7 @@ def make_client(instance):
     else:
         # password flow
         client.client.management_url = instance.get_endpoint_for_service_type(
-            API_NAME)
+            API_NAME, region_name=instance._region_name)
         client.client.service_catalog = instance._service_catalog
     client.client.auth_token = instance._token
     return client
diff --git a/openstackclient/network/client.py b/openstackclient/network/client.py
index d3102da1eb..870fdad1db 100644
--- a/openstackclient/network/client.py
+++ b/openstackclient/network/client.py
@@ -35,7 +35,8 @@ def make_client(instance):
     LOG.debug('Instantiating network client: %s', network_client)
 
     if not instance._url:
-        instance._url = instance.get_endpoint_for_service_type("network")
+        instance._url = instance.get_endpoint_for_service_type(
+            "network", region_name=instance._region_name)
     return network_client(
         username=instance._username,
         tenant_name=instance._project_name,
diff --git a/openstackclient/volume/client.py b/openstackclient/volume/client.py
index f71fbe8bcd..58cb267e53 100644
--- a/openstackclient/volume/client.py
+++ b/openstackclient/volume/client.py
@@ -68,7 +68,7 @@ def make_client(instance):
     else:
         # password flow
         client.client.management_url = instance.get_endpoint_for_service_type(
-            API_NAME)
+            API_NAME, region_name=instance._region_name)
         client.client.service_catalog = instance._service_catalog
     client.client.auth_token = instance._token