From 2166d7d3afbbdc1659e4cffdb7bcd890cd00ec19 Mon Sep 17 00:00:00 2001 From: Dean Troyer Date: Fri, 17 Oct 2014 23:43:38 -0500 Subject: [PATCH] Remove ClientManager._service_catalog Anything that needs a service catalog can get it directly from auth_ref.service_catalog, no need to carry the extra attribute. ClientManager.get_endpoint_for_service_type() reamins the proper method to get an endpoint for clients that still need one directly. Change-Id: I809091c9c71d08f29606d7fd8b500898ff2cb8ae --- openstackclient/common/clientmanager.py | 14 +++++------ openstackclient/identity/client.py | 24 ++++--------------- openstackclient/identity/v2_0/service.py | 3 ++- openstackclient/image/client.py | 8 ++++--- openstackclient/network/client.py | 10 ++++---- openstackclient/object/client.py | 8 +++---- .../tests/common/test_clientmanager.py | 2 +- 7 files changed, 29 insertions(+), 40 deletions(-) diff --git a/openstackclient/common/clientmanager.py b/openstackclient/common/clientmanager.py index 336c0da0e9..febcedf4b1 100644 --- a/openstackclient/common/clientmanager.py +++ b/openstackclient/common/clientmanager.py @@ -66,7 +66,6 @@ class ClientManager(object): self._auth_params = auth.build_auth_params(auth_options) self._region_name = auth_options.os_region_name self._api_version = api_version - self._service_catalog = None self.timing = auth_options.timing # For compatibility until all clients can be updated @@ -104,7 +103,6 @@ class ClientManager(object): if 'token' not in self._auth_params: LOG.debug("Get service catalog") self.auth_ref = self.auth.get_auth_ref(self.session) - self._service_catalog = self.auth_ref.service_catalog return @@ -112,12 +110,14 @@ class ClientManager(object): """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, region_name=region_name) + if self.auth_ref: + endpoint = self.auth_ref.service_catalog.url_for( + service_type=service_type, + region_name=region_name, + ) else: - # Hope we were given the correct URL. - endpoint = self._auth_url or self._url + # Get the passed endpoint directly from the auth plugin + endpoint = self.auth.get_endpoint(self.session) return endpoint diff --git a/openstackclient/identity/client.py b/openstackclient/identity/client.py index bc10a6d237..8050d12096 100644 --- a/openstackclient/identity/client.py +++ b/openstackclient/identity/client.py @@ -44,27 +44,11 @@ def make_client(instance): API_VERSIONS) LOG.debug('Instantiating identity client: %s', identity_client) - # TODO(dtroyer): Something doesn't like the session.auth when using - # token auth, chase that down. - if instance._url: - LOG.debug('Using service token auth') - client = identity_client( - endpoint=instance._url, - token=instance._auth_params['token'], - cacert=instance._cacert, - insecure=instance._insecure - ) - else: - LOG.debug('Using auth plugin: %s' % instance._auth_plugin) - client = identity_client( - session=instance.session, - cacert=instance._cacert, - ) + LOG.debug('Using auth plugin: %s' % instance._auth_plugin) + client = identity_client( + session=instance.session, + ) - # TODO(dtroyer): the identity v2 role commands use this yet, fix that - # so we can remove it - if not instance._url: - instance.auth_ref = instance.auth.get_auth_ref(instance.session) return client diff --git a/openstackclient/identity/v2_0/service.py b/openstackclient/identity/v2_0/service.py index 458dce7cba..e8848ddee2 100644 --- a/openstackclient/identity/v2_0/service.py +++ b/openstackclient/identity/v2_0/service.py @@ -141,9 +141,10 @@ class ShowService(show.ShowOne): def take_action(self, parsed_args): self.log.debug('take_action(%s)', parsed_args) identity_client = self.app.client_manager.identity + auth_ref = self.app.client_manager.auth_ref if parsed_args.catalog: - endpoints = identity_client.service_catalog.get_endpoints( + endpoints = auth_ref.service_catalog.get_endpoints( service_type=parsed_args.service) for (service, service_endpoints) in six.iteritems(endpoints): if service_endpoints: diff --git a/openstackclient/image/client.py b/openstackclient/image/client.py index 84f5943754..c55ff85369 100644 --- a/openstackclient/image/client.py +++ b/openstackclient/image/client.py @@ -40,11 +40,13 @@ def make_client(instance): API_VERSIONS) LOG.debug('Instantiating image client: %s', image_client) - if not instance._url: - instance._url = instance.get_endpoint_for_service_type(API_NAME) + endpoint = instance.get_endpoint_for_service_type( + API_NAME, + region_name=instance._region_name, + ) return image_client( - instance._url, + endpoint, token=instance.auth.get_token(instance.session), cacert=instance._cacert, insecure=instance._insecure, diff --git a/openstackclient/network/client.py b/openstackclient/network/client.py index e4ce2f6a08..bb3e1b2397 100644 --- a/openstackclient/network/client.py +++ b/openstackclient/network/client.py @@ -34,16 +34,18 @@ def make_client(instance): API_VERSIONS) LOG.debug('Instantiating network client: %s', network_client) - if not instance._url: - instance._url = instance.get_endpoint_for_service_type( - "network", region_name=instance._region_name) + endpoint = instance.get_endpoint_for_service_type( + API_NAME, + region_name=instance._region_name, + ) + return network_client( username=instance._username, tenant_name=instance._project_name, password=instance._password, region_name=instance._region_name, auth_url=instance._auth_url, - endpoint_url=instance._url, + endpoint_url=endpoint, token=instance.auth.get_token(instance.session), insecure=instance._insecure, ca_cert=instance._cacert, diff --git a/openstackclient/object/client.py b/openstackclient/object/client.py index 1ac905c33e..beb7c04fc1 100644 --- a/openstackclient/object/client.py +++ b/openstackclient/object/client.py @@ -33,10 +33,10 @@ API_VERSIONS = { def make_client(instance): """Returns an object-store API client.""" - if instance._url: - endpoint = instance._url - else: - endpoint = instance.get_endpoint_for_service_type("object-store") + endpoint = instance.get_endpoint_for_service_type( + 'object-store', + region_name=instance._region_name, + ) client = object_store_v1.APIv1( session=instance.session, diff --git a/openstackclient/tests/common/test_clientmanager.py b/openstackclient/tests/common/test_clientmanager.py index 24adfa0e0b..a7b13c6c9c 100644 --- a/openstackclient/tests/common/test_clientmanager.py +++ b/openstackclient/tests/common/test_clientmanager.py @@ -157,7 +157,7 @@ class TestClientManager(utils.TestCase): ) self.assertEqual( dir(SERVICE_CATALOG), - dir(client_manager._service_catalog), + dir(client_manager.auth_ref.service_catalog), ) def stub_auth(self, json=None, url=None, verb=None, **kwargs):