diff --git a/nova/compute/utils.py b/nova/compute/utils.py index 192c033eea..99e86c256a 100644 --- a/nova/compute/utils.py +++ b/nova/compute/utils.py @@ -203,7 +203,9 @@ def get_image_metadata(context, image_api, image_id_or_uri, instance): # If the base image is still available, get its metadata try: image = image_api.get(context, image_id_or_uri) - except Exception as e: + except (exception.ImageNotAuthorized, + exception.ImageNotFound, + exception.Invalid) as e: LOG.warning(_("Can't access image %(image_id)s: %(error)s"), {"image_id": image_id_or_uri, "error": e}, instance=instance) diff --git a/nova/tests/compute/test_compute_utils.py b/nova/tests/compute/test_compute_utils.py index 141e167a6d..b35d768224 100644 --- a/nova/tests/compute/test_compute_utils.py +++ b/nova/tests/compute/test_compute_utils.py @@ -21,6 +21,7 @@ import string import mock from oslo.config import cfg +import testtools from nova.compute import flavors from nova.compute import power_state @@ -668,9 +669,8 @@ class ComputeGetImageMetadataTestCase(test.TestCase): self.image['properties'] = 'DONTCARE' self.assertThat(self.image, matchers.DictMatches(image_meta)) - def test_get_image_meta_no_image(self): - e = exception.ImageNotFound(image_id='fake-image') - self.mock_image_api.get.side_effect = e + def _test_get_image_meta_exception(self, error): + self.mock_image_api.get.side_effect = error image_meta = compute_utils.get_image_metadata( self.ctx, self.mock_image_api, 'fake-image', self.instance_obj) @@ -681,6 +681,23 @@ class ComputeGetImageMetadataTestCase(test.TestCase): self.image[key] = str(self.image[key]) self.assertThat(self.image, matchers.DictMatches(image_meta)) + def test_get_image_meta_no_image(self): + error = exception.ImageNotFound(image_id='fake-image') + self._test_get_image_meta_exception(error) + + def test_get_image_meta_not_authorized(self): + error = exception.ImageNotAuthorized(image_id='fake-image') + self._test_get_image_meta_exception(error) + + def test_get_image_meta_bad_request(self): + error = exception.Invalid() + self._test_get_image_meta_exception(error) + + def test_get_image_meta_unexpected_exception(self): + error = test.TestingException() + with testtools.ExpectedException(test.TestingException): + self._test_get_image_meta_exception(error) + def test_get_image_meta_no_image_system_meta(self): for k in self.instance['system_metadata'].keys(): if k.startswith('image_'):