diff --git a/shade/__init__.py b/shade/__init__.py index c023fdf06..b3fd5b4b8 100644 --- a/shade/__init__.py +++ b/shade/__init__.py @@ -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): diff --git a/shade/exc.py b/shade/exc.py index 6d20992aa..e5f2a3d89 100644 --- a/shade/exc.py +++ b/shade/exc.py @@ -47,10 +47,6 @@ class OpenStackCloudTimeout(OpenStackCloudException): pass -class OpenStackCloudUnavailableService(OpenStackCloudException): - pass - - class OpenStackCloudUnavailableExtension(OpenStackCloudException): pass diff --git a/shade/tests/unit/test_shade_operator.py b/shade/tests/unit/test_shade_operator.py index a7537349b..a456afd2b 100644 --- a/shade/tests/unit/test_shade_operator.py +++ b/shade/tests/unit/test_shade_operator.py @@ -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):