diff --git a/src/rougail/annotator/fill.py b/src/rougail/annotator/fill.py
index 0dd701a9..8ee3bac7 100644
--- a/src/rougail/annotator/fill.py
+++ b/src/rougail/annotator/fill.py
@@ -32,7 +32,7 @@ from rougail.annotator.target import TargetAnnotator
from rougail.annotator.param import ParamAnnotator
-CALC_MULTI = ('calc_value', 'calc_list', 'get_range', 'calc_val_first_value', 'unbound_filename', 'zone_information')
+CALC_MULTI = ('calc_value', 'calc_list', 'get_range', 'calc_val_first_value', 'unbound_filename', 'zone_information', 'get_certificates')
class Annotator(TargetAnnotator, ParamAnnotator):
diff --git a/src/rougail/data/rougail.dtd b/src/rougail/data/rougail.dtd
index ecb107e7..6a8710f0 100644
--- a/src/rougail/data/rougail.dtd
+++ b/src/rougail/data/rougail.dtd
@@ -53,7 +53,7 @@
-
+
diff --git a/src/rougail/path.py b/src/rougail/path.py
index 3a44e720..a4a38762 100644
--- a/src/rougail/path.py
+++ b/src/rougail/path.py
@@ -174,6 +174,7 @@ class Path:
)
namespace = dico['variableobj'].namespace
if namespace not in [self.variable_namespace, 'services'] and \
+ current_namespace != 'services' and \
current_namespace != namespace:
msg = _(f'A variable located in the "{namespace}" namespace shall not be used '
f'in the "{current_namespace}" namespace')
diff --git a/src/rougail/template/systemd.py b/src/rougail/template/systemd.py
index c45f6735..11b985b4 100644
--- a/src/rougail/template/systemd.py
+++ b/src/rougail/template/systemd.py
@@ -186,7 +186,7 @@ class RougailSystemdTemplate(RougailBaseTemplate):
self.ip_per_service = None
def post_instance(self):
- destfile = '/tmpfiles.d/rougail.conf'
+ destfile = '/tmpfiles.d/0rougail.conf'
destfilename = join(self.destinations_dir, destfile[1:])
makedirs(dirname(destfilename), exist_ok=True)
self.log.info(_(f"creole processing: '{destfilename}'"))
diff --git a/tests/dictionaries/01base_file/result/tmpfiles.d/rougail.conf b/tests/dictionaries/01base_file/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/01base_file/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/01base_file/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/01base_file_include/result/tmpfiles.d/rougail.conf b/tests/dictionaries/01base_file_include/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/01base_file_include/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/01base_file_include/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/01base_file_include_content/result/tmpfiles.d/rougail.conf b/tests/dictionaries/01base_file_include_content/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/01base_file_include_content/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/01base_file_include_content/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/01base_file_include_name/result/tmpfiles.d/rougail.conf b/tests/dictionaries/01base_file_include_name/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/01base_file_include_name/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/01base_file_include_name/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/01base_file_patch/result/tmpfiles.d/rougail.conf b/tests/dictionaries/01base_file_patch/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/01base_file_patch/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/01base_file_patch/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/01base_file_utfchar/result/tmpfiles.d/rougail.conf b/tests/dictionaries/01base_file_utfchar/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/01base_file_utfchar/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/01base_file_utfchar/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/11disabled_if_in_filelist/result/tmpfiles.d/rougail.conf b/tests/dictionaries/11disabled_if_in_filelist/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/11disabled_if_in_filelist/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/11disabled_if_in_filelist/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/11disabled_if_in_filelist_disabled/result/tmpfiles.d/rougail.conf b/tests/dictionaries/11disabled_if_in_filelist_disabled/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/11disabled_if_in_filelist_disabled/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/11disabled_if_in_filelist_disabled/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/20notemplating/result/tmpfiles.d/rougail.conf b/tests/dictionaries/20notemplating/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/20notemplating/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/20notemplating/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/20override/result/tmpfiles.d/rougail.conf b/tests/dictionaries/20override/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/20override/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/20override/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/20override_no_templating/result/tmpfiles.d/rougail.conf b/tests/dictionaries/20override_no_templating/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/20override_no_templating/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/20override_no_templating/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/20override_source/result/tmpfiles.d/rougail.conf b/tests/dictionaries/20override_source/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/20override_source/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/20override_source/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/40ifin_leadershipauto/result/tmpfiles.d/rougail.conf b/tests/dictionaries/40ifin_leadershipauto/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/40ifin_leadershipauto/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/40ifin_leadershipauto/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/40ifin_leadershipauto_follower/result/tmpfiles.d/rougail.conf b/tests/dictionaries/40ifin_leadershipauto_follower/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/40ifin_leadershipauto_follower/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/40ifin_leadershipauto_follower/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/45extra_without_family/result/tmpfiles.d/rougail.conf b/tests/dictionaries/45extra_without_family/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/45extra_without_family/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/45extra_without_family/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/60extra_leadership/result/tmpfiles.d/rougail.conf b/tests/dictionaries/60extra_leadership/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/60extra_leadership/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/60extra_leadership/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/60extra_leadership_name/result/tmpfiles.d/rougail.conf b/tests/dictionaries/60extra_leadership_name/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/60extra_leadership_name/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/60extra_leadership_name/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/60extra_leadership_valid_enum/result/tmpfiles.d/rougail.conf b/tests/dictionaries/60extra_leadership_valid_enum/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/60extra_leadership_valid_enum/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/60extra_leadership_valid_enum/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/70container_files/result/tmpfiles.d/rougail.conf b/tests/dictionaries/70container_files/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/70container_files/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/70container_files/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/70container_files_symlink_multi/result/tmpfiles.d/rougail.conf b/tests/dictionaries/70container_files_symlink_multi/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/70container_files_symlink_multi/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/70container_files_symlink_multi/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/70container_files_symlink_multi_variable/result/tmpfiles.d/rougail.conf b/tests/dictionaries/70container_files_symlink_multi_variable/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/70container_files_symlink_multi_variable/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/70container_files_symlink_multi_variable/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/70container_files_symlink_variable/result/tmpfiles.d/rougail.conf b/tests/dictionaries/70container_files_symlink_variable/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/70container_files_symlink_variable/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/70container_files_symlink_variable/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/70service_disabled/result/tmpfiles.d/rougail.conf b/tests/dictionaries/70service_disabled/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/70service_disabled/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/70service_disabled/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/70service_engine/result/tmpfiles.d/rougail.conf b/tests/dictionaries/70service_engine/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/70service_engine/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/70service_engine/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/70service_engine_dash/result/tmpfiles.d/rougail.conf b/tests/dictionaries/70service_engine_dash/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/70service_engine_dash/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/70service_engine_dash/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/70service_mount/result/tmpfiles.d/rougail.conf b/tests/dictionaries/70service_mount/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/70service_mount/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/70service_mount/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/70service_servicelist_extra/00-base.xml b/tests/dictionaries/70service_servicelist_extra/00-base.xml
new file mode 100644
index 00000000..b503d8d6
--- /dev/null
+++ b/tests/dictionaries/70service_servicelist_extra/00-base.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/tests/dictionaries/70service_servicelist_file/result/tmpfiles.d/rougail.conf b/tests/dictionaries/70service_servicelist_extra/__init__.py
similarity index 100%
rename from tests/dictionaries/70service_servicelist_file/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/70service_servicelist_extra/__init__.py
diff --git a/tests/dictionaries/70service_servicelist_extra/extra_dirs/extra/00-base.xml b/tests/dictionaries/70service_servicelist_extra/extra_dirs/extra/00-base.xml
new file mode 100644
index 00000000..b5869d64
--- /dev/null
+++ b/tests/dictionaries/70service_servicelist_extra/extra_dirs/extra/00-base.xml
@@ -0,0 +1,14 @@
+
+
+
+
+ no
+
+
+
+
+ yes
+ test
+
+
+
diff --git a/tests/dictionaries/70service_servicelist_extra/makedict/after.json b/tests/dictionaries/70service_servicelist_extra/makedict/after.json
new file mode 100644
index 00000000..2e714b70
--- /dev/null
+++ b/tests/dictionaries/70service_servicelist_extra/makedict/after.json
@@ -0,0 +1,14 @@
+{
+ "extra.condition": {
+ "owner": "default",
+ "value": "no"
+ },
+ "services.test.activate": {
+ "owner": "default",
+ "value": true
+ },
+ "services.test.manage": {
+ "owner": "default",
+ "value": true
+ }
+}
diff --git a/tests/dictionaries/70service_servicelist_extra/makedict/base.json b/tests/dictionaries/70service_servicelist_extra/makedict/base.json
new file mode 100644
index 00000000..d0a40a85
--- /dev/null
+++ b/tests/dictionaries/70service_servicelist_extra/makedict/base.json
@@ -0,0 +1,5 @@
+{
+ "extra.condition": "no",
+ "services.test.activate": true,
+ "services.test.manage": true
+}
diff --git a/tests/dictionaries/70service_servicelist_extra/makedict/before.json b/tests/dictionaries/70service_servicelist_extra/makedict/before.json
new file mode 100644
index 00000000..2e714b70
--- /dev/null
+++ b/tests/dictionaries/70service_servicelist_extra/makedict/before.json
@@ -0,0 +1,14 @@
+{
+ "extra.condition": {
+ "owner": "default",
+ "value": "no"
+ },
+ "services.test.activate": {
+ "owner": "default",
+ "value": true
+ },
+ "services.test.manage": {
+ "owner": "default",
+ "value": true
+ }
+}
diff --git a/tests/dictionaries/70service_servicelist_extra/tiramisu/base.py b/tests/dictionaries/70service_servicelist_extra/tiramisu/base.py
new file mode 100644
index 00000000..d6cc441b
--- /dev/null
+++ b/tests/dictionaries/70service_servicelist_extra/tiramisu/base.py
@@ -0,0 +1,20 @@
+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_2 = StrOption(name="condition", doc="condition", default="no", properties=frozenset({"mandatory", "normal"}))
+option_1 = OptionDescription(name="extra", doc="extra", children=[option_2])
+option_5 = BoolOption(name="activate", doc="activate", default=Calculation(func.calc_value, Params((ParamValue(False)), kwargs={'default': ParamValue(True), 'condition_0': ParamOption(option_2, notraisepropertyerror=True), 'expected_0': ParamValue("yes")})))
+option_6 = BoolOption(name="manage", doc="manage", default=True)
+option_4 = OptionDescription(name="test", doc="test", children=[option_5, option_6])
+option_3 = OptionDescription(name="services", doc="services", children=[option_4], properties=frozenset({"hidden"}))
+option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[option_1, option_3])
diff --git a/tests/dictionaries/70service_servicelist_ip/result/tmpfiles.d/rougail.conf b/tests/dictionaries/70service_servicelist_file/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/70service_servicelist_ip/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/70service_servicelist_file/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/70service_target/result/tmpfiles.d/rougail.conf b/tests/dictionaries/70service_servicelist_ip/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/70service_target/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/70service_servicelist_ip/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/70service_target_engine/result/tmpfiles.d/rougail.conf b/tests/dictionaries/70service_target/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/70service_target_engine/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/70service_target/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/70services_ip/result/tmpfiles.d/rougail.conf b/tests/dictionaries/70service_target_engine/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/70services_ip/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/70service_target_engine/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/70services_ip_cidr/result/tmpfiles.d/rougail.conf b/tests/dictionaries/70services_ip/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/70services_ip_cidr/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/70services_ip/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/70services_ip_disabled/result/tmpfiles.d/rougail.conf b/tests/dictionaries/70services_ip_cidr/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/70services_ip_disabled/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/70services_ip_cidr/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/70services_ip_iplist/result/tmpfiles.d/rougail.conf b/tests/dictionaries/70services_ip_disabled/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/70services_ip_iplist/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/70services_ip_disabled/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/70services_ip_iplist2/result/tmpfiles.d/rougail.conf b/tests/dictionaries/70services_ip_iplist/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/70services_ip_iplist2/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/70services_ip_iplist/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/70services_ip_leadership/result/tmpfiles.d/rougail.conf b/tests/dictionaries/70services_ip_iplist2/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/70services_ip_leadership/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/70services_ip_iplist2/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/70services_ip_multi/result/tmpfiles.d/rougail.conf b/tests/dictionaries/70services_ip_leadership/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/70services_ip_multi/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/70services_ip_leadership/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/70services_ip_network/result/tmpfiles.d/rougail.conf b/tests/dictionaries/70services_ip_multi/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/70services_ip_network/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/70services_ip_multi/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/70services_ip_not_mandatory/result/tmpfiles.d/rougail.conf b/tests/dictionaries/70services_ip_network/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/70services_ip_not_mandatory/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/70services_ip_network/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/70services_ip_twice/result/tmpfiles.d/rougail.conf b/tests/dictionaries/70services_ip_not_mandatory/result/tmpfiles.d/0rougail.conf
similarity index 100%
rename from tests/dictionaries/70services_ip_twice/result/tmpfiles.d/rougail.conf
rename to tests/dictionaries/70services_ip_not_mandatory/result/tmpfiles.d/0rougail.conf
diff --git a/tests/dictionaries/70services_ip_twice/result/tmpfiles.d/0rougail.conf b/tests/dictionaries/70services_ip_twice/result/tmpfiles.d/0rougail.conf
new file mode 100644
index 00000000..e69de29b