| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- # Copyright 2020 Cloudbase Solutions Srl
- # All Rights Reserved.
- from oslo_log import log as logging
- from webob import exc
- from coriolis import exception
- from coriolis.api.v1.views import service_view
- from coriolis.api import wsgi as api_wsgi
- from coriolis.policies import services as service_policies
- from coriolis.services import api
- LOG = logging.getLogger(__name__)
- class ServiceController(api_wsgi.Controller):
- def __init__(self):
- self._service_api = api.API()
- super(ServiceController, self).__init__()
- def show(self, req, id):
- context = req.environ["coriolis.context"]
- context.can(service_policies.get_services_policy_label("show"))
- service = self._service_api.get_service(context, id)
- if not service:
- raise exc.HTTPNotFound()
- return service_view.single(req, service)
- def index(self, req):
- context = req.environ["coriolis.context"]
- context.can(service_policies.get_services_policy_label("list"))
- return service_view.collection(
- req, self._service_api.get_services(context))
- def _validate_create_body(self, body):
- try:
- service = body["service"]
- host = service["host"]
- binary = service["binary"]
- topic = service.get("topic")
- mapped_regions = service.get('mapped_regions', [])
- enabled = service.get("enabled", True)
- return host, binary, topic, mapped_regions, enabled
- except Exception as ex:
- LOG.exception(ex)
- if hasattr(ex, "message"):
- msg = ex.message
- else:
- msg = str(ex)
- raise exception.InvalidInput(msg)
- def create(self, req, body):
- context = req.environ["coriolis.context"]
- context.can(service_policies.get_services_policy_label("create"))
- (host, binary, topic, mapped_regions, enabled) = (
- self._validate_create_body(body))
- return service_view.single(req, self._service_api.create(
- context, host=host, binary=binary, topic=topic,
- mapped_regions=mapped_regions, enabled=enabled,
- # NOTE: providers and specs should be auto-discovered later:
- providers={}, specs={}))
- def _validate_update_body(self, body):
- try:
- service = body["service"]
- return {k: service[k] for k in service.keys() & {
- "enabled", "mapped_regions"}}
- except Exception as ex:
- LOG.exception(ex)
- if hasattr(ex, "message"):
- msg = ex.message
- else:
- msg = str(ex)
- raise exception.InvalidInput(msg)
- def update(self, req, id, body):
- context = req.environ["coriolis.context"]
- context.can(service_policies.get_services_policy_label("update"))
- updated_values = self._validate_update_body(body)
- return service_view.single(req, self._service_api.update(
- req.environ['coriolis.context'], id, updated_values))
- def delete(self, req, id):
- context = req.environ["coriolis.context"]
- context.can(service_policies.get_services_policy_label("delete"))
- try:
- self._service_api.delete(req.environ['coriolis.context'], id)
- raise exc.HTTPNoContent()
- except exception.NotFound as ex:
- raise exc.HTTPNotFound(explanation=ex.msg)
- def create_resource():
- return api_wsgi.Resource(ServiceController())
|