Handle trailing slash for delete all operation.

This commit is contained in:
Pablo Orviz 2015-04-10 13:42:27 +02:00
parent cdf535a644
commit bfbe5c08ec
2 changed files with 30 additions and 24 deletions

View File

@ -34,6 +34,27 @@ class Controller(ooi.api.base.Controller):
return occi_compute_resources return occi_compute_resources
def _get_compute_ids(self, req):
tenant_id = req.environ["keystone.token_auth"].user.project_id
req = self._get_req(req,
path="/%s/servers" % tenant_id,
method="GET")
response = req.get_response(self.app)
return [s["id"] for s in self.get_from_response(response,
"servers", [])]
def _delete(self, req, ids):
tenant_id = req.environ["keystone.token_auth"].user.project_id
for id in ids:
req = self._get_req(req,
path="/%s/servers/%s" % (tenant_id,
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 []
def index(self, req): def index(self, req):
tenant_id = req.environ["keystone.token_auth"].user.project_id tenant_id = req.environ["keystone.token_auth"].user.project_id
req = self._get_req(req, path="/%s/servers" % tenant_id) req = self._get_req(req, path="/%s/servers" % tenant_id)
@ -107,26 +128,8 @@ class Controller(ooi.api.base.Controller):
mixins=[os_tpl, res_tpl]) mixins=[os_tpl, res_tpl])
return [comp] return [comp]
def delete(self, req, id=None): def delete(self, req, id):
tenant_id = req.environ["keystone.token_auth"].user.project_id return self._delete(req, [id])
servers = [] def delete_all(self, req):
if id: return self._delete(req, self._get_compute_ids(req))
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,8 +123,11 @@ class OCCIMiddleware(object):
self.resources["compute"] = self._create_resource( self.resources["compute"] = self._create_resource(
ooi.api.compute.Controller) ooi.api.compute.Controller)
self.mapper.resource("server", "compute", self.mapper.resource("server", "compute",
controller=self.resources["compute"], controller=self.resources["compute"])
collection={"delete": "DELETE"}) self.mapper.connect("compute", "/compute/",
controller=self.resources["compute"],
action="delete_all",
conditions=dict(method=["DELETE"]))
@webob.dec.wsgify(RequestClass=Request) @webob.dec.wsgify(RequestClass=Request)
def __call__(self, req): def __call__(self, req):