From b7cedd85fba0c898dcb2835036b2f33f42871d25 Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Mon, 12 Apr 2021 15:04:15 +0200 Subject: [PATCH] support leadership name in extra --- doc/variable/leadership.md | 8 ++-- src/rougail/template/base.py | 8 ++-- .../60extra_group_name/00-base.xml | 19 ++++++++ .../60extra_group_name/__init__.py | 0 .../extra_dirs/extra/00-base.xml | 19 ++++++++ .../60extra_group_name/makedict/after.json | 48 +++++++++++++++++++ .../60extra_group_name/makedict/base.json | 16 +++++++ .../60extra_group_name/makedict/before.json | 48 +++++++++++++++++++ .../60extra_group_name/result/etc/mailname | 11 +++++ .../60extra_group_name/result/etc/mailname2 | 11 +++++ .../result/tmpfiles.d/rougail.conf | 4 ++ .../60extra_group_name/tiramisu/base.py | 37 ++++++++++++++ .../60extra_group_name/tmpl/mailname | 35 ++++++++++++++ .../60extra_group_name/tmpl/mailname2 | 33 +++++++++++++ 14 files changed, 290 insertions(+), 7 deletions(-) create mode 100644 tests/dictionaries/60extra_group_name/00-base.xml create mode 100644 tests/dictionaries/60extra_group_name/__init__.py create mode 100644 tests/dictionaries/60extra_group_name/extra_dirs/extra/00-base.xml create mode 100644 tests/dictionaries/60extra_group_name/makedict/after.json create mode 100644 tests/dictionaries/60extra_group_name/makedict/base.json create mode 100644 tests/dictionaries/60extra_group_name/makedict/before.json create mode 100644 tests/dictionaries/60extra_group_name/result/etc/mailname create mode 100644 tests/dictionaries/60extra_group_name/result/etc/mailname2 create mode 100644 tests/dictionaries/60extra_group_name/result/tmpfiles.d/rougail.conf create mode 100644 tests/dictionaries/60extra_group_name/tiramisu/base.py create mode 100644 tests/dictionaries/60extra_group_name/tmpl/mailname create mode 100644 tests/dictionaries/60extra_group_name/tmpl/mailname2 diff --git a/doc/variable/leadership.md b/doc/variable/leadership.md index 1e4ca5cd..2a2cf072 100644 --- a/doc/variable/leadership.md +++ b/doc/variable/leadership.md @@ -74,15 +74,15 @@ Voici un exemple de définition d'une variable meneuse et de deux variables mene - example.family.follower1 - example.family.follower2 + follower1 + follower2 ``` -Le chemin de la variable meneuse est traditionnel, par contre le chemin des variables suiveuses n'est pas le chemin définitif de la variable. +Le chemin de la variable meneuse est traditionnel, par contre le chemin des variables suiveuses est le chemin relatif de la variable. -Le chemin d'une variable suiveuse est normalement "example.family.leader.follower1" mais la variable n'est pas encore une variable suiveuse à ce moment là du traitement. C'est pour cela qu'il ne faut, uniquement dans les groupes, mettre le nom de la variable meneuse dans le chemin. +Le chemin d'une variable suiveuse est normalement "example.family.leader.follower1" mais la variable n'est pas encore une variable suiveuse à ce moment là du traitement. C'est pour cela qu'il ne faut, uniquement dans les groupes, mettre le nom de la variable suiveuse. ## Ajout d'une nouvelle variable suiveuse diff --git a/src/rougail/template/base.py b/src/rougail/template/base.py index 9b335b48..edcffaae 100644 --- a/src/rougail/template/base.py +++ b/src/rougail/template/base.py @@ -122,10 +122,11 @@ class RougailLeader: For examples: %%leader, %%leader[0].follower1 """ def __init__(self, + leader_name, value, ) -> None: self._value = value - self._follower = {} + self._follower = {leader_name: value} def __getitem__(self, index): """Get a leader.follower at requested index. @@ -393,8 +394,9 @@ class RougailBaseTemplate: if await option.option.isleadership(): for idx, suboption in enumerate(await option.list('all')): if idx == 0: - leader = RougailLeader(await suboption.value.get()) leader_name = await suboption.option.name() + leader = RougailLeader(leader_name, await suboption.value.get()) + leadership_name = await option.option.name() if is_variable_namespace: self.rougail_variables_dict[await suboption.option.name()] = leader else: @@ -402,7 +404,7 @@ class RougailBaseTemplate: await suboption.option.name(), await suboption.option.path(), ) - variables[leader_name] = leader + variables[leadership_name] = leader else: if is_service_namespace == 'root': new_is_service_namespace = 'service_name' diff --git a/tests/dictionaries/60extra_group_name/00-base.xml b/tests/dictionaries/60extra_group_name/00-base.xml new file mode 100644 index 00000000..268c2024 --- /dev/null +++ b/tests/dictionaries/60extra_group_name/00-base.xml @@ -0,0 +1,19 @@ + + + + + /etc/mailname + /etc/mailname2 + + + + + + + + + diff --git a/tests/dictionaries/60extra_group_name/__init__.py b/tests/dictionaries/60extra_group_name/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/dictionaries/60extra_group_name/extra_dirs/extra/00-base.xml b/tests/dictionaries/60extra_group_name/extra_dirs/extra/00-base.xml new file mode 100644 index 00000000..6a507abe --- /dev/null +++ b/tests/dictionaries/60extra_group_name/extra_dirs/extra/00-base.xml @@ -0,0 +1,19 @@ + + + + + + + test + + + pre + + + + + + mode + + + diff --git a/tests/dictionaries/60extra_group_name/makedict/after.json b/tests/dictionaries/60extra_group_name/makedict/after.json new file mode 100644 index 00000000..706146a9 --- /dev/null +++ b/tests/dictionaries/60extra_group_name/makedict/after.json @@ -0,0 +1,48 @@ +{ + "rougail.general.mode_conteneur_actif": { + "owner": "default", + "value": "non" + }, + "rougail.general.activer_ejabberd": { + "owner": "default", + "value": "non" + }, + "extra.ejabberd.new_name.description": { + "owner": "default", + "value": [ + "test" + ] + }, + "extra.ejabberd.new_name.mode": { + "owner": [ + "default" + ], + "value": [ + "pre" + ] + }, + "services.test.files.mailname.name": { + "owner": "default", + "value": "/etc/mailname" + }, + "services.test.files.mailname.activate": { + "owner": "default", + "value": true + }, + "services.test.files.mailname2.name": { + "owner": "default", + "value": "/etc/mailname2" + }, + "services.test.files.mailname2.activate": { + "owner": "default", + "value": true + }, + "services.test.activate": { + "owner": "default", + "value": true + }, + "services.test.manage": { + "owner": "default", + "value": true + } +} diff --git a/tests/dictionaries/60extra_group_name/makedict/base.json b/tests/dictionaries/60extra_group_name/makedict/base.json new file mode 100644 index 00000000..5e9f4d0f --- /dev/null +++ b/tests/dictionaries/60extra_group_name/makedict/base.json @@ -0,0 +1,16 @@ +{ + "rougail.general.mode_conteneur_actif": "non", + "rougail.general.activer_ejabberd": "non", + "extra.ejabberd.new_name.description": [ + { + "extra.ejabberd.new_name.description": "test", + "extra.ejabberd.new_name.mode": "pre" + } + ], + "services.test.files.mailname.name": "/etc/mailname", + "services.test.files.mailname.activate": true, + "services.test.files.mailname2.name": "/etc/mailname2", + "services.test.files.mailname2.activate": true, + "services.test.activate": true, + "services.test.manage": true +} diff --git a/tests/dictionaries/60extra_group_name/makedict/before.json b/tests/dictionaries/60extra_group_name/makedict/before.json new file mode 100644 index 00000000..706146a9 --- /dev/null +++ b/tests/dictionaries/60extra_group_name/makedict/before.json @@ -0,0 +1,48 @@ +{ + "rougail.general.mode_conteneur_actif": { + "owner": "default", + "value": "non" + }, + "rougail.general.activer_ejabberd": { + "owner": "default", + "value": "non" + }, + "extra.ejabberd.new_name.description": { + "owner": "default", + "value": [ + "test" + ] + }, + "extra.ejabberd.new_name.mode": { + "owner": [ + "default" + ], + "value": [ + "pre" + ] + }, + "services.test.files.mailname.name": { + "owner": "default", + "value": "/etc/mailname" + }, + "services.test.files.mailname.activate": { + "owner": "default", + "value": true + }, + "services.test.files.mailname2.name": { + "owner": "default", + "value": "/etc/mailname2" + }, + "services.test.files.mailname2.activate": { + "owner": "default", + "value": true + }, + "services.test.activate": { + "owner": "default", + "value": true + }, + "services.test.manage": { + "owner": "default", + "value": true + } +} diff --git a/tests/dictionaries/60extra_group_name/result/etc/mailname b/tests/dictionaries/60extra_group_name/result/etc/mailname new file mode 100644 index 00000000..dc34cc5b --- /dev/null +++ b/tests/dictionaries/60extra_group_name/result/etc/mailname @@ -0,0 +1,11 @@ +contain test +1 +leader: test +follower: pre +supeq +sup +diff +testpre +pretest +leader2: test +follower2: pre diff --git a/tests/dictionaries/60extra_group_name/result/etc/mailname2 b/tests/dictionaries/60extra_group_name/result/etc/mailname2 new file mode 100644 index 00000000..dc34cc5b --- /dev/null +++ b/tests/dictionaries/60extra_group_name/result/etc/mailname2 @@ -0,0 +1,11 @@ +contain test +1 +leader: test +follower: pre +supeq +sup +diff +testpre +pretest +leader2: test +follower2: pre diff --git a/tests/dictionaries/60extra_group_name/result/tmpfiles.d/rougail.conf b/tests/dictionaries/60extra_group_name/result/tmpfiles.d/rougail.conf new file mode 100644 index 00000000..7a8d00f4 --- /dev/null +++ b/tests/dictionaries/60extra_group_name/result/tmpfiles.d/rougail.conf @@ -0,0 +1,4 @@ +C /etc/mailname 0644 root root - /usr/local/lib/etc/mailname +z /etc/mailname - - - - - +C /etc/mailname2 0644 root root - /usr/local/lib/etc/mailname2 +z /etc/mailname2 - - - - - diff --git a/tests/dictionaries/60extra_group_name/tiramisu/base.py b/tests/dictionaries/60extra_group_name/tiramisu/base.py new file mode 100644 index 00000000..13ce8ee0 --- /dev/null +++ b/tests/dictionaries/60extra_group_name/tiramisu/base.py @@ -0,0 +1,37 @@ +from importlib.machinery import SourceFileLoader +from importlib.util import spec_from_loader, module_from_spec +loader = SourceFileLoader('func', 'tests/dictionaries/../eosfunc/test.py') +spec = spec_from_loader(loader.name, loader) +func = module_from_spec(spec) +loader.exec_module(func) +for key, value in dict(locals()).items(): + if key != ['SourceFileLoader', 'func']: + setattr(func, key, value) +try: + from tiramisu3 import * +except: + from tiramisu import * +option_3 = StrOption(name="mode_conteneur_actif", doc="No change", default="non", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "mandatory", "normal"})) +option_4 = StrOption(name="activer_ejabberd", doc="No change", default="non", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "mandatory", "normal"})) +option_2 = OptionDescription(name="general", doc="général", children=[option_3, option_4], properties=frozenset({"normal"})) +option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2]) +option_8 = StrOption(name="description", doc="description", multi=True, default=['test'], properties=frozenset({"mandatory"})) +option_9 = StrOption(name="mode", doc="mode", multi=True, default_multi="pre", properties=frozenset({"mandatory", "normal"})) +option_7 = Leadership(name="new_name", doc="new_name", children=[option_8, option_9], properties=frozenset({"normal"})) +option_6 = OptionDescription(name="ejabberd", doc="ejabberd", children=[option_7], properties=frozenset({"normal"})) +option_5 = OptionDescription(name="extra", doc="extra", children=[option_6]) +option_14 = FilenameOption(name="name", doc="name", default="/etc/mailname") +option_15 = BoolOption(name="activate", doc="activate", default=True) +option_13 = OptionDescription(name="mailname", doc="mailname", children=[option_14, option_15]) +option_13.impl_set_information('source', "mailname") +option_17 = FilenameOption(name="name", doc="name", default="/etc/mailname2") +option_18 = BoolOption(name="activate", doc="activate", default=True) +option_16 = OptionDescription(name="mailname2", doc="mailname2", children=[option_17, option_18]) +option_16.impl_set_information('engine', "jinja2") +option_16.impl_set_information('source', "mailname2") +option_12 = OptionDescription(name="files", doc="files", children=[option_13, option_16]) +option_19 = BoolOption(name="activate", doc="activate", default=True) +option_20 = BoolOption(name="manage", doc="manage", default=True) +option_11 = OptionDescription(name="test", doc="test", children=[option_12, option_19, option_20]) +option_10 = OptionDescription(name="services", doc="services", children=[option_11], properties=frozenset({"hidden"})) +option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[option_1, option_5, option_10]) diff --git a/tests/dictionaries/60extra_group_name/tmpl/mailname b/tests/dictionaries/60extra_group_name/tmpl/mailname new file mode 100644 index 00000000..23cbe10e --- /dev/null +++ b/tests/dictionaries/60extra_group_name/tmpl/mailname @@ -0,0 +1,35 @@ +%if 'test' in %%extra.ejabberd.new_name +contain test +%end if +%%len(%%extra.ejabberd.new_name) +%if 'a' in %%extra.ejabberd.new_name +contain a +%end if +%for %%description in %%extra.ejabberd.new_name +leader: %%description +follower: %%description.mode +%if %%description <= %%description.mode +infeq +%end if +%if %%description >= %%description.mode +supeq +%end if +%if %%description < %%description.mode +inf +%end if +%if %%description > %%description.mode +sup +%end if +%if %%description == %%description.mode +eq +%end if +%if %%description != %%description.mode +diff +%end if +%set %%var = %%description + %%description.mode +%%var +%set %%var = %%description.mode + %%description +%%var +%end for +leader2: %%extra.ejabberd.new_name[0].description +follower2: %%extra.ejabberd.new_name[0].mode diff --git a/tests/dictionaries/60extra_group_name/tmpl/mailname2 b/tests/dictionaries/60extra_group_name/tmpl/mailname2 new file mode 100644 index 00000000..4860700d --- /dev/null +++ b/tests/dictionaries/60extra_group_name/tmpl/mailname2 @@ -0,0 +1,33 @@ +{% if 'test' in extra.ejabberd.new_name -%} +contain test +{% endif -%} +{{ extra.ejabberd.new_name |length }} +{% if 'a' in extra.ejabberd.new_name -%} +contain a +{% endif -%} +{% for description in extra.ejabberd.new_name -%} +leader: {{ description }} +follower: {{ description.mode }} +{% if description <= description.mode -%} +infeq +{% endif -%} +{% if description >= description.mode -%} +supeq +{% endif -%} +{% if description < description.mode -%} +inf +{% endif -%} +{% if description > description.mode -%} +sup +{% endif -%} +{% if description == description.mode -%} +eq +{% endif -%} +{% if description != description.mode -%} +diff +{% endif -%} +{{ description + description.mode }} +{{ description.mode + description }} +{% endfor -%} +leader2: {{ extra.ejabberd.new_name[0].description }} +follower2: {{ extra.ejabberd.new_name[0].mode }}