From 0dfc69806d3767a7f6be91d9df18f20d31866c91 Mon Sep 17 00:00:00 2001 From: Gabriel Hurley Date: Tue, 23 Oct 2012 11:27:43 -0700 Subject: [PATCH] Don't log an exception for an expected empty catalog. Cleans up the code around exception handling and logging when first authenticating (which often returns an unscoped token). There's no need to be logging an exception on an expected empty catalog and moreover the except block was a bare "except" which could mask other errors. Fixes bug 1070493 Change-Id: I5e791e95ce3f9ab77723a7f4698cb11b169dacfb --- keystoneclient/exceptions.py | 5 +++++ keystoneclient/service_catalog.py | 3 +++ keystoneclient/v2_0/client.py | 9 ++++----- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/keystoneclient/exceptions.py b/keystoneclient/exceptions.py index f992ff306..802d3966d 100644 --- a/keystoneclient/exceptions.py +++ b/keystoneclient/exceptions.py @@ -24,6 +24,11 @@ class EndpointNotFound(Exception): pass +class EmptyCatalog(Exception): + """ The service catalog is empty. """ + pass + + class ClientException(Exception): """ The base exception class for all exceptions this library raises. diff --git a/keystoneclient/service_catalog.py b/keystoneclient/service_catalog.py index 5f20e0f38..cbe5c5de2 100644 --- a/keystoneclient/service_catalog.py +++ b/keystoneclient/service_catalog.py @@ -61,6 +61,9 @@ class ServiceCatalog(object): """ catalog = self.catalog.get('serviceCatalog', []) + if not catalog: + raise exceptions.EmptyCatalog('The service catalog is empty.') + for service in catalog: if service['type'] != service_type: continue diff --git a/keystoneclient/v2_0/client.py b/keystoneclient/v2_0/client.py index fef1178ed..7b58170c1 100644 --- a/keystoneclient/v2_0/client.py +++ b/keystoneclient/v2_0/client.py @@ -119,8 +119,6 @@ class Client(client.HTTPClient): sc = self.service_catalog.get_token() self.auth_token = sc['id'] # Save these since we have them and they'll be useful later - # NOTE(termie): these used to be in the token and then were removed - # ... why? self.auth_tenant_id = sc.get('tenant_id') self.auth_user_id = sc.get('user_id') except KeyError: @@ -133,6 +131,7 @@ class Client(client.HTTPClient): self.management_url = self.service_catalog.url_for( attr='region', filter_value=self.region_name, endpoint_type='adminURL') - except: - # Unscoped tokens don't return a service catalog - _logger.exception("unable to retrieve service catalog with token") + except exceptions.EmptyCatalog: + # Unscoped tokens don't return a service catalog; + # allow those to pass while any other errors bubble up. + pass