risotto/src/risotto/services/server/server.py

66 lines
3.0 KiB
Python
Raw Normal View History

2019-12-19 17:24:20 +01:00
from typing import Dict
2019-12-02 14:22:40 +01:00
from ...controller import Controller
from ...register import register
2019-12-19 17:24:20 +01:00
from ...context import Context
2019-12-20 10:58:12 +01:00
from ...utils import _
2019-12-02 14:22:40 +01:00
class Risotto(Controller):
2020-01-13 19:53:09 +01:00
@register('v1.server.list')
2019-12-19 17:24:20 +01:00
async def server_list(self,
risotto_context: Context) -> Dict:
sql = '''
2019-12-20 10:58:12 +01:00
SELECT ServerId as server_id, ServerName as server_name, ServerDescription as server_description, ServerServermodelId as server_servermodel_id
FROM Server
2019-12-19 17:24:20 +01:00
'''
servers = await risotto_context.connection.fetch(sql)
return [dict(r) for r in servers]
2020-01-13 19:53:09 +01:00
@register('v1.server.create', 'v1.server.created')
2019-12-19 17:24:20 +01:00
async def server_create(self,
risotto_context: Context,
2019-12-20 10:58:12 +01:00
server_name: str,
server_description: str,
2020-01-13 19:53:09 +01:00
servermodel_name: str,
source_name: str,
release_distribution: str) -> Dict:
servermodel = await self.call('v1.servermodel.describe',
risotto_context,
servermodel_name=servermodel_name,
source_name=source_name,
release_distribution=release_distribution)
2019-12-19 17:24:20 +01:00
server_insert = """INSERT INTO Server(ServerName, ServerDescription, ServerServermodelId)
VALUES ($1,$2,$3)
RETURNING ServerId
"""
server_id = await risotto_context.connection.fetchval(server_insert,
server_name,
server_description,
2020-01-13 19:53:09 +01:00
servermodel['servermodel_id'])
await self.call('v1.user.role.create',
2020-01-14 14:11:41 +01:00
risotto_context,
user_login=risotto_context.username,
role_name='server_rw',
role_attribute='Server.ServerName',
role_attribute_value=server_name)
2019-12-19 17:24:20 +01:00
return {'server_id': server_id,
'server_name': server_name,
'server_description': server_description,
2020-01-13 19:53:09 +01:00
'server_servermodel_id': servermodel['servermodel_id']}
2019-12-20 10:58:12 +01:00
2020-01-13 19:53:09 +01:00
@register('v1.server.describe')
2019-12-26 15:33:51 +01:00
async def server_describe(self,
risotto_context: Context,
server_name: str) -> Dict:
2019-12-20 10:58:12 +01:00
sql = '''
SELECT ServerId as server_id, ServerName as server_name, ServerDescription as server_description, ServerServermodelId as server_servermodel_id
FROM Server
WHERE ServerName = $1
'''
server = await risotto_context.connection.fetchrow(sql,
server_name)
if not server:
raise Exception(_(f'unable to find server with name {server_name}'))
return dict(server)