risotto/src/risotto/services/template/template.py

62 lines
2.3 KiB
Python
Raw Normal View History

2019-12-02 14:22:40 +01:00
from os import mkdir
from os.path import isdir, join
from shutil import rmtree
2019-12-20 10:58:12 +01:00
from typing import Dict
2019-12-02 14:22:40 +01:00
from rougail.template import generate
from tiramisu import Storage
2019-12-20 10:58:12 +01:00
from ...config import CONFIGURATION_DIR, TMP_DIR, get_config
2019-12-02 14:22:40 +01:00
from ...controller import Controller
from ...register import register
from ...dispatcher import dispatcher
2019-12-20 10:58:12 +01:00
from ...utils import _
2019-12-02 14:22:40 +01:00
2019-12-03 08:34:11 +01:00
2019-12-02 14:22:40 +01:00
class Risotto(Controller):
2019-12-27 15:09:38 +01:00
def __init__(self,
test: bool) -> None:
2019-12-02 14:22:40 +01:00
self.storage = Storage(engine='dictionary')
2019-12-20 10:58:12 +01:00
self.cache_root_path = join(get_config().get('cache').get('root_path'), 'servermodel')
2019-12-02 14:22:40 +01:00
2020-01-13 19:53:09 +01:00
@register('v1.template.generate')
2019-12-02 14:22:40 +01:00
async def template_get(self,
2019-12-20 10:58:12 +01:00
risotto_context,
server_name: str) -> Dict:
server = await self.call('v1.server.describe',
risotto_context,
server_name=server_name)
server_id = server['server_id']
servermodel_id = server['server_servermodel_id']
2019-12-02 14:22:40 +01:00
config_module = dispatcher.get_service('config')
server = config_module.server[server_id]
export = await server['server'].value.exportation()
if not export[0]:
raise Exception(_(f'configuration for server "{server_name}" is empty, you should deploy it first'))
2020-01-13 19:53:09 +01:00
config = meta = await server['server'].config.deepcopy(storage=self.storage)
2019-12-02 14:22:40 +01:00
while True:
try:
2020-01-13 19:53:09 +01:00
children = list(await config.config.list())
2019-12-02 14:22:40 +01:00
except:
break
if children:
config = children[0]
else:
break
configurations_dir = join(CONFIGURATION_DIR,
str(server_id))
if isdir(configurations_dir):
rmtree(configurations_dir)
mkdir(configurations_dir)
tmp_dir = join(TMP_DIR, str(server_id))
if isdir(tmp_dir):
rmtree(tmp_dir)
mkdir(tmp_dir)
2019-12-20 10:58:12 +01:00
templates_dir = join(self.cache_root_path, str(servermodel_id), 'templates')
2020-01-13 19:53:09 +01:00
await generate(config,
server['funcs_file'],
templates_dir,
tmp_dir,
configurations_dir)
2019-12-02 14:22:40 +01:00
return {'server_name': server_name,
2019-12-02 14:22:40 +01:00
'template_dir': configurations_dir}