murano-agent/portas/portas/api/v1/environments.py

93 lines
2.8 KiB
Python

from webob import exc
from portas.api.v1 import get_env_status
from portas.db.session import get_session
from portas.db.models import Environment
from portas.openstack.common import wsgi
from portas.openstack.common import log as logging
log = logging.getLogger(__name__)
class Controller(object):
def index(self, request):
log.debug(_('Environments:List'))
#Only environments from same tenant as users should be shown
filters = {'tenant_id': request.context.tenant}
session = get_session()
environments = session.query(Environment).filter_by(**filters)
environments = [env.to_dict() for env in environments]
for env in environments:
env['status'] = get_env_status(env['id'], request.context.session)
return {"environments": environments}
def create(self, request, body):
log.debug(_('Environments:Create <Body {0}>'.format(body)))
#tagging environment by tenant_id for later checks
params = body.copy()
params['tenant_id'] = request.context.tenant
environment = Environment()
environment.update(params)
session = get_session()
with session.begin():
session.add(environment)
#saving environment as Json to itself
environment.update({"description": environment.to_dict()})
environment.save(session)
return environment.to_dict()
def show(self, request, environment_id):
log.debug(_('Environments:Show <Id: {0}>'.format(environment_id)))
session = get_session()
environment = session.query(Environment).get(environment_id)
if environment.tenant_id != request.context.tenant:
log.info('User is not authorized to access this tenant resources.')
raise exc.HTTPUnauthorized
env = environment.to_dict()
env['status'] = get_env_status(environment_id, request.context.session)
return env
def update(self, request, environment_id, body):
log.debug(_('Environments:Update <Id: {0}, Body: {1}>'.
format(environment_id, body)))
session = get_session()
environment = session.query(Environment).get(environment_id)
if environment.tenant_id != request.context.tenant:
log.info('User is not authorized to access this tenant resources.')
raise exc.HTTPUnauthorized
environment.update(body)
environment.save(session)
return environment.to_dict()
def delete(self, request, environment_id):
log.debug(_('Environments:Delete <Id: {0}>'.format(environment_id)))
session = get_session()
environment = session.query(Environment).get(environment_id)
with session.begin():
session.delete(environment)
return None
def create_resource():
return wsgi.Resource(Controller())