support leadership name in extra
This commit is contained in:
parent
3999969aa0
commit
b7cedd85fb
14 changed files with 290 additions and 7 deletions
|
@ -74,15 +74,15 @@ Voici un exemple de définition d'une variable meneuse et de deux variables mene
|
|||
</variables>
|
||||
<constraints>
|
||||
<group leader="example.family.leader">
|
||||
<follower>example.family.follower1</follower>
|
||||
<follower>example.family.follower2</follower>
|
||||
<follower>follower1</follower>
|
||||
<follower>follower2</follower>
|
||||
</group>
|
||||
</constraints>
|
||||
```
|
||||
|
||||
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
|
||||
|
||||
|
|
|
@ -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'
|
||||
|
|
19
tests/dictionaries/60extra_group_name/00-base.xml
Normal file
19
tests/dictionaries/60extra_group_name/00-base.xml
Normal file
|
@ -0,0 +1,19 @@
|
|||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail version="0.9">
|
||||
<services>
|
||||
<service name='test'>
|
||||
<file>/etc/mailname</file>
|
||||
<file engine="jinja2">/etc/mailname2</file>
|
||||
</service>
|
||||
</services>
|
||||
<variables>
|
||||
<family name="general" description="général">
|
||||
<variable name="mode_conteneur_actif" type="string" description="No change" hidden="True">
|
||||
<value>non</value>
|
||||
</variable>
|
||||
<variable name="activer_ejabberd" type="string" description="No change" hidden="True">
|
||||
<value>non</value>
|
||||
</variable>
|
||||
</family>
|
||||
</variables>
|
||||
</rougail>
|
0
tests/dictionaries/60extra_group_name/__init__.py
Normal file
0
tests/dictionaries/60extra_group_name/__init__.py
Normal file
|
@ -0,0 +1,19 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<rougail version="0.9">
|
||||
<variables>
|
||||
<family name='ejabberd'>
|
||||
<variable name="description" type="string" multi="True">
|
||||
<value>test</value>
|
||||
</variable>
|
||||
<variable name="mode" type="string">
|
||||
<value>pre</value>
|
||||
</variable>
|
||||
</family>
|
||||
</variables>
|
||||
<constraints>
|
||||
<group leader="extra.ejabberd.description" name="new_name">
|
||||
<follower>mode</follower>
|
||||
</group>
|
||||
</constraints>
|
||||
</rougail>
|
48
tests/dictionaries/60extra_group_name/makedict/after.json
Normal file
48
tests/dictionaries/60extra_group_name/makedict/after.json
Normal file
|
@ -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
|
||||
}
|
||||
}
|
16
tests/dictionaries/60extra_group_name/makedict/base.json
Normal file
16
tests/dictionaries/60extra_group_name/makedict/base.json
Normal file
|
@ -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
|
||||
}
|
48
tests/dictionaries/60extra_group_name/makedict/before.json
Normal file
48
tests/dictionaries/60extra_group_name/makedict/before.json
Normal file
|
@ -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
|
||||
}
|
||||
}
|
11
tests/dictionaries/60extra_group_name/result/etc/mailname
Normal file
11
tests/dictionaries/60extra_group_name/result/etc/mailname
Normal file
|
@ -0,0 +1,11 @@
|
|||
contain test
|
||||
1
|
||||
leader: test
|
||||
follower: pre
|
||||
supeq
|
||||
sup
|
||||
diff
|
||||
testpre
|
||||
pretest
|
||||
leader2: test
|
||||
follower2: pre
|
11
tests/dictionaries/60extra_group_name/result/etc/mailname2
Normal file
11
tests/dictionaries/60extra_group_name/result/etc/mailname2
Normal file
|
@ -0,0 +1,11 @@
|
|||
contain test
|
||||
1
|
||||
leader: test
|
||||
follower: pre
|
||||
supeq
|
||||
sup
|
||||
diff
|
||||
testpre
|
||||
pretest
|
||||
leader2: test
|
||||
follower2: pre
|
|
@ -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 - - - - -
|
37
tests/dictionaries/60extra_group_name/tiramisu/base.py
Normal file
37
tests/dictionaries/60extra_group_name/tiramisu/base.py
Normal file
|
@ -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])
|
35
tests/dictionaries/60extra_group_name/tmpl/mailname
Normal file
35
tests/dictionaries/60extra_group_name/tmpl/mailname
Normal file
|
@ -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
|
33
tests/dictionaries/60extra_group_name/tmpl/mailname2
Normal file
33
tests/dictionaries/60extra_group_name/tmpl/mailname2
Normal file
|
@ -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 }}
|
Loading…
Reference in a new issue