summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrian Waldon <brian.waldon@rackspace.com>2011-07-11 19:31:40 +0000
committerTarmac <>2011-07-11 19:31:40 +0000
commit92b0b614b1077bfc44bed0bd5d6e9e68d41c4f36 (patch)
tree96349a78a121d228f1a94e6dcc7fe957c90b6da5
parent11be49aa59efc2d0d991d70546899b3625270af6 (diff)
parent2aacfcbef233113ce25c52f1504bde9dd49f758e (diff)
downloadnova-92b0b614b1077bfc44bed0bd5d6e9e68d41c4f36.tar.gz
nova-92b0b614b1077bfc44bed0bd5d6e9e68d41c4f36.tar.xz
nova-92b0b614b1077bfc44bed0bd5d6e9e68d41c4f36.zip
Set the proper return code for server delete requests
-rw-r--r--nova/api/openstack/servers.py37
-rw-r--r--nova/tests/api/openstack/test_servers.py16
-rw-r--r--nova/tests/integrated/api/client.py2
3 files changed, 44 insertions, 11 deletions
diff --git a/nova/api/openstack/servers.py b/nova/api/openstack/servers.py
index 206a69265..12af44a8d 100644
--- a/nova/api/openstack/servers.py
+++ b/nova/api/openstack/servers.py
@@ -104,15 +104,6 @@ class Controller(object):
except exception.NotFound:
return faults.Fault(exc.HTTPNotFound())
- @scheduler_api.redirect_handler
- def delete(self, req, id):
- """ Destroys a server """
- try:
- self.compute_api.delete(req.environ['nova.context'], id)
- except exception.NotFound:
- return faults.Fault(exc.HTTPNotFound())
- return exc.HTTPAccepted()
-
def create(self, req, body):
""" Creates a new server for a given user """
extra_values = None
@@ -420,6 +411,15 @@ class Controller(object):
class ControllerV10(Controller):
+ @scheduler_api.redirect_handler
+ def delete(self, req, id):
+ """ Destroys a server """
+ try:
+ self.compute_api.delete(req.environ['nova.context'], id)
+ except exception.NotFound:
+ return faults.Fault(exc.HTTPNotFound())
+ return exc.HTTPAccepted()
+
def _image_ref_from_req_data(self, data):
return data['server']['imageId']
@@ -482,6 +482,15 @@ class ControllerV10(Controller):
class ControllerV11(Controller):
+
+ @scheduler_api.redirect_handler
+ def delete(self, req, id):
+ """ Destroys a server """
+ try:
+ self.compute_api.delete(req.environ['nova.context'], id)
+ except exception.NotFound:
+ return faults.Fault(exc.HTTPNotFound())
+
def _image_ref_from_req_data(self, data):
return data['server']['imageRef']
@@ -597,6 +606,12 @@ class ControllerV11(Controller):
return self.helper._get_server_admin_password_new_style(server)
+class HeadersSerializer(wsgi.ResponseHeadersSerializer):
+
+ def delete(self, response, data):
+ response.status_int = 204
+
+
def create_resource(version='1.0'):
controller = {
'1.0': ControllerV10,
@@ -624,6 +639,8 @@ def create_resource(version='1.0'):
'1.1': wsgi.XMLNS_V11,
}[version]
+ headers_serializer = HeadersSerializer()
+
body_serializers = {
'application/xml': wsgi.XMLDictSerializer(metadata=metadata,
xmlns=xmlns),
@@ -633,7 +650,7 @@ def create_resource(version='1.0'):
'application/xml': helper.ServerXMLDeserializer(),
}
- serializer = wsgi.ResponseSerializer(body_serializers)
+ serializer = wsgi.ResponseSerializer(body_serializers, headers_serializer)
deserializer = wsgi.RequestDeserializer(body_deserializers)
return wsgi.Resource(controller, deserializer, serializer)
diff --git a/nova/tests/api/openstack/test_servers.py b/nova/tests/api/openstack/test_servers.py
index b6b5a1e76..8e82a7edc 100644
--- a/nova/tests/api/openstack/test_servers.py
+++ b/nova/tests/api/openstack/test_servers.py
@@ -1433,6 +1433,22 @@ class ServersTest(test.TestCase):
self.assertEqual(res.status, '202 Accepted')
self.assertEqual(self.server_delete_called, True)
+ def test_delete_server_instance_v1_1(self):
+ req = webob.Request.blank('/v1.1/servers/1')
+ req.method = 'DELETE'
+
+ self.server_delete_called = False
+
+ def instance_destroy_mock(context, id):
+ self.server_delete_called = True
+
+ self.stubs.Set(nova.db.api, 'instance_destroy',
+ instance_destroy_mock)
+
+ res = req.get_response(fakes.wsgi_app())
+ self.assertEqual(res.status_int, 204)
+ self.assertEqual(self.server_delete_called, True)
+
def test_resize_server(self):
req = self.webreq('/1/action', 'POST', dict(resize=dict(flavorId=3)))
diff --git a/nova/tests/integrated/api/client.py b/nova/tests/integrated/api/client.py
index 3d255b40c..59cc3b564 100644
--- a/nova/tests/integrated/api/client.py
+++ b/nova/tests/integrated/api/client.py
@@ -174,7 +174,7 @@ class TestOpenStackClient(object):
def api_delete(self, relative_uri, **kwargs):
kwargs['method'] = 'DELETE'
- kwargs.setdefault('check_response_status', [200, 202])
+ kwargs.setdefault('check_response_status', [200, 202, 204])
return self.api_request(relative_uri, **kwargs)
def get_server(self, server_id):