replica_tasks_executions.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. # Copyright 2016 Cloudbase Solutions Srl
  2. # All Rights Reserved.
  3. from webob import exc
  4. from coriolis.api.v1.views import replica_tasks_execution_view
  5. from coriolis.api import wsgi as api_wsgi
  6. from coriolis import exception
  7. from coriolis.replica_tasks_executions import api
  8. class ReplicaTasksExecutionController(api_wsgi.Controller):
  9. def __init__(self):
  10. self._replica_tasks_execution_api = api.API()
  11. super(ReplicaTasksExecutionController, self).__init__()
  12. def show(self, req, replica_id, id):
  13. execution = self._replica_tasks_execution_api.get_execution(
  14. req.environ["coriolis.context"], replica_id, id)
  15. if not execution:
  16. raise exc.HTTPNotFound()
  17. return replica_tasks_execution_view.single(req, execution)
  18. def index(self, req, replica_id):
  19. return replica_tasks_execution_view.collection(
  20. req, self._replica_tasks_execution_api.get_executions(
  21. req.environ['coriolis.context'], replica_id,
  22. include_tasks=False))
  23. def detail(self, req, replica_id):
  24. return replica_tasks_execution_view.collection(
  25. req, self._replica_tasks_execution_api.get_executions(
  26. req.environ['coriolis.context'], replica_id,
  27. include_tasks=True))
  28. def create(self, req, replica_id, body):
  29. # TODO(alexpilotti): validate body
  30. execution_body = body.get("execution", {})
  31. shutdown_instances = execution_body.get("shutdown_instances", False)
  32. return replica_tasks_execution_view.single(
  33. req, self._replica_tasks_execution_api.create(
  34. req.environ['coriolis.context'], replica_id,
  35. shutdown_instances))
  36. def delete(self, req, replica_id, id):
  37. try:
  38. self._replica_tasks_execution_api.delete(
  39. req.environ['coriolis.context'], replica_id, id)
  40. raise exc.HTTPNoContent()
  41. except exception.NotFound as ex:
  42. raise exc.HTTPNotFound(explanation=ex.msg)
  43. def create_resource():
  44. return api_wsgi.Resource(ReplicaTasksExecutionController())