diff options
| author | Jenkins <jenkins@review.openstack.org> | 2013-05-01 14:20:36 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2013-05-01 14:20:36 +0000 |
| commit | 69991d60cffbdc715faff2d55727a161f8e57051 (patch) | |
| tree | f52210b9ec18b4eb97fec92dec1ff126baef2d85 | |
| parent | 7cd8f22354b4ba5768cda410267c225449f78b8d (diff) | |
| parent | 09c7fc3b694ab401d42c9e59b17e24bbe4383588 (diff) | |
| download | nova-69991d60cffbdc715faff2d55727a161f8e57051.tar.gz nova-69991d60cffbdc715faff2d55727a161f8e57051.tar.xz nova-69991d60cffbdc715faff2d55727a161f8e57051.zip | |
Merge "Catch glance image create exceptions"
| -rw-r--r-- | nova/api/openstack/compute/servers.py | 2 | ||||
| -rw-r--r-- | nova/image/glance.py | 7 | ||||
| -rw-r--r-- | nova/tests/api/openstack/compute/test_server_actions.py | 13 | ||||
| -rw-r--r-- | nova/tests/api/openstack/fakes.py | 3 |
4 files changed, 23 insertions, 2 deletions
diff --git a/nova/api/openstack/compute/servers.py b/nova/api/openstack/compute/servers.py index cf200e50a..bc4ba67df 100644 --- a/nova/api/openstack/compute/servers.py +++ b/nova/api/openstack/compute/servers.py @@ -1357,6 +1357,8 @@ class Controller(wsgi.Controller): except exception.InstanceInvalidState as state_error: common.raise_http_conflict_for_instance_invalid_state(state_error, 'createImage') + except exception.Invalid as err: + raise exc.HTTPBadRequest(explanation=str(err)) # build location of newly-created image entity image_id = str(image['id']) diff --git a/nova/image/glance.py b/nova/image/glance.py index eb0d72b81..798115957 100644 --- a/nova/image/glance.py +++ b/nova/image/glance.py @@ -290,8 +290,11 @@ class GlanceImageService(object): if data: sent_service_image_meta['data'] = data - recv_service_image_meta = self._client.call(context, 1, 'create', - **sent_service_image_meta) + try: + recv_service_image_meta = self._client.call( + context, 1, 'create', **sent_service_image_meta) + except glanceclient.exc.HTTPException: + _reraise_translated_exception() return self._translate_from_glance(recv_service_image_meta) diff --git a/nova/tests/api/openstack/compute/test_server_actions.py b/nova/tests/api/openstack/compute/test_server_actions.py index c5d57ecbb..fe65fe0d9 100644 --- a/nova/tests/api/openstack/compute/test_server_actions.py +++ b/nova/tests/api/openstack/compute/test_server_actions.py @@ -745,6 +745,19 @@ class ServerActionsControllerTest(test.TestCase): location = response.headers['Location'] self.assertEqual('http://localhost/v2/fake/images/123', location) + def test_create_image_name_too_long(self): + long_name = 'a' * 260 + body = { + 'createImage': { + 'name': long_name, + }, + } + + req = fakes.HTTPRequest.blank(self.url) + self.assertRaises(webob.exc.HTTPBadRequest, + self.controller._action_create_image, req, + FAKE_UUID, body) + def _do_test_create_volume_backed_image(self, extra_properties): def _fake_id(x): diff --git a/nova/tests/api/openstack/fakes.py b/nova/tests/api/openstack/fakes.py index bf7c4d0d4..9e7b99bea 100644 --- a/nova/tests/api/openstack/fakes.py +++ b/nova/tests/api/openstack/fakes.py @@ -158,6 +158,9 @@ def stub_out_networking(stubs): def stub_out_compute_api_snapshot(stubs): def snapshot(self, context, instance, name, extra_properties=None): + # emulate glance rejecting image names which are too long + if len(name) > 256: + raise exc.Invalid return dict(id='123', status='ACTIVE', name=name, properties=extra_properties) |
