diff options
| author | Brian Waldon <brian.waldon@rackspace.com> | 2011-06-20 01:47:20 +0000 |
|---|---|---|
| committer | Tarmac <> | 2011-06-20 01:47:20 +0000 |
| commit | c2a8d0f1e2e9a25465100128bae4f60b532d16f5 (patch) | |
| tree | 46d0e0b5ffa3dcfd2ef1270cd973be5369bb348b /nova/api | |
| parent | cf751516b6d7381fca5f0678c07baaa0f7fccece (diff) | |
| parent | e2fa70fb9d2b6684823328a491e18c0f98184665 (diff) | |
| download | nova-c2a8d0f1e2e9a25465100128bae4f60b532d16f5.tar.gz nova-c2a8d0f1e2e9a25465100128bae4f60b532d16f5.tar.xz nova-c2a8d0f1e2e9a25465100128bae4f60b532d16f5.zip | |
Check that server exists when interacting with /v1.1/servers/<id>/meta resource
Diffstat (limited to 'nova/api')
| -rw-r--r-- | nova/api/openstack/server_metadata.py | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/nova/api/openstack/server_metadata.py b/nova/api/openstack/server_metadata.py index 57666f6b7..8a314de22 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): @@ -45,7 +46,11 @@ class Controller(object): def index(self, req, server_id): """ Returns the list of metadata for a given instance """ context = req.environ['nova.context'] - return self._get_metadata(context, server_id) + try: + return self._get_metadata(context, server_id) + except exception.InstanceNotFound: + msg = _('Server %(server_id)s does not exist') % locals() + raise exc.HTTPNotFound(explanation=msg) def create(self, req, server_id, body): self._check_body(body) @@ -55,8 +60,13 @@ class Controller(object): self.compute_api.update_or_create_instance_metadata(context, server_id, metadata) + except exception.InstanceNotFound: + msg = _('Server %(server_id)s does not exist') % locals() + raise exc.HTTPNotFound(explanation=msg) + except quota.QuotaError as error: self._handle_quota_error(error) + return body def update(self, req, server_id, id, body): @@ -72,6 +82,10 @@ class Controller(object): self.compute_api.update_or_create_instance_metadata(context, server_id, body) + except exception.InstanceNotFound: + msg = _('Server %(server_id)s does not exist') % locals() + raise exc.HTTPNotFound(explanation=msg) + except quota.QuotaError as error: self._handle_quota_error(error) @@ -80,16 +94,26 @@ class Controller(object): def show(self, req, server_id, id): """ Return a single metadata item """ context = req.environ['nova.context'] - data = self._get_metadata(context, server_id) - if id in data['metadata']: + try: + data = self._get_metadata(context, server_id) + except exception.InstanceNotFound: + msg = _('Server %(server_id)s does not exist') % locals() + raise exc.HTTPNotFound(explanation=msg) + + try: return {id: data['metadata'][id]} - else: - return faults.Fault(exc.HTTPNotFound()) + except KeyError: + msg = _("metadata item %s was not found" % (id)) + raise exc.HTTPNotFound(explanation=msg) def delete(self, req, server_id, id): """ Deletes an existing metadata """ context = req.environ['nova.context'] - self.compute_api.delete_instance_metadata(context, server_id, id) + try: + self.compute_api.delete_instance_metadata(context, server_id, id) + except exception.InstanceNotFound: + msg = _('Server %(server_id)s does not exist') % locals() + raise exc.HTTPNotFound(explanation=msg) def _handle_quota_error(self, error): """Reraise quota errors as api-specific http exceptions.""" |
