make a library

This commit is contained in:
Emmanuel Garette 2022-03-11 18:39:32 +01:00
parent 1e9603988a
commit aa04f19806
4 changed files with 45 additions and 46 deletions

View file

@ -7,8 +7,8 @@ from secrets import token_urlsafe as _token_urlsafe
from rougail.utils import normalize_family from rougail.utils import normalize_family
from utils import multi_function, CONFIGS from risotto.utils import multi_function, CONFIGS
from x509 import gen_cert as _x509_gen_cert, gen_ca as _x509_gen_ca, gen_pub as _x509_gen_pub, has_pub as _x509_has_pub from risotto.x509 import gen_cert as _x509_gen_cert, gen_ca as _x509_gen_ca, gen_pub as _x509_gen_pub, has_pub as _x509_has_pub
# ============================================================= # =============================================================
# fork of risotto-setting/src/risotto_setting/config/config.py # fork of risotto-setting/src/risotto_setting/config/config.py

View file

@ -2,6 +2,10 @@ MULTI_FUNCTIONS = []
CONFIGS = {} CONFIGS = {}
def _(s):
return s
def multi_function(function): def multi_function(function):
global MULTI_FUNCTIONS global MULTI_FUNCTIONS
name = function.__name__ name = function.__name__

49
test.py
View file

@ -1,11 +1,12 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
from asyncio import run from asyncio import run
from os import listdir, link, makedirs from os import listdir, link, makedirs, environ
from os.path import isdir, isfile, join from os.path import isdir, isfile, join
from shutil import rmtree, copy2, copytree from shutil import rmtree, copy2, copytree
from json import load as json_load from json import load as json_load
from yaml import load, SafeLoader from yaml import load, SafeLoader
from toml import load as toml_load
from pprint import pprint from pprint import pprint
from typing import Any from typing import Any
from warnings import warn_explicit from warnings import warn_explicit
@ -15,25 +16,19 @@ from tiramisu import Config
from tiramisu.error import ValueWarning from tiramisu.error import ValueWarning
from rougail import RougailConfig, RougailConvert, RougailSystemdTemplate from rougail import RougailConfig, RougailConvert, RougailSystemdTemplate
from rougail.utils import normalize_family from rougail.utils import normalize_family
#from rougail.error import TemplateError
from utils import MULTI_FUNCTIONS, CONFIGS from risotto.utils import MULTI_FUNCTIONS, CONFIGS
DATASET_DIRECTORY = '/home/gnunux/git/risotto_cadoles/risotto-dataset/seed'
with open(environ.get('CONFIG_FILE', 'risotto.conf'), 'r') as fh:
config = toml_load(fh)
DATASET_DIRECTORY = config['directories']['dataset']
INSTALL_DIR = config['directories']['dest']
FUNCTIONS = 'funcs.py' FUNCTIONS = 'funcs.py'
CONFIG_DEST_DIR = 'configurations' CONFIG_DEST_DIR = 'configurations'
SRV_DEST_DIR = 'srv' SRV_DEST_DIR = 'srv'
INSTALL_DIR = 'installations'
# "netbox.in.gnunux.info": {"applicationservices": ["netbox", "provider-systemd-machined"],
# "informations": {"zones_name": ["gnunux"]},
# "values": {"rougail.postgresql.pg_client_server_domainname": "postgresql.in.gnunux.info",
# "rougail.redis.redis_client_server_domainname": "redis.in.gnunux.info",
# "rougail.nginx.revprox_client_server_domainname": "revprox.in.gnunux.info",
# "rougail.nginx.revprox_client_external_domainname": "in.gnunux.info"
# }
# },
with open('servers.json', 'r') as server_fh: with open('servers.json', 'r') as server_fh:
@ -147,6 +142,7 @@ async def set_linked_configuration(_linked_value: Any,
dynamic: str=None, dynamic: str=None,
leader_provider: str=None, leader_provider: str=None,
leader_value: Any=None, leader_value: Any=None,
leader_index: int=None,
): ):
if linked_value is not empty: if linked_value is not empty:
_linked_value = linked_value _linked_value = linked_value
@ -177,7 +173,7 @@ async def set_linked_configuration(_linked_value: Any,
leader_path = await config.information.get('provider:' + leader_provider, None) leader_path = await config.information.get('provider:' + leader_provider, None)
if not leader_path: if not leader_path:
await config.property.read_only() await config.property.read_only()
warn_explicit(ValueWarning(f'cannot find leader variable "{path}" in linked server "{linked_server}"'), warn_explicit(ValueWarning(f'cannot find leader variable with leader_provider "{leader_provider}" in linked server "{linked_server}"'),
ValueWarning, ValueWarning,
__file__, __file__,
2, 2,
@ -186,20 +182,22 @@ async def set_linked_configuration(_linked_value: Any,
if dynamic: if dynamic:
leader_path = leader_path.replace('{suffix}', normalize_family(dynamic)) leader_path = leader_path.replace('{suffix}', normalize_family(dynamic))
values = await config.forcepermissive.option(leader_path).value.get() values = await config.forcepermissive.option(leader_path).value.get()
if leader_value in values: if not isinstance(leader_value, list):
slave_idx = values.index(leader_value) leader_value = [leader_value]
for lv in leader_value:
if lv in values:
slave_idx = values.index(lv)
slave_option = config.forcepermissive.option(path, slave_idx) slave_option = config.forcepermissive.option(path, slave_idx)
if await slave_option.option.issubmulti(): if await slave_option.option.issubmulti():
slave_values = await slave_option.value.get() slave_values = await slave_option.value.get()
if linked_value not in slave_values: if linked_value not in slave_values:
slave_values.append(linked_value) slave_values.append(linked_value)
await slave_option.value.set(slave_values) await slave_option.value.set(slave_values)
else: else:
await slave_option.value.set(linked_value) await slave_option.value.set(linked_value)
else: else:
option = config.forcepermissive.option(path) option = config.forcepermissive.option(path, leader_index)
if await option.option.ismulti() and not isinstance(linked_value, list): if leader_index is None and await option.option.ismulti() and not isinstance(linked_value, list):
values = await option.value.get() values = await option.value.get()
if linked_value not in values: if linked_value not in values:
values.append(linked_value) values.append(linked_value)
@ -228,10 +226,7 @@ def tiramisu_display_name(kls,
def load_applications(): def load_applications():
applications = {} applications = {}
for distrib in listdir(DATASET_DIRECTORY): distrib_dir = join(DATASET_DIRECTORY, 'applicationservice')
distrib_dir = join(DATASET_DIRECTORY, distrib, 'applicationservice')
if not isdir(distrib_dir):
continue
for release in listdir(distrib_dir): for release in listdir(distrib_dir):
release_dir = join(distrib_dir, release) release_dir = join(distrib_dir, release)
if not isdir(release_dir): if not isdir(release_dir):
@ -338,7 +333,7 @@ async def build(server_name, datas, module_infos):
cfg['functions_file'] = module_info.functions_file cfg['functions_file'] = module_info.functions_file
cfg['multi_functions'] = MULTI_FUNCTIONS cfg['multi_functions'] = MULTI_FUNCTIONS
cfg['extra_dictionaries'] = module_info.extra_dictionaries cfg['extra_dictionaries'] = module_info.extra_dictionaries
cfg['extra_annotators'].append('risotto_setting.rougail') cfg['extra_annotators'].append('risotto.rougail')
optiondescription = {'set_linked': set_linked, optiondescription = {'set_linked': set_linked,
'get_linked_configuration': get_linked_configuration, 'get_linked_configuration': get_linked_configuration,
'set_linked_configuration': set_linked_configuration, 'set_linked_configuration': set_linked_configuration,
@ -427,7 +422,7 @@ async def valid_mandatories(server_name, config):
async def templates(server_name, config, cfg, srv, int_idx): async def templates(server_name, config, cfg, srv, int_idx):
values = await config.value.dict() values = await config.value.dict()
engine = RougailSystemdTemplate(config, cfg) engine = RougailSystemdTemplate(config, cfg)
# if server_name == 'roundcube.in.gnunux.info': # if server_name == 'revprox.in.silique.fr':
# print() # print()
# print(f'=== Configuration: {server_name} ===') # print(f'=== Configuration: {server_name} ===')
# pprint(values) # pprint(values)