Dont throw exception on missing service

We log exceptions to debug log, but checking for the existence of a
service is normal flow. Don't throw an exception when we can just
return None and have everything work without spamming logs.

Change-Id: I35f431b12c16e085c0e256cad514134066e15a39
This commit is contained in:
Monty Taylor 2015-09-30 17:45:49 -04:00
parent 424cb017dd
commit 137458fc1c
3 changed files with 8 additions and 16 deletions

View File

@ -33,7 +33,6 @@ from keystoneauth1 import plugin as ksa_plugin
from keystoneauth1 import session as ksa_session
from keystoneclient.v2_0 import client as k2_client
from keystoneclient.v3 import client as k3_client
from keystoneclient import exceptions as keystone_exceptions
from novaclient import client as nova_client
from novaclient import exceptions as nova_exceptions
from neutronclient.common import exceptions as neutron_exceptions
@ -724,25 +723,24 @@ class OpenStackCloud(object):
service_key),
interface=self.cloud_config.get_interface(service_key),
region_name=self.region_name)
except keystone_exceptions.EndpointNotFound as e:
except keystoneauth1.exceptions.catalog.EndpointNotFound as e:
self.log.debug(
"Endpoint not found in %s cloud: %s", self.name, str(e))
endpoint = None
except Exception as e:
raise OpenStackCloudException(
"Error getting %s endpoint: %s" % (service_key, str(e)))
if endpoint is None:
raise OpenStackCloudUnavailableService(
"Cloud {cloud} does not have a {service} service".format(
cloud=self.name, service=service_key))
return endpoint
def has_service(self, service_key):
try:
self.get_session_endpoint(service_key)
return True
endpoint = self.get_session_endpoint(service_key)
except OpenStackCloudException:
return False
if endpoint:
return True
else:
return False
@_cache_on_arguments()
def _nova_extensions(self):

View File

@ -47,10 +47,6 @@ class OpenStackCloudTimeout(OpenStackCloudException):
pass
class OpenStackCloudUnavailableService(OpenStackCloudException):
pass
class OpenStackCloudUnavailableExtension(OpenStackCloudException):
pass

View File

@ -768,10 +768,8 @@ class TestShadeOperator(base.TestCase):
@mock.patch.object(shade.OpenStackCloud, 'keystone_session')
def test_get_session_endpoint_unavailable(self, session_mock):
session_mock.get_endpoint.return_value = None
with testtools.ExpectedException(
exc.OpenStackCloudUnavailableService,
"Cloud.*does not have a image service"):
self.cloud.get_session_endpoint("image")
image_endpoint = self.cloud.get_session_endpoint("image")
self.assertIsNone(image_endpoint)
@mock.patch.object(shade.OpenStackCloud, 'keystone_session')
def test_get_session_endpoint_identity(self, session_mock):