Action 'delete' for compute controller.

This commit is contained in:
Pablo Orviz 2015-04-09 16:10:09 +02:00
parent 0b92038f62
commit cdf535a644
3 changed files with 35 additions and 4 deletions

View File

@ -26,7 +26,11 @@ class Controller(object):
self.app = app
self.openstack_version = openstack_version
def _get_req(self, req, path=None, content_type=None, body=None):
def _get_req(self, req,
path=None,
content_type=None,
body=None,
method=None):
"""Return a new Request object to interact with OpenStack.
This method will create a new request starting with the same WSGI
@ -49,6 +53,8 @@ class Controller(object):
new_req.content_type = content_type
if body is not None:
new_req.body = utils.utf8(body)
if method is not None:
new_req.method = method
return new_req
@staticmethod
@ -63,7 +69,7 @@ class Controller(object):
:param element: The element to look for in the JSON body
:param default: The default element to be returned if not found.
"""
if response.status_int == 200:
if response.status_int in [200, 201]:
return response.json_body.get(element, default)
else:
raise exception_from_response(response)

View File

@ -71,7 +71,7 @@ class Controller(ooi.api.base.Controller):
return collection.Collection(resources=occi_compute_resources)
def show(self, id, req):
def show(self, req, id):
tenant_id = req.environ["keystone.token_auth"].user.project_id
# get info from server
@ -106,3 +106,27 @@ class Controller(ooi.api.base.Controller):
state=helpers.occi_state(s["status"]),
mixins=[os_tpl, res_tpl])
return [comp]
def delete(self, req, id=None):
tenant_id = req.environ["keystone.token_auth"].user.project_id
servers = []
if id:
servers.append(id)
else:
req = self._get_req(req,
path="/%s/servers" % tenant_id,
method="GET")
response = req.get_response(self.app)
for s in self.get_from_response(response, "servers", []):
servers.append(s["id"])
for server_id in servers:
req = self._get_req(req,
path="/%s/servers/%s" % (tenant_id,
server_id),
method="DELETE")
response = req.get_response(self.app)
if response.status_int not in [204]:
raise ooi.api.base.exception_from_response(response)
return []

View File

@ -123,7 +123,8 @@ class OCCIMiddleware(object):
self.resources["compute"] = self._create_resource(
ooi.api.compute.Controller)
self.mapper.resource("server", "compute",
controller=self.resources["compute"])
controller=self.resources["compute"],
collection={"delete": "DELETE"})
@webob.dec.wsgify(RequestClass=Request)
def __call__(self, req):