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