summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorWilliam Wolf <throughnothing@gmail.com>2011-08-18 16:12:49 -0400
committerWilliam Wolf <throughnothing@gmail.com>2011-08-18 16:12:49 -0400
commita711bf61b274eb38face3957549acd4ee3c9b6a1 (patch)
tree20844c8cc2e762810973ea9d9dfa5a1b08ba5672 /nova/api
parentb29b5c85cbd5ab3c21fc00d1c037af1118ea30b4 (diff)
parentabf7e2f767e1e535f40550945af466436d0cf541 (diff)
merge from trunk
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/common.py3
-rw-r--r--nova/api/openstack/create_instance_helper.py13
-rw-r--r--nova/api/openstack/server_metadata.py3
-rw-r--r--nova/api/openstack/views/servers.py8
4 files changed, 18 insertions, 9 deletions
diff --git a/nova/api/openstack/common.py b/nova/api/openstack/common.py
index b2a675653..d9eb832f2 100644
--- a/nova/api/openstack/common.py
+++ b/nova/api/openstack/common.py
@@ -241,7 +241,8 @@ def check_img_metadata_quota_limit(context, metadata):
quota_metadata = quota.allowed_metadata_items(context, num_metadata)
if quota_metadata < num_metadata:
expl = _("Image metadata limit exceeded")
- raise webob.exc.HTTPBadRequest(explanation=expl)
+ raise webob.exc.HTTPRequestEntityTooLarge(explanation=expl,
+ headers={'Retry-After': 0})
class MetadataXMLDeserializer(wsgi.XMLDeserializer):
diff --git a/nova/api/openstack/create_instance_helper.py b/nova/api/openstack/create_instance_helper.py
index 4e1da549e..b4a08dac0 100644
--- a/nova/api/openstack/create_instance_helper.py
+++ b/nova/api/openstack/create_instance_helper.py
@@ -180,13 +180,20 @@ class CreateInstanceHelper(object):
"""
if error.code == "OnsetFileLimitExceeded":
expl = _("Personality file limit exceeded")
- raise exc.HTTPBadRequest(explanation=expl)
+ raise exc.HTTPRequestEntityTooLarge(explanation=error.message,
+ headers={'Retry-After': 0})
if error.code == "OnsetFilePathLimitExceeded":
expl = _("Personality file path too long")
- raise exc.HTTPBadRequest(explanation=expl)
+ raise exc.HTTPRequestEntityTooLarge(explanation=error.message,
+ headers={'Retry-After': 0})
if error.code == "OnsetFileContentLimitExceeded":
expl = _("Personality file content too long")
- raise exc.HTTPBadRequest(explanation=expl)
+ raise exc.HTTPRequestEntityTooLarge(explanation=error.message,
+ headers={'Retry-After': 0})
+ if error.code == "InstanceLimitExceeded":
+ expl = _("Instance quotas have been exceeded")
+ raise exc.HTTPRequestEntityTooLarge(explanation=error.message,
+ headers={'Retry-After': 0})
# if the original error is okay, just reraise it
raise error
diff --git a/nova/api/openstack/server_metadata.py b/nova/api/openstack/server_metadata.py
index 2b235f79a..8ac3319c9 100644
--- a/nova/api/openstack/server_metadata.py
+++ b/nova/api/openstack/server_metadata.py
@@ -151,7 +151,8 @@ class Controller(object):
def _handle_quota_error(self, error):
"""Reraise quota errors as api-specific http exceptions."""
if error.code == "MetadataLimitExceeded":
- raise exc.HTTPBadRequest(explanation=error.message)
+ raise exc.HTTPRequestEntityTooLarge(explanation=error.message,
+ headers={'Retry-After': 0})
raise error
diff --git a/nova/api/openstack/views/servers.py b/nova/api/openstack/views/servers.py
index bb5be90c5..5835949f1 100644
--- a/nova/api/openstack/views/servers.py
+++ b/nova/api/openstack/views/servers.py
@@ -111,14 +111,14 @@ class ViewBuilderV10(ViewBuilder):
response['uuid'] = inst['uuid']
def _build_image(self, response, inst):
- if 'image_ref' in dict(inst):
+ if inst.get('image_ref', None):
image_ref = inst['image_ref']
if str(image_ref).startswith('http'):
raise exception.ListingImageRefsNotSupported()
response['imageId'] = int(image_ref)
def _build_flavor(self, response, inst):
- if 'instance_type' in dict(inst):
+ if inst.get('instance_type', None):
response['flavorId'] = inst['instance_type']['flavorid']
def _build_addresses(self, response, inst):
@@ -147,7 +147,7 @@ class ViewBuilderV11(ViewBuilder):
return response
def _build_image(self, response, inst):
- if 'image_ref' in dict(inst):
+ if inst.get("image_ref", None):
image_href = inst['image_ref']
image_id = str(common.get_id_from_href(image_href))
_bookmark = self.image_builder.generate_bookmark(image_id)
@@ -162,7 +162,7 @@ class ViewBuilderV11(ViewBuilder):
}
def _build_flavor(self, response, inst):
- if "instance_type" in dict(inst):
+ if inst.get("instance_type", None):
flavor_id = inst["instance_type"]['flavorid']
flavor_ref = self.flavor_builder.generate_href(flavor_id)
flavor_bookmark = self.flavor_builder.generate_bookmark(flavor_id)