summaryrefslogtreecommitdiffstats
path: root/nova/api
diff options
context:
space:
mode:
authorBrian Waldon <brian.waldon@rackspace.com>2011-06-15 15:28:39 -0400
committerBrian Waldon <brian.waldon@rackspace.com>2011-06-15 15:28:39 -0400
commite35878070ce594d3c9db2f433dcf3f3f1441a497 (patch)
tree0370a76444f214407334d66b6c39cff8e9041b80 /nova/api
parent57932d53e7cc5389b7d53fd8875a684f70e2eb67 (diff)
adding server existence check to server metadata resource
Diffstat (limited to 'nova/api')
-rw-r--r--nova/api/openstack/server_metadata.py15
1 files changed, 14 insertions, 1 deletions
diff --git a/nova/api/openstack/server_metadata.py b/nova/api/openstack/server_metadata.py
index 57666f6b7..ec9e10496 100644
--- a/nova/api/openstack/server_metadata.py
+++ b/nova/api/openstack/server_metadata.py
@@ -18,9 +18,10 @@
from webob import exc
from nova import compute
-from nova import quota
from nova.api.openstack import faults
from nova.api.openstack import wsgi
+from nova import exception
+from nova import quota
class Controller(object):
@@ -42,14 +43,23 @@ class Controller(object):
expl = _('No Request Body')
raise exc.HTTPBadRequest(explanation=expl)
+ def _check_server_exists(self, context, server_id):
+ try:
+ self.compute_api.routing_get(context, server_id)
+ except exception.InstanceNotFound:
+ msg = _('Server does not exist')
+ raise exc.HTTPNotFound(explanation=msg)
+
def index(self, req, server_id):
""" Returns the list of metadata for a given instance """
context = req.environ['nova.context']
+ self._check_server_exists(context, server_id)
return self._get_metadata(context, server_id)
def create(self, req, server_id, body):
self._check_body(body)
context = req.environ['nova.context']
+ self._check_server_exists(context, server_id)
metadata = body.get('metadata')
try:
self.compute_api.update_or_create_instance_metadata(context,
@@ -62,6 +72,7 @@ class Controller(object):
def update(self, req, server_id, id, body):
self._check_body(body)
context = req.environ['nova.context']
+ self._check_server_exists(context, server_id)
if not id in body:
expl = _('Request body and URI mismatch')
raise exc.HTTPBadRequest(explanation=expl)
@@ -80,6 +91,7 @@ class Controller(object):
def show(self, req, server_id, id):
""" Return a single metadata item """
context = req.environ['nova.context']
+ self._check_server_exists(context, server_id)
data = self._get_metadata(context, server_id)
if id in data['metadata']:
return {id: data['metadata'][id]}
@@ -89,6 +101,7 @@ class Controller(object):
def delete(self, req, server_id, id):
""" Deletes an existing metadata """
context = req.environ['nova.context']
+ self._check_server_exists(context, server_id)
self.compute_api.delete_instance_metadata(context, server_id, id)
def _handle_quota_error(self, error):