summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-05-01 14:20:36 +0000
committerGerrit Code Review <review@openstack.org>2013-05-01 14:20:36 +0000
commit69991d60cffbdc715faff2d55727a161f8e57051 (patch)
treef52210b9ec18b4eb97fec92dec1ff126baef2d85
parent7cd8f22354b4ba5768cda410267c225449f78b8d (diff)
parent09c7fc3b694ab401d42c9e59b17e24bbe4383588 (diff)
downloadnova-69991d60cffbdc715faff2d55727a161f8e57051.tar.gz
nova-69991d60cffbdc715faff2d55727a161f8e57051.tar.xz
nova-69991d60cffbdc715faff2d55727a161f8e57051.zip
Merge "Catch glance image create exceptions"
-rw-r--r--nova/api/openstack/compute/servers.py2
-rw-r--r--nova/image/glance.py7
-rw-r--r--nova/tests/api/openstack/compute/test_server_actions.py13
-rw-r--r--nova/tests/api/openstack/fakes.py3
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)