66 lines
3.0 KiB
Python
66 lines
3.0 KiB
Python
from typing import Dict
|
|
|
|
from ...controller import Controller
|
|
from ...register import register
|
|
from ...context import Context
|
|
from ...utils import _
|
|
|
|
|
|
class Risotto(Controller):
|
|
@register('v1.server.list')
|
|
async def server_list(self,
|
|
risotto_context: Context) -> Dict:
|
|
sql = '''
|
|
SELECT ServerId as server_id, ServerName as server_name, ServerDescription as server_description, ServerServermodelId as server_servermodel_id
|
|
FROM Server
|
|
'''
|
|
servers = await risotto_context.connection.fetch(sql)
|
|
return [dict(r) for r in servers]
|
|
|
|
@register('v1.server.create', 'v1.server.created')
|
|
async def server_create(self,
|
|
risotto_context: Context,
|
|
server_name: str,
|
|
server_description: str,
|
|
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)
|
|
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,
|
|
servermodel['servermodel_id'])
|
|
await self.call('v1.user.role.create',
|
|
risotto_context,
|
|
user_login=risotto_context.username,
|
|
role_name='server_rw',
|
|
role_attribute='Server.ServerName',
|
|
role_attribute_value=server_name)
|
|
return {'server_id': server_id,
|
|
'server_name': server_name,
|
|
'server_description': server_description,
|
|
'server_servermodel_id': servermodel['servermodel_id']}
|
|
|
|
@register('v1.server.describe')
|
|
async def server_describe(self,
|
|
risotto_context: Context,
|
|
server_name: str) -> Dict:
|
|
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)
|