diff --git a/src/rougail/__init__.py b/src/rougail/__init__.py
index a39d2c344..88de38061 100644
--- a/src/rougail/__init__.py
+++ b/src/rougail/__init__.py
@@ -25,7 +25,7 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
"""
from .convert import RougailConvert
-from .template import RougailTemplate
+from .template.base import RougailTemplate
from .config import RougailConfig
from .annotator import modes
diff --git a/src/rougail/annotator/service.py b/src/rougail/annotator/service.py
index 24baa545e..38736242a 100644
--- a/src/rougail/annotator/service.py
+++ b/src/rougail/annotator/service.py
@@ -30,6 +30,7 @@ from typing import Tuple
from ..i18n import _
from ..utils import normalize_family
from ..error import DictConsistencyError
+from ..config import RougailConfig
# a CreoleObjSpace's attribute has some annotations
# that shall not be present in the exported (flatened) XML
ERASED_ATTRIBUTES = ('redefine', 'exists', 'optional', 'remove_check', 'namespace',
@@ -52,6 +53,9 @@ class ServiceAnnotator:
"""
def __init__(self, objectspace):
self.objectspace = objectspace
+ self.uniq_ip = []
+ if 'network_type' not in self.objectspace.types:
+ self.objectspace.types['network_type'] = self.objectspace.types['ip_type']
if hasattr(self.objectspace.space, 'services'):
if not hasattr(self.objectspace.space.services, 'service'):
del self.objectspace.space.services
@@ -162,7 +166,7 @@ class ServiceAnnotator:
path: str,
) -> Tuple[str, str]:
# create element name, if already exists, add _xx to be uniq
- if hasattr(elt, 'source'):
+ if hasattr(elt, 'source') and elt.source:
name = elt.source
else:
name = elt.name
@@ -254,11 +258,20 @@ class ServiceAnnotator:
msg = _(f'attribute "source" is mandatory for the file "{file_.name}" '
f'"({service_name})"')
raise DictConsistencyError(msg, 34, file_.xmlfiles)
+ if not file_.source:
+ del file_.source
+ if not hasattr(file_, 'engine'):
+ file_.engine = RougailConfig['default_engine']
def _update_ip(self,
ip,
service_name,
) -> None:
+ if service_name in self.uniq_ip:
+ msg = _(f'only one IP is allowed by IP, '
+ f'please use a variable multiple if you want have more than one IP')
+ raise DictConsistencyError(msg, 67, ip.xmlfiles)
+ self.uniq_ip.append(service_name)
variable = self.objectspace.paths.get_variable(ip.name)
if variable.type in ['ip', 'network_cidr'] and hasattr(ip, 'netmask'):
msg = _(f'ip with ip_type "{variable.type}" must not have netmask')
@@ -271,3 +284,16 @@ class ServiceAnnotator:
if netmask.type != 'netmask':
msg = _(f'netmask in ip must have type "netmask", not "{netmask.type}"')
raise DictConsistencyError(msg, 65, ip.xmlfiles)
+ # Convert IP to file
+ ip.network_type = ip.ip_type
+ ip.network = ip.name
+ ip.ip_type = 'filename'
+ ip.name = f'/systemd/system/{service_name}.service.d/rougail_ip.conf'
+ # retrieve default value from File object
+ for attr in ['owner', 'group', 'mode']:
+ setattr(ip, attr, getattr(self.objectspace.file, attr))
+ ip.source = None
+ ip.engine = 'creole'
+ self._update_file(ip,
+ service_name,
+ )
diff --git a/src/rougail/annotator/value.py b/src/rougail/annotator/value.py
index 3519508e2..8e479f6e5 100644
--- a/src/rougail/annotator/value.py
+++ b/src/rougail/annotator/value.py
@@ -26,6 +26,9 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
"""
from .variable import Walk
+from ..i18n import _
+from ..error import DictConsistencyError
+
class ValueAnnotator(Walk): # pylint: disable=R0903
"""Annotate value
"""
@@ -87,5 +90,9 @@ class ValueAnnotator(Walk): # pylint: disable=R0903
else:
variable.default_multi = variable.value[0].name
else:
+ if len(variable.value) > 1:
+ msg = _(f'the non multi variable "{variable.name}" cannot have '
+ 'more than one value')
+ raise DictConsistencyError(msg, 68, variable.xmlfiles)
variable.default = variable.value[0].name
del variable.value
diff --git a/src/rougail/config.py b/src/rougail/config.py
index 20c79f87b..6f8dbdd04 100644
--- a/src/rougail/config.py
+++ b/src/rougail/config.py
@@ -42,4 +42,5 @@ RougailConfig = {'dictionaries_dir': [join(ROUGAILROOT, 'dictionaries')],
'functions_file': join(ROUGAILROOT, 'functions.py'),
'variable_namespace': 'rougail',
'auto_freeze_variable': 'instanciated_module',
+ 'default_engine': 'creole',
}
diff --git a/src/rougail/data/rougail.dtd b/src/rougail/data/rougail.dtd
index 448020247..2900c0ac3 100644
--- a/src/rougail/data/rougail.dtd
+++ b/src/rougail/data/rougail.dtd
@@ -71,11 +71,11 @@
-
+
-
+
diff --git a/src/rougail/template.py b/src/rougail/template/base.py
similarity index 69%
rename from src/rougail/template.py
rename to src/rougail/template/base.py
index 551b0489f..89d78579d 100644
--- a/src/rougail/template.py
+++ b/src/rougail/template/base.py
@@ -30,10 +30,8 @@ import logging
from typing import Dict, Any
from subprocess import call
from os import listdir, makedirs, getcwd, chdir
-from os.path import dirname, join, isfile, abspath, normpath, isdir
-
-from Cheetah.Template import Template as ChtTemplate
-from Cheetah.NameMapper import NotFound as CheetahNotFound
+from os.path import dirname, join, isfile, isdir, abspath
+from ipaddress import ip_network
try:
from tiramisu3 import Config
@@ -42,68 +40,28 @@ except ModuleNotFoundError: # pragma: no cover
from tiramisu import Config
from tiramisu.error import PropertiesOptionError
-from .config import RougailConfig
-from .error import FileNotFound, TemplateError
-from .i18n import _
-from .utils import normalize_family, load_modules
+from ..config import RougailConfig
+from ..error import FileNotFound, TemplateError
+from ..i18n import _
+from ..utils import load_modules
+
+from . import engine as engines
+ENGINES = {}
+for engine in engines.__all__:
+ ENGINES[engine] = getattr(engines, engine)
+
+ROUGAIL_IP_TEMPLATE = """[Service]
+%for %%ip in %%rougail_variable
+IPAddressAllow=%%ip
+%end for
+IPAddressDeny=any
+"""
log = logging.getLogger(__name__)
log.addHandler(logging.NullHandler())
-@classmethod
-def cl_compile(kls, *args, **kwargs):
- """Rewrite compile methode to force some settings
- """
- kwargs['compilerSettings'] = {'directiveStartToken' : '%',
- 'cheetahVarStartToken' : '%%',
- 'EOLSlurpToken' : '%',
- 'PSPStartToken' : 'µ' * 10,
- 'PSPEndToken' : 'µ' * 10,
- 'commentStartToken' : 'µ' * 10,
- 'commentEndToken' : 'µ' * 10,
- 'multiLineCommentStartToken' : 'µ' * 10,
- 'multiLineCommentEndToken' : 'µ' * 10}
- return kls.old_compile(*args, **kwargs) # pylint: disable=E1101
-ChtTemplate.old_compile = ChtTemplate.compile
-ChtTemplate.compile = cl_compile
-
-
-class CheetahTemplate(ChtTemplate): # pylint: disable=W0223
- """Construct a cheetah templating object
- """
- def __init__(self,
- filename: str,
- context,
- eosfunc: Dict,
- extra_context: Dict,
- ):
- """Initialize Creole CheetahTemplate
- """
- ChtTemplate.__init__(self,
- file=filename,
- searchList=[context, eosfunc, extra_context])
-
- # FORK of Cheetah function, do not replace '\\' by '/'
- def serverSidePath(self,
- path=None,
- normpath=normpath,
- abspath=abspath
- ): # pylint: disable=W0621
-
- # strange...
- if path is None and isinstance(self, str):
- path = self
- if path: # pylint: disable=R1705
- return normpath(abspath(path))
-# original code return normpath(abspath(path.replace("\\", '/')))
- elif hasattr(self, '_filePath') and self._filePath: # pragma: no cover
- return normpath(abspath(self._filePath))
- else: # pragma: no cover
- return None
-
-
class RougailLeaderIndex:
"""This object is create when access to a specified Index of the variable
"""
@@ -273,41 +231,9 @@ class RougailTemplate:
copy(filename, self.tmp_dir)
self.patch_template(filename)
- def process(self,
- source: str,
- true_destfilename: str,
- destfilename: str,
- variable: Any,
- ):
- """Process a cheetah template
- """
- # full path of the destination file
- log.info(_(f"Cheetah processing: '{destfilename}'"))
- try:
- extra_context = {'normalize_family': normalize_family,
- 'rougail_filename': true_destfilename
- }
- if variable:
- extra_context['rougail_variable'] = variable
- cheetah_template = CheetahTemplate(source,
- self.rougail_variables_dict,
- self.eosfunc,
- extra_context,
- )
- data = str(cheetah_template)
- except CheetahNotFound as err: # pragma: no cover
- varname = err.args[0][13:-1]
- msg = f"Error: unknown variable used in template {source} to {destfilename}: {varname}"
- raise TemplateError(_(msg)) from err
- except Exception as err: # pragma: no cover
- msg = _(f"Error while instantiating template {source} to {destfilename}: {err}")
- raise TemplateError(msg) from err
-
- with open(destfilename, 'w') as file_h:
- file_h.write(data)
-
def instance_file(self,
filevar: Dict,
+ object_type: str,
) -> None:
"""Run templatisation on one file
"""
@@ -316,29 +242,51 @@ class RougailTemplate:
variable = filevar['variable']
else:
variable = None
+ if 'network' in filevar:
+ if 'netmask' in filevar:
+ if isinstance(filevar['network'], list):
+ variable = [str(ip_network(f'{net}/{mask}'))
+ for net, mask in zip(filevar['network'], filevar['netmask'])]
+ else:
+ variable = str(ip_network(f'{filevar["network"]}/{filevar["netmask"]}'))
+ else:
+ variable = filevar['network']
+ if not isinstance(variable, list):
+ if variable is None:
+ variable = []
+ else:
+ variable = [variable]
filenames = filevar['name']
if not isinstance(filenames, list):
filenames = [filenames]
- if variable:
+ if variable and not isinstance(variable, list):
variable = [variable]
if not isdir(self.destinations_dir):
raise TemplateError(_(f'cannot find destinations_dir {self.destinations_dir}'))
- for idx, filename in enumerate(filenames):
- destfilename = join(self.destinations_dir, filename[1:])
+ for idx, destfile in enumerate(filenames):
+ destfilename = join(self.destinations_dir, destfile[1:])
makedirs(dirname(destfilename), exist_ok=True)
- if variable:
+ if object_type == 'ip':
+ var = variable
+ elif variable:
var = variable[idx]
else:
var = None
- source = join(self.tmp_dir, filevar['source'])
- if filevar['templating'] == 'creole':
- self.process(source,
- filename,
- destfilename,
- var,
- )
+ if object_type == 'ip':
+ filename = None
+ source = ROUGAIL_IP_TEMPLATE
else:
- copy(source, destfilename)
+ filename = join(self.tmp_dir, filevar['source'])
+ source = None
+ log.info(_(f"{filevar['engine']} processing: '{destfilename}'"))
+ ENGINES[filevar['engine']].process(filename=filename,
+ source=source,
+ true_destfilename=destfile,
+ destfilename=destfilename,
+ variable=var,
+ rougail_variables_dict=self.rougail_variables_dict,
+ eosfunc=self.eosfunc,
+ )
async def instance_files(self) -> None:
"""Run templatisation on all files
@@ -355,14 +303,16 @@ class RougailTemplate:
self.prepare_template(template)
for service_obj in await self.config.option('services').list('all'):
for fills in await service_obj.list('all'):
- if await fills.option.name() in ['files', 'overrides']:
+ type_ = await fills.option.name()
+ if type_ in ['files', 'overrides', 'ip']:
for fill_obj in await fills.list('all'):
fill = await fill_obj.value.dict()
- filename = fill['source']
- if not isfile(filename): # pragma: no cover
- raise FileNotFound(_(f"File {filename} does not exist."))
+ if type_ != 'ip':
+ filename = fill['source']
+ if not isfile(filename): # pragma: no cover
+ raise FileNotFound(_(f"File {filename} does not exist."))
if fill['activate']:
- self.instance_file(fill)
+ self.instance_file(fill, type_)
else:
log.debug(_("Instantiation of file '{filename}' disabled"))
chdir(ori_dir)
@@ -398,5 +348,12 @@ class RougailTemplate:
if is_variable_namespace:
value = await option.value.get()
self.rougail_variables_dict[await option.option.name()] = value
- variables[await option.option.name()] = await option.value.get()
+ if await option.option.issymlinkoption() and await option.option.isfollower():
+ value = []
+ path = await option.option.path()
+ for index in range(await option.value.len()):
+ value.append(await self.config.option(path, index).value.get())
+ else:
+ value = await option.value.get()
+ variables[await option.option.name()] = value
return RougailExtra(variables)
diff --git a/src/rougail/template/engine/__init__.py b/src/rougail/template/engine/__init__.py
new file mode 100644
index 000000000..35f66f16e
--- /dev/null
+++ b/src/rougail/template/engine/__init__.py
@@ -0,0 +1,4 @@
+from . import none, creole
+
+
+__all__ = ('none', 'creole')
diff --git a/src/rougail/template/engine/creole.py b/src/rougail/template/engine/creole.py
new file mode 100644
index 000000000..ddfd79513
--- /dev/null
+++ b/src/rougail/template/engine/creole.py
@@ -0,0 +1,127 @@
+"""Creole engine
+
+Created by:
+EOLE (http://eole.orion.education.fr)
+Copyright (C) 2005-2018
+
+Forked by:
+Cadoles (http://www.cadoles.com)
+Copyright (C) 2021
+
+distribued with GPL-2 or later license
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+"""
+from os.path import abspath, normpath
+from Cheetah.Template import Template
+from Cheetah.NameMapper import NotFound
+from typing import Dict, Any
+
+from ...utils import normalize_family
+from ...error import TemplateError
+
+
+@classmethod
+def cl_compile(kls, *args, **kwargs):
+ """Rewrite compile methode to force some settings
+ """
+ kwargs['compilerSettings'] = {'directiveStartToken' : '%',
+ 'cheetahVarStartToken' : '%%',
+ 'EOLSlurpToken' : '%',
+ 'commentStartToken' : '#',
+ 'multiLineCommentStartToken' : '#*',
+ 'multiLineCommentEndToken' : '*#',
+ }
+ return kls.old_compile(*args, **kwargs) # pylint: disable=E1101
+Template.old_compile = Template.compile
+Template.compile = cl_compile
+
+
+class CheetahTemplate(Template): # pylint: disable=W0223
+ """Construct a cheetah templating object
+ """
+ def __init__(self,
+ filename: str,
+ source: str,
+ context,
+ eosfunc: Dict,
+ extra_context: Dict,
+ ):
+ """Initialize Creole CheetahTemplate
+ """
+ if filename is not None:
+ Template.__init__(self,
+ file=filename,
+ searchList=[context, eosfunc, extra_context],
+ )
+ else:
+ Template.__init__(self,
+ source=source,
+ searchList=[context, eosfunc, extra_context],
+ )
+
+ # FORK of Cheetah function, do not replace '\\' by '/'
+ def serverSidePath(self,
+ path=None,
+ normpath=normpath,
+ abspath=abspath
+ ): # pylint: disable=W0621
+
+ # strange...
+ if path is None and isinstance(self, str):
+ path = self
+ if path: # pylint: disable=R1705
+ return normpath(abspath(path))
+# original code return normpath(abspath(path.replace("\\", '/')))
+ elif hasattr(self, '_filePath') and self._filePath: # pragma: no cover
+ return normpath(abspath(self._filePath))
+ else: # pragma: no cover
+ return None
+
+
+def process(filename: str,
+ source: str,
+ true_destfilename: str,
+ destfilename: str,
+ variable: Any,
+ rougail_variables_dict: Dict,
+ eosfunc: Dict,
+ ):
+ """Process a cheetah template
+ """
+ # full path of the destination file
+ try:
+ extra_context = {'normalize_family': normalize_family,
+ 'rougail_filename': true_destfilename
+ }
+ if variable is not None:
+ extra_context['rougail_variable'] = variable
+ cheetah_template = CheetahTemplate(filename,
+ source,
+ rougail_variables_dict,
+ eosfunc,
+ extra_context,
+ )
+ data = str(cheetah_template)
+ except NotFound as err: # pragma: no cover
+ varname = err.args[0][13:-1]
+ msg = f"Error: unknown variable used in template {filename} to {destfilename}: {varname}"
+ raise TemplateError(_(msg)) from err
+ except Exception as err: # pragma: no cover
+ msg = _(f"Error while instantiating template {filename} to {destfilename}: {err}")
+ raise TemplateError(msg) from err
+
+ with open(destfilename, 'w') as file_h:
+ file_h.write(data)
diff --git a/src/rougail/template/engine/none.py b/src/rougail/template/engine/none.py
new file mode 100644
index 000000000..fb35e89f9
--- /dev/null
+++ b/src/rougail/template/engine/none.py
@@ -0,0 +1,35 @@
+"""None engine
+
+Created by:
+EOLE (http://eole.orion.education.fr)
+Copyright (C) 2005-2018
+
+Forked by:
+Cadoles (http://www.cadoles.com)
+Copyright (C) 2021
+
+distribued with GPL-2 or later license
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+"""
+from typing import Any
+from shutil import copy
+
+
+def process(filename: str,
+ destfilename: str,
+ **kwargs
+ ):
+ copy(filename, destfilename)
diff --git a/tests/dictionaries/01base_file/makedict/base.json b/tests/dictionaries/01base_file/makedict/base.json
index 145ff2492..2b24b0b16 100644
--- a/tests/dictionaries/01base_file/makedict/base.json
+++ b/tests/dictionaries/01base_file/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.mode_conteneur_actif": "non", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/etc/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.templating": "creole", "services.test.files.file.activate": true}
+{"rougail.general.mode_conteneur_actif": "non", "services.test.files.file.engine": "creole", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/etc/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.activate": true}
diff --git a/tests/dictionaries/01base_file/tiramisu/base.py b/tests/dictionaries/01base_file/tiramisu/base.py
index a9f008e6e..0bdb05a1c 100644
--- a/tests/dictionaries/01base_file/tiramisu/base.py
+++ b/tests/dictionaries/01base_file/tiramisu/base.py
@@ -14,12 +14,12 @@ except:
option_3 = StrOption(name="mode_conteneur_actif", doc="Description", default="non", properties=frozenset({"mandatory", "normal"}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_8 = StrOption(name="group", doc="group", default="root")
-option_9 = StrOption(name="mode", doc="mode", default="0644")
-option_10 = FilenameOption(name="name", doc="name", default="/etc/file")
-option_11 = StrOption(name="owner", doc="owner", default="root")
-option_12 = StrOption(name="source", doc="source", default="file")
-option_13 = StrOption(name="templating", doc="templating", default="creole")
+option_8 = StrOption(name="engine", doc="engine", default="creole")
+option_9 = StrOption(name="group", doc="group", default="root")
+option_10 = StrOption(name="mode", doc="mode", default="0644")
+option_11 = FilenameOption(name="name", doc="name", default="/etc/file")
+option_12 = StrOption(name="owner", doc="owner", default="root")
+option_13 = StrOption(name="source", doc="source", default="file")
option_14 = BoolOption(name="activate", doc="activate", default=True)
option_7 = OptionDescription(name="file", doc="file", children=[option_8, option_9, option_10, option_11, option_12, option_13, option_14])
option_6 = OptionDescription(name="files", doc="files", children=[option_7])
diff --git a/tests/dictionaries/01base_file_include/makedict/base.json b/tests/dictionaries/01base_file_include/makedict/base.json
index 145ff2492..2b24b0b16 100644
--- a/tests/dictionaries/01base_file_include/makedict/base.json
+++ b/tests/dictionaries/01base_file_include/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.mode_conteneur_actif": "non", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/etc/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.templating": "creole", "services.test.files.file.activate": true}
+{"rougail.general.mode_conteneur_actif": "non", "services.test.files.file.engine": "creole", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/etc/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.activate": true}
diff --git a/tests/dictionaries/01base_file_include/tiramisu/base.py b/tests/dictionaries/01base_file_include/tiramisu/base.py
index a9f008e6e..0bdb05a1c 100644
--- a/tests/dictionaries/01base_file_include/tiramisu/base.py
+++ b/tests/dictionaries/01base_file_include/tiramisu/base.py
@@ -14,12 +14,12 @@ except:
option_3 = StrOption(name="mode_conteneur_actif", doc="Description", default="non", properties=frozenset({"mandatory", "normal"}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_8 = StrOption(name="group", doc="group", default="root")
-option_9 = StrOption(name="mode", doc="mode", default="0644")
-option_10 = FilenameOption(name="name", doc="name", default="/etc/file")
-option_11 = StrOption(name="owner", doc="owner", default="root")
-option_12 = StrOption(name="source", doc="source", default="file")
-option_13 = StrOption(name="templating", doc="templating", default="creole")
+option_8 = StrOption(name="engine", doc="engine", default="creole")
+option_9 = StrOption(name="group", doc="group", default="root")
+option_10 = StrOption(name="mode", doc="mode", default="0644")
+option_11 = FilenameOption(name="name", doc="name", default="/etc/file")
+option_12 = StrOption(name="owner", doc="owner", default="root")
+option_13 = StrOption(name="source", doc="source", default="file")
option_14 = BoolOption(name="activate", doc="activate", default=True)
option_7 = OptionDescription(name="file", doc="file", children=[option_8, option_9, option_10, option_11, option_12, option_13, option_14])
option_6 = OptionDescription(name="files", doc="files", children=[option_7])
diff --git a/tests/dictionaries/01base_file_patch/makedict/base.json b/tests/dictionaries/01base_file_patch/makedict/base.json
index 145ff2492..2b24b0b16 100644
--- a/tests/dictionaries/01base_file_patch/makedict/base.json
+++ b/tests/dictionaries/01base_file_patch/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.mode_conteneur_actif": "non", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/etc/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.templating": "creole", "services.test.files.file.activate": true}
+{"rougail.general.mode_conteneur_actif": "non", "services.test.files.file.engine": "creole", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/etc/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.activate": true}
diff --git a/tests/dictionaries/01base_file_patch/tiramisu/base.py b/tests/dictionaries/01base_file_patch/tiramisu/base.py
index a9f008e6e..0bdb05a1c 100644
--- a/tests/dictionaries/01base_file_patch/tiramisu/base.py
+++ b/tests/dictionaries/01base_file_patch/tiramisu/base.py
@@ -14,12 +14,12 @@ except:
option_3 = StrOption(name="mode_conteneur_actif", doc="Description", default="non", properties=frozenset({"mandatory", "normal"}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_8 = StrOption(name="group", doc="group", default="root")
-option_9 = StrOption(name="mode", doc="mode", default="0644")
-option_10 = FilenameOption(name="name", doc="name", default="/etc/file")
-option_11 = StrOption(name="owner", doc="owner", default="root")
-option_12 = StrOption(name="source", doc="source", default="file")
-option_13 = StrOption(name="templating", doc="templating", default="creole")
+option_8 = StrOption(name="engine", doc="engine", default="creole")
+option_9 = StrOption(name="group", doc="group", default="root")
+option_10 = StrOption(name="mode", doc="mode", default="0644")
+option_11 = FilenameOption(name="name", doc="name", default="/etc/file")
+option_12 = StrOption(name="owner", doc="owner", default="root")
+option_13 = StrOption(name="source", doc="source", default="file")
option_14 = BoolOption(name="activate", doc="activate", default=True)
option_7 = OptionDescription(name="file", doc="file", children=[option_8, option_9, option_10, option_11, option_12, option_13, option_14])
option_6 = OptionDescription(name="files", doc="files", children=[option_7])
diff --git a/tests/dictionaries/01base_file_utfchar/makedict/base.json b/tests/dictionaries/01base_file_utfchar/makedict/base.json
index 7ac3705f5..9ccbba635 100644
--- a/tests/dictionaries/01base_file_utfchar/makedict/base.json
+++ b/tests/dictionaries/01base_file_utfchar/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.mode_conteneur_actif": "non", "services.test.files.systemd_makefs@dev_disk_by\\x2dpartlabel.group": "root", "services.test.files.systemd_makefs@dev_disk_by\\x2dpartlabel.mode": "0644", "services.test.files.systemd_makefs@dev_disk_by\\x2dpartlabel.name": "/etc/systemd-makefs@dev-disk-by\\x2dpartlabel", "services.test.files.systemd_makefs@dev_disk_by\\x2dpartlabel.owner": "root", "services.test.files.systemd_makefs@dev_disk_by\\x2dpartlabel.source": "systemd-makefs@dev-disk-by\\x2dpartlabel", "services.test.files.systemd_makefs@dev_disk_by\\x2dpartlabel.templating": "creole", "services.test.files.systemd_makefs@dev_disk_by\\x2dpartlabel.activate": true}
+{"rougail.general.mode_conteneur_actif": "non", "services.test.files.systemd_makefs@dev_disk_by\\x2dpartlabel.engine": "creole", "services.test.files.systemd_makefs@dev_disk_by\\x2dpartlabel.group": "root", "services.test.files.systemd_makefs@dev_disk_by\\x2dpartlabel.mode": "0644", "services.test.files.systemd_makefs@dev_disk_by\\x2dpartlabel.name": "/etc/systemd-makefs@dev-disk-by\\x2dpartlabel", "services.test.files.systemd_makefs@dev_disk_by\\x2dpartlabel.owner": "root", "services.test.files.systemd_makefs@dev_disk_by\\x2dpartlabel.source": "systemd-makefs@dev-disk-by\\x2dpartlabel", "services.test.files.systemd_makefs@dev_disk_by\\x2dpartlabel.activate": true}
diff --git a/tests/dictionaries/01base_file_utfchar/tiramisu/base.py b/tests/dictionaries/01base_file_utfchar/tiramisu/base.py
index b68ce93c6..15fd72dad 100644
--- a/tests/dictionaries/01base_file_utfchar/tiramisu/base.py
+++ b/tests/dictionaries/01base_file_utfchar/tiramisu/base.py
@@ -14,12 +14,12 @@ except:
option_3 = StrOption(name="mode_conteneur_actif", doc="Description", default="non", properties=frozenset({"mandatory", "normal"}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_8 = StrOption(name="group", doc="group", default="root")
-option_9 = StrOption(name="mode", doc="mode", default="0644")
-option_10 = FilenameOption(name="name", doc="name", default="/etc/systemd-makefs@dev-disk-by\\x2dpartlabel")
-option_11 = StrOption(name="owner", doc="owner", default="root")
-option_12 = StrOption(name="source", doc="source", default="systemd-makefs@dev-disk-by\\x2dpartlabel")
-option_13 = StrOption(name="templating", doc="templating", default="creole")
+option_8 = StrOption(name="engine", doc="engine", default="creole")
+option_9 = StrOption(name="group", doc="group", default="root")
+option_10 = StrOption(name="mode", doc="mode", default="0644")
+option_11 = FilenameOption(name="name", doc="name", default="/etc/systemd-makefs@dev-disk-by\\x2dpartlabel")
+option_12 = StrOption(name="owner", doc="owner", default="root")
+option_13 = StrOption(name="source", doc="source", default="systemd-makefs@dev-disk-by\\x2dpartlabel")
option_14 = BoolOption(name="activate", doc="activate", default=True)
option_7 = OptionDescription(name="systemd_makefs@dev_disk_by\\x2dpartlabel", doc="systemd-makefs@dev-disk-by\\x2dpartlabel", children=[option_8, option_9, option_10, option_11, option_12, option_13, option_14])
option_6 = OptionDescription(name="files", doc="files", children=[option_7])
diff --git a/tests/dictionaries/10load_disabled_if_in_multi_param/makedict/base.json b/tests/dictionaries/10load_disabled_if_in_multi_param/makedict/base.json
index 62d0da02b..adc0f4a2d 100644
--- a/tests/dictionaries/10load_disabled_if_in_multi_param/makedict/base.json
+++ b/tests/dictionaries/10load_disabled_if_in_multi_param/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.templating": "creole", "services.test.files.file1.activate": true}
+{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.test.files.file1.engine": "creole", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.activate": true}
diff --git a/tests/dictionaries/10load_disabled_if_in_multi_param/tiramisu/base.py b/tests/dictionaries/10load_disabled_if_in_multi_param/tiramisu/base.py
index 2c7794e15..e084563c5 100644
--- a/tests/dictionaries/10load_disabled_if_in_multi_param/tiramisu/base.py
+++ b/tests/dictionaries/10load_disabled_if_in_multi_param/tiramisu/base.py
@@ -16,12 +16,12 @@ option_4 = StrOption(name="mode_conteneur_actif", doc="No change", default="non"
option_5 = StrOption(name="mode_conteneur_actif2", doc="No change", default="non", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "mandatory", "normal", Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_3, todict=True), 'expected': ParamValue("oui")})), Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_3, todict=True), 'expected': ParamValue("maybe")}))}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3, option_4, option_5], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_10 = StrOption(name="group", doc="group", default="root")
-option_11 = StrOption(name="mode", doc="mode", default="0644")
-option_12 = FilenameOption(name="name", doc="name", default="/tmp/file1")
-option_13 = StrOption(name="owner", doc="owner", default="root")
-option_14 = StrOption(name="source", doc="source", default="file1")
-option_15 = StrOption(name="templating", doc="templating", default="creole")
+option_10 = StrOption(name="engine", doc="engine", default="creole")
+option_11 = StrOption(name="group", doc="group", default="root")
+option_12 = StrOption(name="mode", doc="mode", default="0644")
+option_13 = FilenameOption(name="name", doc="name", default="/tmp/file1")
+option_14 = StrOption(name="owner", doc="owner", default="root")
+option_15 = StrOption(name="source", doc="source", default="file1")
option_16 = BoolOption(name="activate", doc="activate", default=Calculation(func.calc_value, Params((ParamValue(False)), kwargs={'default': ParamValue(True), 'condition_0': ParamOption(option_3), 'expected_0': ParamValue(["oui", "maybe"]), 'condition_operator': ParamValue("OR")})))
option_9 = OptionDescription(name="file1", doc="file1", children=[option_10, option_11, option_12, option_13, option_14, option_15, option_16])
option_8 = OptionDescription(name="files", doc="files", children=[option_9])
diff --git a/tests/dictionaries/10load_disabled_if_in_multi_param2/makedict/base.json b/tests/dictionaries/10load_disabled_if_in_multi_param2/makedict/base.json
index 2261fd969..acc4e5e56 100644
--- a/tests/dictionaries/10load_disabled_if_in_multi_param2/makedict/base.json
+++ b/tests/dictionaries/10load_disabled_if_in_multi_param2/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.condition": "no", "rougail.general.condition2": "no", "rougail.general.test_variable": "no", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.templating": "creole", "services.test.files.file1.activate": true}
+{"rougail.general.condition": "no", "rougail.general.condition2": "no", "rougail.general.test_variable": "no", "services.test.files.file1.engine": "creole", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.activate": true}
diff --git a/tests/dictionaries/10load_disabled_if_in_multi_param2/tiramisu/base.py b/tests/dictionaries/10load_disabled_if_in_multi_param2/tiramisu/base.py
index 9b745caff..32672343c 100644
--- a/tests/dictionaries/10load_disabled_if_in_multi_param2/tiramisu/base.py
+++ b/tests/dictionaries/10load_disabled_if_in_multi_param2/tiramisu/base.py
@@ -16,12 +16,12 @@ option_4 = StrOption(name="condition2", doc="No change", default="no", propertie
option_5 = StrOption(name="test_variable", doc="No change", default="no", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "mandatory", "normal", Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_3, todict=True), 'expected': ParamValue("yes")})), Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_3, todict=True), 'expected': ParamValue("maybe")})), Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_4, todict=True), 'expected': ParamValue("yes")})), Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_4, todict=True), 'expected': ParamValue("maybe")}))}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3, option_4, option_5], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_10 = StrOption(name="group", doc="group", default="root")
-option_11 = StrOption(name="mode", doc="mode", default="0644")
-option_12 = FilenameOption(name="name", doc="name", default="/tmp/file1")
-option_13 = StrOption(name="owner", doc="owner", default="root")
-option_14 = StrOption(name="source", doc="source", default="file1")
-option_15 = StrOption(name="templating", doc="templating", default="creole")
+option_10 = StrOption(name="engine", doc="engine", default="creole")
+option_11 = StrOption(name="group", doc="group", default="root")
+option_12 = StrOption(name="mode", doc="mode", default="0644")
+option_13 = FilenameOption(name="name", doc="name", default="/tmp/file1")
+option_14 = StrOption(name="owner", doc="owner", default="root")
+option_15 = StrOption(name="source", doc="source", default="file1")
option_16 = BoolOption(name="activate", doc="activate", default=Calculation(func.calc_value, Params((ParamValue(False)), kwargs={'default': ParamValue(True), 'condition_0': ParamOption(option_3), 'expected_0': ParamValue(["yes", "maybe"]), 'condition_operator': ParamValue("OR"), 'condition_1': ParamOption(option_4), 'expected_1': ParamValue(["yes", "maybe"])})))
option_9 = OptionDescription(name="file1", doc="file1", children=[option_10, option_11, option_12, option_13, option_14, option_15, option_16])
option_8 = OptionDescription(name="files", doc="files", children=[option_9])
diff --git a/tests/dictionaries/10load_disabled_if_in_multi_param3/makedict/base.json b/tests/dictionaries/10load_disabled_if_in_multi_param3/makedict/base.json
index 4bd559bd9..28d701e23 100644
--- a/tests/dictionaries/10load_disabled_if_in_multi_param3/makedict/base.json
+++ b/tests/dictionaries/10load_disabled_if_in_multi_param3/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.condition": "no", "rougail.general.condition2": "no", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.templating": "creole", "services.test.files.file1.activate": false}
+{"rougail.general.condition": "no", "rougail.general.condition2": "no", "services.test.files.file1.engine": "creole", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.activate": false}
diff --git a/tests/dictionaries/10load_disabled_if_in_multi_param3/tiramisu/base.py b/tests/dictionaries/10load_disabled_if_in_multi_param3/tiramisu/base.py
index 024a31989..f8d0b73ef 100644
--- a/tests/dictionaries/10load_disabled_if_in_multi_param3/tiramisu/base.py
+++ b/tests/dictionaries/10load_disabled_if_in_multi_param3/tiramisu/base.py
@@ -16,12 +16,12 @@ option_4 = StrOption(name="condition2", doc="No change", default="no", propertie
option_5 = StrOption(name="test_variable", doc="No change", default="no", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "mandatory", "normal", Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_3, todict=True), 'expected': ParamValue("yes"), 'reverse_condition': ParamValue(True)})), Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_3, todict=True), 'expected': ParamValue("maybe"), 'reverse_condition': ParamValue(True)})), Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_4, todict=True), 'expected': ParamValue("yes")})), Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_4, todict=True), 'expected': ParamValue("maybe")}))}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3, option_4, option_5], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_10 = StrOption(name="group", doc="group", default="root")
-option_11 = StrOption(name="mode", doc="mode", default="0644")
-option_12 = FilenameOption(name="name", doc="name", default="/tmp/file1")
-option_13 = StrOption(name="owner", doc="owner", default="root")
-option_14 = StrOption(name="source", doc="source", default="file1")
-option_15 = StrOption(name="templating", doc="templating", default="creole")
+option_10 = StrOption(name="engine", doc="engine", default="creole")
+option_11 = StrOption(name="group", doc="group", default="root")
+option_12 = StrOption(name="mode", doc="mode", default="0644")
+option_13 = FilenameOption(name="name", doc="name", default="/tmp/file1")
+option_14 = StrOption(name="owner", doc="owner", default="root")
+option_15 = StrOption(name="source", doc="source", default="file1")
option_16 = BoolOption(name="activate", doc="activate", default=Calculation(func.calc_value, Params((ParamValue(False)), kwargs={'default': ParamValue(True), 'condition_0': ParamOption(option_3), 'expected_0': ParamValue(["yes", "maybe"]), 'reverse_condition_0': ParamValue(True), 'condition_operator': ParamValue("OR"), 'condition_1': ParamOption(option_4), 'expected_1': ParamValue(["yes", "maybe"])})))
option_9 = OptionDescription(name="file1", doc="file1", children=[option_10, option_11, option_12, option_13, option_14, option_15, option_16])
option_8 = OptionDescription(name="files", doc="files", children=[option_9])
diff --git a/tests/dictionaries/10load_disabled_if_in_multi_param4/makedict/base.json b/tests/dictionaries/10load_disabled_if_in_multi_param4/makedict/base.json
index 28b06ee58..cf385f00a 100644
--- a/tests/dictionaries/10load_disabled_if_in_multi_param4/makedict/base.json
+++ b/tests/dictionaries/10load_disabled_if_in_multi_param4/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.condition": "yes", "rougail.general.condition2": "no", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.templating": "creole", "services.test.files.file1.activate": true}
+{"rougail.general.condition": "yes", "rougail.general.condition2": "no", "services.test.files.file1.engine": "creole", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.activate": true}
diff --git a/tests/dictionaries/10load_disabled_if_in_multi_param4/tiramisu/base.py b/tests/dictionaries/10load_disabled_if_in_multi_param4/tiramisu/base.py
index 1d4938cfb..46cd5e169 100644
--- a/tests/dictionaries/10load_disabled_if_in_multi_param4/tiramisu/base.py
+++ b/tests/dictionaries/10load_disabled_if_in_multi_param4/tiramisu/base.py
@@ -16,12 +16,12 @@ option_4 = StrOption(name="condition2", doc="No change", default="no", propertie
option_5 = StrOption(name="test_variable", doc="No change", default="no", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "mandatory", "normal", Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_3, todict=True), 'expected': ParamValue("yes"), 'reverse_condition': ParamValue(True)})), Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_3, todict=True), 'expected': ParamValue("maybe"), 'reverse_condition': ParamValue(True)})), Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_4, todict=True), 'expected': ParamValue("yes")})), Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_4, todict=True), 'expected': ParamValue("maybe")}))}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3, option_4, option_5], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_10 = StrOption(name="group", doc="group", default="root")
-option_11 = StrOption(name="mode", doc="mode", default="0644")
-option_12 = FilenameOption(name="name", doc="name", default="/tmp/file1")
-option_13 = StrOption(name="owner", doc="owner", default="root")
-option_14 = StrOption(name="source", doc="source", default="file1")
-option_15 = StrOption(name="templating", doc="templating", default="creole")
+option_10 = StrOption(name="engine", doc="engine", default="creole")
+option_11 = StrOption(name="group", doc="group", default="root")
+option_12 = StrOption(name="mode", doc="mode", default="0644")
+option_13 = FilenameOption(name="name", doc="name", default="/tmp/file1")
+option_14 = StrOption(name="owner", doc="owner", default="root")
+option_15 = StrOption(name="source", doc="source", default="file1")
option_16 = BoolOption(name="activate", doc="activate", default=Calculation(func.calc_value, Params((ParamValue(False)), kwargs={'default': ParamValue(True), 'condition_0': ParamOption(option_3), 'expected_0': ParamValue(["yes", "maybe"]), 'reverse_condition_0': ParamValue(True), 'condition_operator': ParamValue("OR"), 'condition_1': ParamOption(option_4), 'expected_1': ParamValue(["yes", "maybe"])})))
option_9 = OptionDescription(name="file1", doc="file1", children=[option_10, option_11, option_12, option_13, option_14, option_15, option_16])
option_8 = OptionDescription(name="files", doc="files", children=[option_9])
diff --git a/tests/dictionaries/10load_disabled_if_in_multi_param5/makedict/base.json b/tests/dictionaries/10load_disabled_if_in_multi_param5/makedict/base.json
index ef7941bea..9ec310ad7 100644
--- a/tests/dictionaries/10load_disabled_if_in_multi_param5/makedict/base.json
+++ b/tests/dictionaries/10load_disabled_if_in_multi_param5/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.condition": "yes", "rougail.general.condition2": "yes", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.templating": "creole", "services.test.files.file1.activate": false}
+{"rougail.general.condition": "yes", "rougail.general.condition2": "yes", "services.test.files.file1.engine": "creole", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.activate": false}
diff --git a/tests/dictionaries/10load_disabled_if_in_multi_param5/tiramisu/base.py b/tests/dictionaries/10load_disabled_if_in_multi_param5/tiramisu/base.py
index 85db20ff5..fea0b1a36 100644
--- a/tests/dictionaries/10load_disabled_if_in_multi_param5/tiramisu/base.py
+++ b/tests/dictionaries/10load_disabled_if_in_multi_param5/tiramisu/base.py
@@ -16,12 +16,12 @@ option_4 = StrOption(name="condition2", doc="No change", default="yes", properti
option_5 = StrOption(name="test_variable", doc="No change", default="no", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "mandatory", "normal", Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_3, todict=True), 'expected': ParamValue("yes"), 'reverse_condition': ParamValue(True)})), Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_3, todict=True), 'expected': ParamValue("maybe"), 'reverse_condition': ParamValue(True)})), Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_4, todict=True), 'expected': ParamValue("yes")})), Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_4, todict=True), 'expected': ParamValue("maybe")}))}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3, option_4, option_5], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_10 = StrOption(name="group", doc="group", default="root")
-option_11 = StrOption(name="mode", doc="mode", default="0644")
-option_12 = FilenameOption(name="name", doc="name", default="/tmp/file1")
-option_13 = StrOption(name="owner", doc="owner", default="root")
-option_14 = StrOption(name="source", doc="source", default="file1")
-option_15 = StrOption(name="templating", doc="templating", default="creole")
+option_10 = StrOption(name="engine", doc="engine", default="creole")
+option_11 = StrOption(name="group", doc="group", default="root")
+option_12 = StrOption(name="mode", doc="mode", default="0644")
+option_13 = FilenameOption(name="name", doc="name", default="/tmp/file1")
+option_14 = StrOption(name="owner", doc="owner", default="root")
+option_15 = StrOption(name="source", doc="source", default="file1")
option_16 = BoolOption(name="activate", doc="activate", default=Calculation(func.calc_value, Params((ParamValue(False)), kwargs={'default': ParamValue(True), 'condition_0': ParamOption(option_3), 'expected_0': ParamValue(["yes", "maybe"]), 'reverse_condition_0': ParamValue(True), 'condition_operator': ParamValue("OR"), 'condition_1': ParamOption(option_4), 'expected_1': ParamValue(["yes", "maybe"])})))
option_9 = OptionDescription(name="file1", doc="file1", children=[option_10, option_11, option_12, option_13, option_14, option_15, option_16])
option_8 = OptionDescription(name="files", doc="files", children=[option_9])
diff --git a/tests/dictionaries/10load_disabled_if_in_multi_param6/makedict/base.json b/tests/dictionaries/10load_disabled_if_in_multi_param6/makedict/base.json
index 02631770f..cbd70713c 100644
--- a/tests/dictionaries/10load_disabled_if_in_multi_param6/makedict/base.json
+++ b/tests/dictionaries/10load_disabled_if_in_multi_param6/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.condition": "no", "rougail.general.condition2": "yes", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.templating": "creole", "services.test.files.file1.activate": false}
+{"rougail.general.condition": "no", "rougail.general.condition2": "yes", "services.test.files.file1.engine": "creole", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.activate": false}
diff --git a/tests/dictionaries/10load_disabled_if_in_multi_param6/tiramisu/base.py b/tests/dictionaries/10load_disabled_if_in_multi_param6/tiramisu/base.py
index 3bc1c7511..8ba448a19 100644
--- a/tests/dictionaries/10load_disabled_if_in_multi_param6/tiramisu/base.py
+++ b/tests/dictionaries/10load_disabled_if_in_multi_param6/tiramisu/base.py
@@ -16,12 +16,12 @@ option_4 = StrOption(name="condition2", doc="No change", default="yes", properti
option_5 = StrOption(name="test_variable", doc="No change", default="no", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "mandatory", "normal", Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_3, todict=True), 'expected': ParamValue("yes"), 'reverse_condition': ParamValue(True)})), Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_3, todict=True), 'expected': ParamValue("maybe"), 'reverse_condition': ParamValue(True)})), Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_4, todict=True), 'expected': ParamValue("yes")})), Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_4, todict=True), 'expected': ParamValue("maybe")}))}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3, option_4, option_5], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_10 = StrOption(name="group", doc="group", default="root")
-option_11 = StrOption(name="mode", doc="mode", default="0644")
-option_12 = FilenameOption(name="name", doc="name", default="/tmp/file1")
-option_13 = StrOption(name="owner", doc="owner", default="root")
-option_14 = StrOption(name="source", doc="source", default="file1")
-option_15 = StrOption(name="templating", doc="templating", default="creole")
+option_10 = StrOption(name="engine", doc="engine", default="creole")
+option_11 = StrOption(name="group", doc="group", default="root")
+option_12 = StrOption(name="mode", doc="mode", default="0644")
+option_13 = FilenameOption(name="name", doc="name", default="/tmp/file1")
+option_14 = StrOption(name="owner", doc="owner", default="root")
+option_15 = StrOption(name="source", doc="source", default="file1")
option_16 = BoolOption(name="activate", doc="activate", default=Calculation(func.calc_value, Params((ParamValue(False)), kwargs={'default': ParamValue(True), 'condition_0': ParamOption(option_3), 'expected_0': ParamValue(["yes", "maybe"]), 'reverse_condition_0': ParamValue(True), 'condition_operator': ParamValue("OR"), 'condition_1': ParamOption(option_4), 'expected_1': ParamValue(["yes", "maybe"])})))
option_9 = OptionDescription(name="file1", doc="file1", children=[option_10, option_11, option_12, option_13, option_14, option_15, option_16])
option_8 = OptionDescription(name="files", doc="files", children=[option_9])
diff --git a/tests/dictionaries/10load_disabled_if_in_multi_param_disabled/makedict/base.json b/tests/dictionaries/10load_disabled_if_in_multi_param_disabled/makedict/base.json
index 87524c32d..a87123bef 100644
--- a/tests/dictionaries/10load_disabled_if_in_multi_param_disabled/makedict/base.json
+++ b/tests/dictionaries/10load_disabled_if_in_multi_param_disabled/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.condition": "oui", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.templating": "creole", "services.test.files.file1.activate": false}
+{"rougail.general.condition": "oui", "services.test.files.file1.engine": "creole", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.activate": false}
diff --git a/tests/dictionaries/10load_disabled_if_in_multi_param_disabled/tiramisu/base.py b/tests/dictionaries/10load_disabled_if_in_multi_param_disabled/tiramisu/base.py
index 9e84a8013..f8d775695 100644
--- a/tests/dictionaries/10load_disabled_if_in_multi_param_disabled/tiramisu/base.py
+++ b/tests/dictionaries/10load_disabled_if_in_multi_param_disabled/tiramisu/base.py
@@ -16,12 +16,12 @@ option_4 = StrOption(name="mode_conteneur_actif", doc="No change", default="non"
option_5 = StrOption(name="mode_conteneur_actif2", doc="No change", default="non", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "mandatory", "normal", Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_3, todict=True), 'expected': ParamValue("oui")})), Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_3, todict=True), 'expected': ParamValue("maybe")}))}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3, option_4, option_5], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_10 = StrOption(name="group", doc="group", default="root")
-option_11 = StrOption(name="mode", doc="mode", default="0644")
-option_12 = FilenameOption(name="name", doc="name", default="/tmp/file1")
-option_13 = StrOption(name="owner", doc="owner", default="root")
-option_14 = StrOption(name="source", doc="source", default="file1")
-option_15 = StrOption(name="templating", doc="templating", default="creole")
+option_10 = StrOption(name="engine", doc="engine", default="creole")
+option_11 = StrOption(name="group", doc="group", default="root")
+option_12 = StrOption(name="mode", doc="mode", default="0644")
+option_13 = FilenameOption(name="name", doc="name", default="/tmp/file1")
+option_14 = StrOption(name="owner", doc="owner", default="root")
+option_15 = StrOption(name="source", doc="source", default="file1")
option_16 = BoolOption(name="activate", doc="activate", default=Calculation(func.calc_value, Params((ParamValue(False)), kwargs={'default': ParamValue(True), 'condition_0': ParamOption(option_3), 'expected_0': ParamValue(["oui", "maybe"]), 'condition_operator': ParamValue("OR")})))
option_9 = OptionDescription(name="file1", doc="file1", children=[option_10, option_11, option_12, option_13, option_14, option_15, option_16])
option_8 = OptionDescription(name="files", doc="files", children=[option_9])
diff --git a/tests/dictionaries/10load_disabled_if_not_in_fallback/makedict/base.json b/tests/dictionaries/10load_disabled_if_not_in_fallback/makedict/base.json
index 509b7d495..a73037eee 100644
--- a/tests/dictionaries/10load_disabled_if_not_in_fallback/makedict/base.json
+++ b/tests/dictionaries/10load_disabled_if_not_in_fallback/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.condition": "no", "rougail.general.disable_variable": "no", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.templating": "creole", "services.test.files.file1.activate": true}
+{"rougail.general.condition": "no", "rougail.general.disable_variable": "no", "services.test.files.file1.engine": "creole", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.activate": true}
diff --git a/tests/dictionaries/10load_disabled_if_not_in_fallback/tiramisu/base.py b/tests/dictionaries/10load_disabled_if_not_in_fallback/tiramisu/base.py
index 32d0b0920..299b254b2 100644
--- a/tests/dictionaries/10load_disabled_if_not_in_fallback/tiramisu/base.py
+++ b/tests/dictionaries/10load_disabled_if_not_in_fallback/tiramisu/base.py
@@ -15,12 +15,12 @@ option_3 = StrOption(name="condition", doc="No change", default="no", properties
option_4 = StrOption(name="disable_variable", doc="No change", default="no", properties=frozenset({"mandatory", "normal"}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3, option_4], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_9 = StrOption(name="group", doc="group", default="root")
-option_10 = StrOption(name="mode", doc="mode", default="0644")
-option_11 = FilenameOption(name="name", doc="name", default="/tmp/file1")
-option_12 = StrOption(name="owner", doc="owner", default="root")
-option_13 = StrOption(name="source", doc="source", default="file1")
-option_14 = StrOption(name="templating", doc="templating", default="creole")
+option_9 = StrOption(name="engine", doc="engine", default="creole")
+option_10 = StrOption(name="group", doc="group", default="root")
+option_11 = StrOption(name="mode", doc="mode", default="0644")
+option_12 = FilenameOption(name="name", doc="name", default="/tmp/file1")
+option_13 = StrOption(name="owner", doc="owner", default="root")
+option_14 = StrOption(name="source", doc="source", default="file1")
option_15 = BoolOption(name="activate", doc="activate", default=True)
option_8 = OptionDescription(name="file1", doc="file1", children=[option_9, option_10, option_11, option_12, option_13, option_14, option_15])
option_7 = OptionDescription(name="files", doc="files", children=[option_8])
diff --git a/tests/dictionaries/11disabled_if_in_filelist/makedict/base.json b/tests/dictionaries/11disabled_if_in_filelist/makedict/base.json
index 0d4b98d08..179cec85b 100644
--- a/tests/dictionaries/11disabled_if_in_filelist/makedict/base.json
+++ b/tests/dictionaries/11disabled_if_in_filelist/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": true, "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/etc/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.templating": "creole", "services.test.files.file.activate": true}
+{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": true, "services.test.files.file.engine": "creole", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/etc/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.activate": true}
diff --git a/tests/dictionaries/11disabled_if_in_filelist/tiramisu/base.py b/tests/dictionaries/11disabled_if_in_filelist/tiramisu/base.py
index 203f3b501..3c47e546c 100644
--- a/tests/dictionaries/11disabled_if_in_filelist/tiramisu/base.py
+++ b/tests/dictionaries/11disabled_if_in_filelist/tiramisu/base.py
@@ -16,12 +16,12 @@ option_4 = StrOption(name="mode_conteneur_actif", doc="No change", default="non"
option_5 = BoolOption(name="mode_conteneur_actif2", doc="No change", default=True, properties=frozenset({"mandatory", "normal", Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_3, todict=True), 'expected': ParamValue("oui")}))}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3, option_4, option_5], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_10 = StrOption(name="group", doc="group", default="root")
-option_11 = StrOption(name="mode", doc="mode", default="0644")
-option_12 = FilenameOption(name="name", doc="name", default="/etc/file")
-option_13 = StrOption(name="owner", doc="owner", default="root")
-option_14 = StrOption(name="source", doc="source", default="file")
-option_15 = StrOption(name="templating", doc="templating", default="creole")
+option_10 = StrOption(name="engine", doc="engine", default="creole")
+option_11 = StrOption(name="group", doc="group", default="root")
+option_12 = StrOption(name="mode", doc="mode", default="0644")
+option_13 = FilenameOption(name="name", doc="name", default="/etc/file")
+option_14 = StrOption(name="owner", doc="owner", default="root")
+option_15 = StrOption(name="source", doc="source", default="file")
option_16 = BoolOption(name="activate", doc="activate", default=Calculation(func.calc_value, Params((ParamValue(False)), kwargs={'default': ParamValue(True), 'condition_0': ParamOption(option_3), 'expected_0': ParamValue("oui")})))
option_9 = OptionDescription(name="file", doc="file", children=[option_10, option_11, option_12, option_13, option_14, option_15, option_16])
option_8 = OptionDescription(name="files", doc="files", children=[option_9])
diff --git a/tests/dictionaries/11disabled_if_in_filelist_boolean/makedict/base.json b/tests/dictionaries/11disabled_if_in_filelist_boolean/makedict/base.json
index 0f7f4949d..03cb0a7fe 100644
--- a/tests/dictionaries/11disabled_if_in_filelist_boolean/makedict/base.json
+++ b/tests/dictionaries/11disabled_if_in_filelist_boolean/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.condition": true, "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.templating": "creole", "services.test.files.file1.activate": false}
+{"rougail.general.condition": true, "services.test.files.file1.engine": "creole", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.activate": false}
diff --git a/tests/dictionaries/11disabled_if_in_filelist_boolean/tiramisu/base.py b/tests/dictionaries/11disabled_if_in_filelist_boolean/tiramisu/base.py
index eaeb5f1a0..34f2360a1 100644
--- a/tests/dictionaries/11disabled_if_in_filelist_boolean/tiramisu/base.py
+++ b/tests/dictionaries/11disabled_if_in_filelist_boolean/tiramisu/base.py
@@ -14,12 +14,12 @@ except:
option_3 = BoolOption(name="condition", doc="condition", default=True, properties=frozenset({"mandatory", "normal"}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_8 = StrOption(name="group", doc="group", default="root")
-option_9 = StrOption(name="mode", doc="mode", default="0644")
-option_10 = FilenameOption(name="name", doc="name", default="/tmp/file1")
-option_11 = StrOption(name="owner", doc="owner", default="root")
-option_12 = StrOption(name="source", doc="source", default="file1")
-option_13 = StrOption(name="templating", doc="templating", default="creole")
+option_8 = StrOption(name="engine", doc="engine", default="creole")
+option_9 = StrOption(name="group", doc="group", default="root")
+option_10 = StrOption(name="mode", doc="mode", default="0644")
+option_11 = FilenameOption(name="name", doc="name", default="/tmp/file1")
+option_12 = StrOption(name="owner", doc="owner", default="root")
+option_13 = StrOption(name="source", doc="source", default="file1")
option_14 = BoolOption(name="activate", doc="activate", default=Calculation(func.calc_value, Params((ParamValue(False)), kwargs={'default': ParamValue(True), 'condition_0': ParamOption(option_3), 'expected_0': ParamValue(True)})))
option_7 = OptionDescription(name="file1", doc="file1", children=[option_8, option_9, option_10, option_11, option_12, option_13, option_14])
option_6 = OptionDescription(name="files", doc="files", children=[option_7])
diff --git a/tests/dictionaries/11disabled_if_in_filelist_boolean2/makedict/base.json b/tests/dictionaries/11disabled_if_in_filelist_boolean2/makedict/base.json
index 9905b3992..4a46804dd 100644
--- a/tests/dictionaries/11disabled_if_in_filelist_boolean2/makedict/base.json
+++ b/tests/dictionaries/11disabled_if_in_filelist_boolean2/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.condition": false, "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.templating": "creole", "services.test.files.file1.activate": true}
+{"rougail.general.condition": false, "services.test.files.file1.engine": "creole", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.activate": true}
diff --git a/tests/dictionaries/11disabled_if_in_filelist_boolean2/tiramisu/base.py b/tests/dictionaries/11disabled_if_in_filelist_boolean2/tiramisu/base.py
index 20bfffa1a..dc07321e3 100644
--- a/tests/dictionaries/11disabled_if_in_filelist_boolean2/tiramisu/base.py
+++ b/tests/dictionaries/11disabled_if_in_filelist_boolean2/tiramisu/base.py
@@ -14,12 +14,12 @@ except:
option_3 = BoolOption(name="condition", doc="condition", default=False, properties=frozenset({"mandatory", "normal"}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_8 = StrOption(name="group", doc="group", default="root")
-option_9 = StrOption(name="mode", doc="mode", default="0644")
-option_10 = FilenameOption(name="name", doc="name", default="/tmp/file1")
-option_11 = StrOption(name="owner", doc="owner", default="root")
-option_12 = StrOption(name="source", doc="source", default="file1")
-option_13 = StrOption(name="templating", doc="templating", default="creole")
+option_8 = StrOption(name="engine", doc="engine", default="creole")
+option_9 = StrOption(name="group", doc="group", default="root")
+option_10 = StrOption(name="mode", doc="mode", default="0644")
+option_11 = FilenameOption(name="name", doc="name", default="/tmp/file1")
+option_12 = StrOption(name="owner", doc="owner", default="root")
+option_13 = StrOption(name="source", doc="source", default="file1")
option_14 = BoolOption(name="activate", doc="activate", default=Calculation(func.calc_value, Params((ParamValue(False)), kwargs={'default': ParamValue(True), 'condition_0': ParamOption(option_3), 'expected_0': ParamValue(True)})))
option_7 = OptionDescription(name="file1", doc="file1", children=[option_8, option_9, option_10, option_11, option_12, option_13, option_14])
option_6 = OptionDescription(name="files", doc="files", children=[option_7])
diff --git a/tests/dictionaries/11disabled_if_in_filelist_disabled/makedict/base.json b/tests/dictionaries/11disabled_if_in_filelist_disabled/makedict/base.json
index 53f6a46c4..14a7791de 100644
--- a/tests/dictionaries/11disabled_if_in_filelist_disabled/makedict/base.json
+++ b/tests/dictionaries/11disabled_if_in_filelist_disabled/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.condition": "oui", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/etc/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.templating": "creole", "services.test.files.file.activate": false}
+{"rougail.general.condition": "oui", "services.test.files.file.engine": "creole", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/etc/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.activate": false}
diff --git a/tests/dictionaries/11disabled_if_in_filelist_disabled/tiramisu/base.py b/tests/dictionaries/11disabled_if_in_filelist_disabled/tiramisu/base.py
index c4f42074d..5a23ff2eb 100644
--- a/tests/dictionaries/11disabled_if_in_filelist_disabled/tiramisu/base.py
+++ b/tests/dictionaries/11disabled_if_in_filelist_disabled/tiramisu/base.py
@@ -16,12 +16,12 @@ option_4 = StrOption(name="mode_conteneur_actif", doc="No change", default="non"
option_5 = StrOption(name="mode_conteneur_actif2", doc="No change", default="non", properties=frozenset({"mandatory", "normal", Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_3, todict=True), 'expected': ParamValue("oui")}))}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3, option_4, option_5], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_10 = StrOption(name="group", doc="group", default="root")
-option_11 = StrOption(name="mode", doc="mode", default="0644")
-option_12 = FilenameOption(name="name", doc="name", default="/etc/file")
-option_13 = StrOption(name="owner", doc="owner", default="root")
-option_14 = StrOption(name="source", doc="source", default="file")
-option_15 = StrOption(name="templating", doc="templating", default="creole")
+option_10 = StrOption(name="engine", doc="engine", default="creole")
+option_11 = StrOption(name="group", doc="group", default="root")
+option_12 = StrOption(name="mode", doc="mode", default="0644")
+option_13 = FilenameOption(name="name", doc="name", default="/etc/file")
+option_14 = StrOption(name="owner", doc="owner", default="root")
+option_15 = StrOption(name="source", doc="source", default="file")
option_16 = BoolOption(name="activate", doc="activate", default=Calculation(func.calc_value, Params((ParamValue(False)), kwargs={'default': ParamValue(True), 'condition_0': ParamOption(option_3), 'expected_0': ParamValue("oui")})))
option_9 = OptionDescription(name="file", doc="file", children=[option_10, option_11, option_12, option_13, option_14, option_15, option_16])
option_8 = OptionDescription(name="files", doc="files", children=[option_9])
diff --git a/tests/dictionaries/11disabled_if_in_filelist_multi/makedict/base.json b/tests/dictionaries/11disabled_if_in_filelist_multi/makedict/base.json
index be1aaa5d5..9c7ff3c9c 100644
--- a/tests/dictionaries/11disabled_if_in_filelist_multi/makedict/base.json
+++ b/tests/dictionaries/11disabled_if_in_filelist_multi/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.templating": "creole", "services.test.files.file1.activate": true, "services.test.files.file2.group": "root", "services.test.files.file2.mode": "0644", "services.test.files.file2.name": "/tmp/file2", "services.test.files.file2.owner": "root", "services.test.files.file2.source": "file2", "services.test.files.file2.templating": "creole", "services.test.files.file2.activate": true}
+{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.test.files.file1.engine": "creole", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.activate": true, "services.test.files.file2.engine": "creole", "services.test.files.file2.group": "root", "services.test.files.file2.mode": "0644", "services.test.files.file2.name": "/tmp/file2", "services.test.files.file2.owner": "root", "services.test.files.file2.source": "file2", "services.test.files.file2.activate": true}
diff --git a/tests/dictionaries/11disabled_if_in_filelist_multi/tiramisu/base.py b/tests/dictionaries/11disabled_if_in_filelist_multi/tiramisu/base.py
index 8072af9b6..ba32e4507 100644
--- a/tests/dictionaries/11disabled_if_in_filelist_multi/tiramisu/base.py
+++ b/tests/dictionaries/11disabled_if_in_filelist_multi/tiramisu/base.py
@@ -16,20 +16,20 @@ option_4 = StrOption(name="mode_conteneur_actif", doc="No change", default="non"
option_5 = StrOption(name="mode_conteneur_actif2", doc="No change", default="non", properties=frozenset({"mandatory", "normal", Calculation(func.calc_value, Params(ParamValue('disabled'), kwargs={'condition': ParamOption(option_3, todict=True), 'expected': ParamValue("oui")}))}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3, option_4, option_5], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_10 = StrOption(name="group", doc="group", default="root")
-option_11 = StrOption(name="mode", doc="mode", default="0644")
-option_12 = FilenameOption(name="name", doc="name", default="/tmp/file1")
-option_13 = StrOption(name="owner", doc="owner", default="root")
-option_14 = StrOption(name="source", doc="source", default="file1")
-option_15 = StrOption(name="templating", doc="templating", default="creole")
+option_10 = StrOption(name="engine", doc="engine", default="creole")
+option_11 = StrOption(name="group", doc="group", default="root")
+option_12 = StrOption(name="mode", doc="mode", default="0644")
+option_13 = FilenameOption(name="name", doc="name", default="/tmp/file1")
+option_14 = StrOption(name="owner", doc="owner", default="root")
+option_15 = StrOption(name="source", doc="source", default="file1")
option_16 = BoolOption(name="activate", doc="activate", default=Calculation(func.calc_value, Params((ParamValue(False)), kwargs={'default': ParamValue(True), 'condition_0': ParamOption(option_3), 'expected_0': ParamValue("oui")})))
option_9 = OptionDescription(name="file1", doc="file1", children=[option_10, option_11, option_12, option_13, option_14, option_15, option_16])
-option_18 = StrOption(name="group", doc="group", default="root")
-option_19 = StrOption(name="mode", doc="mode", default="0644")
-option_20 = FilenameOption(name="name", doc="name", default="/tmp/file2")
-option_21 = StrOption(name="owner", doc="owner", default="root")
-option_22 = StrOption(name="source", doc="source", default="file2")
-option_23 = StrOption(name="templating", doc="templating", default="creole")
+option_18 = StrOption(name="engine", doc="engine", default="creole")
+option_19 = StrOption(name="group", doc="group", default="root")
+option_20 = StrOption(name="mode", doc="mode", default="0644")
+option_21 = FilenameOption(name="name", doc="name", default="/tmp/file2")
+option_22 = StrOption(name="owner", doc="owner", default="root")
+option_23 = StrOption(name="source", doc="source", default="file2")
option_24 = BoolOption(name="activate", doc="activate", default=Calculation(func.calc_value, Params((ParamValue(False)), kwargs={'default': ParamValue(True), 'condition_0': ParamOption(option_3), 'expected_0': ParamValue("oui")})))
option_17 = OptionDescription(name="file2", doc="file2", children=[option_18, option_19, option_20, option_21, option_22, option_23, option_24])
option_8 = OptionDescription(name="files", doc="files", children=[option_9, option_17])
diff --git a/tests/dictionaries/11disabledifin_filelist_notexist/makedict/base.json b/tests/dictionaries/11disabledifin_filelist_notexist/makedict/base.json
index b05bc68e7..3d5308eb7 100644
--- a/tests/dictionaries/11disabledifin_filelist_notexist/makedict/base.json
+++ b/tests/dictionaries/11disabledifin_filelist_notexist/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/tmp/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.templating": "creole", "services.test.files.file.activate": false}
+{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.test.files.file.engine": "creole", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/tmp/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.activate": false}
diff --git a/tests/dictionaries/11disabledifin_filelist_notexist/tiramisu/base.py b/tests/dictionaries/11disabledifin_filelist_notexist/tiramisu/base.py
index 75adf3f4d..893abaca8 100644
--- a/tests/dictionaries/11disabledifin_filelist_notexist/tiramisu/base.py
+++ b/tests/dictionaries/11disabledifin_filelist_notexist/tiramisu/base.py
@@ -16,12 +16,12 @@ option_4 = StrOption(name="mode_conteneur_actif", doc="No change", default="non"
option_5 = StrOption(name="mode_conteneur_actif2", doc="No change", default="non", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "mandatory", "normal"}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3, option_4, option_5], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_10 = StrOption(name="group", doc="group", default="root")
-option_11 = StrOption(name="mode", doc="mode", default="0644")
-option_12 = FilenameOption(name="name", doc="name", default="/tmp/file")
-option_13 = StrOption(name="owner", doc="owner", default="root")
-option_14 = StrOption(name="source", doc="source", default="file")
-option_15 = StrOption(name="templating", doc="templating", default="creole")
+option_10 = StrOption(name="engine", doc="engine", default="creole")
+option_11 = StrOption(name="group", doc="group", default="root")
+option_12 = StrOption(name="mode", doc="mode", default="0644")
+option_13 = FilenameOption(name="name", doc="name", default="/tmp/file")
+option_14 = StrOption(name="owner", doc="owner", default="root")
+option_15 = StrOption(name="source", doc="source", default="file")
option_16 = BoolOption(name="activate", doc="activate", default=Calculation(func.calc_value, Params((ParamValue(False)), kwargs={'default': ParamValue(True), 'condition_0': ParamOption(option_3), 'expected_0': ParamValue("unpossible"), 'reverse_condition_0': ParamValue(True)})))
option_9 = OptionDescription(name="file", doc="file", children=[option_10, option_11, option_12, option_13, option_14, option_15, option_16])
option_8 = OptionDescription(name="files", doc="files", children=[option_9])
diff --git a/tests/dictionaries/11disabledifnotin_filelist_notexist/makedict/base.json b/tests/dictionaries/11disabledifnotin_filelist_notexist/makedict/base.json
index b05bc68e7..3d5308eb7 100644
--- a/tests/dictionaries/11disabledifnotin_filelist_notexist/makedict/base.json
+++ b/tests/dictionaries/11disabledifnotin_filelist_notexist/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/tmp/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.templating": "creole", "services.test.files.file.activate": false}
+{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.test.files.file.engine": "creole", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/tmp/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.activate": false}
diff --git a/tests/dictionaries/11disabledifnotin_filelist_notexist/tiramisu/base.py b/tests/dictionaries/11disabledifnotin_filelist_notexist/tiramisu/base.py
index 75adf3f4d..893abaca8 100644
--- a/tests/dictionaries/11disabledifnotin_filelist_notexist/tiramisu/base.py
+++ b/tests/dictionaries/11disabledifnotin_filelist_notexist/tiramisu/base.py
@@ -16,12 +16,12 @@ option_4 = StrOption(name="mode_conteneur_actif", doc="No change", default="non"
option_5 = StrOption(name="mode_conteneur_actif2", doc="No change", default="non", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "mandatory", "normal"}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3, option_4, option_5], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_10 = StrOption(name="group", doc="group", default="root")
-option_11 = StrOption(name="mode", doc="mode", default="0644")
-option_12 = FilenameOption(name="name", doc="name", default="/tmp/file")
-option_13 = StrOption(name="owner", doc="owner", default="root")
-option_14 = StrOption(name="source", doc="source", default="file")
-option_15 = StrOption(name="templating", doc="templating", default="creole")
+option_10 = StrOption(name="engine", doc="engine", default="creole")
+option_11 = StrOption(name="group", doc="group", default="root")
+option_12 = StrOption(name="mode", doc="mode", default="0644")
+option_13 = FilenameOption(name="name", doc="name", default="/tmp/file")
+option_14 = StrOption(name="owner", doc="owner", default="root")
+option_15 = StrOption(name="source", doc="source", default="file")
option_16 = BoolOption(name="activate", doc="activate", default=Calculation(func.calc_value, Params((ParamValue(False)), kwargs={'default': ParamValue(True), 'condition_0': ParamOption(option_3), 'expected_0': ParamValue("unpossible"), 'reverse_condition_0': ParamValue(True)})))
option_9 = OptionDescription(name="file", doc="file", children=[option_10, option_11, option_12, option_13, option_14, option_15, option_16])
option_8 = OptionDescription(name="files", doc="files", children=[option_9])
diff --git a/tests/dictionaries/11disabledifnotin_filelist_notexist_multi/makedict/base.json b/tests/dictionaries/11disabledifnotin_filelist_notexist_multi/makedict/base.json
index b05bc68e7..3d5308eb7 100644
--- a/tests/dictionaries/11disabledifnotin_filelist_notexist_multi/makedict/base.json
+++ b/tests/dictionaries/11disabledifnotin_filelist_notexist_multi/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/tmp/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.templating": "creole", "services.test.files.file.activate": false}
+{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.test.files.file.engine": "creole", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/tmp/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.activate": false}
diff --git a/tests/dictionaries/11disabledifnotin_filelist_notexist_multi/tiramisu/base.py b/tests/dictionaries/11disabledifnotin_filelist_notexist_multi/tiramisu/base.py
index a0f22bc13..63a05b2ee 100644
--- a/tests/dictionaries/11disabledifnotin_filelist_notexist_multi/tiramisu/base.py
+++ b/tests/dictionaries/11disabledifnotin_filelist_notexist_multi/tiramisu/base.py
@@ -16,12 +16,12 @@ option_4 = StrOption(name="mode_conteneur_actif", doc="No change", default="non"
option_5 = StrOption(name="mode_conteneur_actif2", doc="No change", default="non", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "mandatory", "normal"}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3, option_4, option_5], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_10 = StrOption(name="group", doc="group", default="root")
-option_11 = StrOption(name="mode", doc="mode", default="0644")
-option_12 = FilenameOption(name="name", doc="name", default="/tmp/file")
-option_13 = StrOption(name="owner", doc="owner", default="root")
-option_14 = StrOption(name="source", doc="source", default="file")
-option_15 = StrOption(name="templating", doc="templating", default="creole")
+option_10 = StrOption(name="engine", doc="engine", default="creole")
+option_11 = StrOption(name="group", doc="group", default="root")
+option_12 = StrOption(name="mode", doc="mode", default="0644")
+option_13 = FilenameOption(name="name", doc="name", default="/tmp/file")
+option_14 = StrOption(name="owner", doc="owner", default="root")
+option_15 = StrOption(name="source", doc="source", default="file")
option_16 = BoolOption(name="activate", doc="activate", default=Calculation(func.calc_value, Params((ParamValue(False)), kwargs={'default': ParamValue(True), 'condition_0': ParamOption(option_3), 'expected_0': ParamValue("unpossible"), 'reverse_condition_0': ParamValue(True), 'condition_1': ParamOption(option_5), 'expected_1': ParamValue("oui"), 'reverse_condition_1': ParamValue(True), 'condition_operator': ParamValue("OR")})))
option_9 = OptionDescription(name="file", doc="file", children=[option_10, option_11, option_12, option_13, option_14, option_15, option_16])
option_8 = OptionDescription(name="files", doc="files", children=[option_9])
diff --git a/tests/dictionaries/11disabledifnotin_filelist_notexist_validenum/makedict/base.json b/tests/dictionaries/11disabledifnotin_filelist_notexist_validenum/makedict/base.json
index b05bc68e7..3d5308eb7 100644
--- a/tests/dictionaries/11disabledifnotin_filelist_notexist_validenum/makedict/base.json
+++ b/tests/dictionaries/11disabledifnotin_filelist_notexist_validenum/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/tmp/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.templating": "creole", "services.test.files.file.activate": false}
+{"rougail.general.condition": "non", "rougail.general.mode_conteneur_actif": "non", "rougail.general.mode_conteneur_actif2": "non", "services.test.files.file.engine": "creole", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/tmp/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.activate": false}
diff --git a/tests/dictionaries/11disabledifnotin_filelist_notexist_validenum/tiramisu/base.py b/tests/dictionaries/11disabledifnotin_filelist_notexist_validenum/tiramisu/base.py
index 7759aa668..60226f913 100644
--- a/tests/dictionaries/11disabledifnotin_filelist_notexist_validenum/tiramisu/base.py
+++ b/tests/dictionaries/11disabledifnotin_filelist_notexist_validenum/tiramisu/base.py
@@ -16,12 +16,12 @@ option_4 = StrOption(name="mode_conteneur_actif", doc="No change", default="non"
option_5 = StrOption(name="mode_conteneur_actif2", doc="No change", default="non", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "mandatory", "normal"}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3, option_4, option_5], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_10 = StrOption(name="group", doc="group", default="root")
-option_11 = StrOption(name="mode", doc="mode", default="0644")
-option_12 = FilenameOption(name="name", doc="name", default="/tmp/file")
-option_13 = StrOption(name="owner", doc="owner", default="root")
-option_14 = StrOption(name="source", doc="source", default="file")
-option_15 = StrOption(name="templating", doc="templating", default="creole")
+option_10 = StrOption(name="engine", doc="engine", default="creole")
+option_11 = StrOption(name="group", doc="group", default="root")
+option_12 = StrOption(name="mode", doc="mode", default="0644")
+option_13 = FilenameOption(name="name", doc="name", default="/tmp/file")
+option_14 = StrOption(name="owner", doc="owner", default="root")
+option_15 = StrOption(name="source", doc="source", default="file")
option_16 = BoolOption(name="activate", doc="activate", default=Calculation(func.calc_value, Params((ParamValue(False)), kwargs={'default': ParamValue(True), 'condition_0': ParamOption(option_3), 'expected_0': ParamValue("statique"), 'reverse_condition_0': ParamValue(True)})))
option_9 = OptionDescription(name="file", doc="file", children=[option_10, option_11, option_12, option_13, option_14, option_15, option_16])
option_8 = OptionDescription(name="files", doc="files", children=[option_9])
diff --git a/tests/dictionaries/11multi_disabled_if_in_filelist/makedict/base.json b/tests/dictionaries/11multi_disabled_if_in_filelist/makedict/base.json
index 7673e135f..0ade809b2 100644
--- a/tests/dictionaries/11multi_disabled_if_in_filelist/makedict/base.json
+++ b/tests/dictionaries/11multi_disabled_if_in_filelist/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.mode_conteneur_actif": "non", "rougail.general.condition": "non", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.templating": "creole", "services.test.files.file1.activate": false}
+{"rougail.general.mode_conteneur_actif": "non", "rougail.general.condition": "non", "services.test.files.file1.engine": "creole", "services.test.files.file1.group": "root", "services.test.files.file1.mode": "0644", "services.test.files.file1.name": "/tmp/file1", "services.test.files.file1.owner": "root", "services.test.files.file1.source": "file1", "services.test.files.file1.activate": false}
diff --git a/tests/dictionaries/11multi_disabled_if_in_filelist/tiramisu/base.py b/tests/dictionaries/11multi_disabled_if_in_filelist/tiramisu/base.py
index 4408179dc..e3e4d898c 100644
--- a/tests/dictionaries/11multi_disabled_if_in_filelist/tiramisu/base.py
+++ b/tests/dictionaries/11multi_disabled_if_in_filelist/tiramisu/base.py
@@ -15,12 +15,12 @@ option_3 = StrOption(name="mode_conteneur_actif", doc="No change", default="non"
option_4 = StrOption(name="condition", doc="No change", default="non", properties=frozenset({"mandatory", "normal"}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3, option_4], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_9 = StrOption(name="group", doc="group", default="root")
-option_10 = StrOption(name="mode", doc="mode", default="0644")
-option_11 = FilenameOption(name="name", doc="name", default="/tmp/file1")
-option_12 = StrOption(name="owner", doc="owner", default="root")
-option_13 = StrOption(name="source", doc="source", default="file1")
-option_14 = StrOption(name="templating", doc="templating", default="creole")
+option_9 = StrOption(name="engine", doc="engine", default="creole")
+option_10 = StrOption(name="group", doc="group", default="root")
+option_11 = StrOption(name="mode", doc="mode", default="0644")
+option_12 = FilenameOption(name="name", doc="name", default="/tmp/file1")
+option_13 = StrOption(name="owner", doc="owner", default="root")
+option_14 = StrOption(name="source", doc="source", default="file1")
option_15 = BoolOption(name="activate", doc="activate", default=False)
option_8 = OptionDescription(name="file1", doc="file1", children=[option_9, option_10, option_11, option_12, option_13, option_14, option_15])
option_7 = OptionDescription(name="files", doc="files", children=[option_8])
diff --git a/tests/dictionaries/20notemplating/00-base.xml b/tests/dictionaries/20notemplating/00-base.xml
index 17d1799ce..67637a508 100644
--- a/tests/dictionaries/20notemplating/00-base.xml
+++ b/tests/dictionaries/20notemplating/00-base.xml
@@ -3,7 +3,7 @@
- /etc/file
+ /etc/file
diff --git a/tests/dictionaries/20notemplating/makedict/base.json b/tests/dictionaries/20notemplating/makedict/base.json
index c466b5b11..722c06679 100644
--- a/tests/dictionaries/20notemplating/makedict/base.json
+++ b/tests/dictionaries/20notemplating/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.mode_conteneur_actif": "non", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/etc/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.templating": "none", "services.test.files.file.activate": true}
+{"rougail.general.mode_conteneur_actif": "non", "services.test.files.file.engine": "none", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/etc/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.activate": true}
diff --git a/tests/dictionaries/20notemplating/tiramisu/base.py b/tests/dictionaries/20notemplating/tiramisu/base.py
index 25608104a..3ce2852fd 100644
--- a/tests/dictionaries/20notemplating/tiramisu/base.py
+++ b/tests/dictionaries/20notemplating/tiramisu/base.py
@@ -14,12 +14,12 @@ except:
option_3 = StrOption(name="mode_conteneur_actif", doc="No change", default="non", properties=frozenset({"mandatory", "normal"}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_8 = StrOption(name="group", doc="group", default="root")
-option_9 = StrOption(name="mode", doc="mode", default="0644")
-option_10 = FilenameOption(name="name", doc="name", default="/etc/file")
-option_11 = StrOption(name="owner", doc="owner", default="root")
-option_12 = StrOption(name="source", doc="source", default="file")
-option_13 = StrOption(name="templating", doc="templating", default="none")
+option_8 = StrOption(name="engine", doc="engine", default="none")
+option_9 = StrOption(name="group", doc="group", default="root")
+option_10 = StrOption(name="mode", doc="mode", default="0644")
+option_11 = FilenameOption(name="name", doc="name", default="/etc/file")
+option_12 = StrOption(name="owner", doc="owner", default="root")
+option_13 = StrOption(name="source", doc="source", default="file")
option_14 = BoolOption(name="activate", doc="activate", default=True)
option_7 = OptionDescription(name="file", doc="file", children=[option_8, option_9, option_10, option_11, option_12, option_13, option_14])
option_6 = OptionDescription(name="files", doc="files", children=[option_7])
diff --git a/tests/dictionaries/20override/makedict/base.json b/tests/dictionaries/20override/makedict/base.json
index 3199d8148..3f421b973 100644
--- a/tests/dictionaries/20override/makedict/base.json
+++ b/tests/dictionaries/20override/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.mode_conteneur_actif": "non", "services.test.overrides.test_service.group": "root", "services.test.overrides.test_service.mode": "0644", "services.test.overrides.test_service.name": "/systemd/system/test.service.d/rougail.conf", "services.test.overrides.test_service.owner": "root", "services.test.overrides.test_service.source": "test.service", "services.test.overrides.test_service.templating": "creole", "services.test.overrides.test_service.activate": true}
+{"rougail.general.mode_conteneur_actif": "non", "services.test.overrides.test_service.engine": "creole", "services.test.overrides.test_service.group": "root", "services.test.overrides.test_service.mode": "0644", "services.test.overrides.test_service.name": "/systemd/system/test.service.d/rougail.conf", "services.test.overrides.test_service.owner": "root", "services.test.overrides.test_service.source": "test.service", "services.test.overrides.test_service.activate": true}
diff --git a/tests/dictionaries/20override/tiramisu/base.py b/tests/dictionaries/20override/tiramisu/base.py
index 310440f55..ab8163af1 100644
--- a/tests/dictionaries/20override/tiramisu/base.py
+++ b/tests/dictionaries/20override/tiramisu/base.py
@@ -14,12 +14,12 @@ except:
option_3 = StrOption(name="mode_conteneur_actif", doc="No change", default="non", properties=frozenset({"mandatory", "normal"}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_8 = StrOption(name="group", doc="group", default="root")
-option_9 = StrOption(name="mode", doc="mode", default="0644")
-option_10 = StrOption(name="name", doc="name", default="/systemd/system/test.service.d/rougail.conf")
-option_11 = StrOption(name="owner", doc="owner", default="root")
-option_12 = StrOption(name="source", doc="source", default="test.service")
-option_13 = StrOption(name="templating", doc="templating", default="creole")
+option_8 = StrOption(name="engine", doc="engine", default="creole")
+option_9 = StrOption(name="group", doc="group", default="root")
+option_10 = StrOption(name="mode", doc="mode", default="0644")
+option_11 = StrOption(name="name", doc="name", default="/systemd/system/test.service.d/rougail.conf")
+option_12 = StrOption(name="owner", doc="owner", default="root")
+option_13 = StrOption(name="source", doc="source", default="test.service")
option_14 = BoolOption(name="activate", doc="activate", default=True)
option_7 = OptionDescription(name="test_service", doc="test.service", children=[option_8, option_9, option_10, option_11, option_12, option_13, option_14])
option_6 = OptionDescription(name="overrides", doc="overrides", children=[option_7])
diff --git a/tests/dictionaries/20override_no_templating/00-base.xml b/tests/dictionaries/20override_no_templating/00-base.xml
index 1feea0590..ed5be6658 100644
--- a/tests/dictionaries/20override_no_templating/00-base.xml
+++ b/tests/dictionaries/20override_no_templating/00-base.xml
@@ -3,7 +3,7 @@
-
+
diff --git a/tests/dictionaries/20override_no_templating/makedict/base.json b/tests/dictionaries/20override_no_templating/makedict/base.json
index 9f2b586cf..2a20c2447 100644
--- a/tests/dictionaries/20override_no_templating/makedict/base.json
+++ b/tests/dictionaries/20override_no_templating/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.mode_conteneur_actif": "non", "services.test.overrides.test_service.group": "root", "services.test.overrides.test_service.mode": "0644", "services.test.overrides.test_service.name": "/systemd/system/test.service.d/rougail.conf", "services.test.overrides.test_service.owner": "root", "services.test.overrides.test_service.source": "test.service", "services.test.overrides.test_service.templating": "none", "services.test.overrides.test_service.activate": true}
+{"rougail.general.mode_conteneur_actif": "non", "services.test.overrides.test_service.engine": "none", "services.test.overrides.test_service.group": "root", "services.test.overrides.test_service.mode": "0644", "services.test.overrides.test_service.name": "/systemd/system/test.service.d/rougail.conf", "services.test.overrides.test_service.owner": "root", "services.test.overrides.test_service.source": "test.service", "services.test.overrides.test_service.activate": true}
diff --git a/tests/dictionaries/20override_no_templating/tiramisu/base.py b/tests/dictionaries/20override_no_templating/tiramisu/base.py
index 3bdc9e280..d8a943cc3 100644
--- a/tests/dictionaries/20override_no_templating/tiramisu/base.py
+++ b/tests/dictionaries/20override_no_templating/tiramisu/base.py
@@ -14,12 +14,12 @@ except:
option_3 = StrOption(name="mode_conteneur_actif", doc="No change", default="non", properties=frozenset({"mandatory", "normal"}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_8 = StrOption(name="group", doc="group", default="root")
-option_9 = StrOption(name="mode", doc="mode", default="0644")
-option_10 = StrOption(name="name", doc="name", default="/systemd/system/test.service.d/rougail.conf")
-option_11 = StrOption(name="owner", doc="owner", default="root")
-option_12 = StrOption(name="source", doc="source", default="test.service")
-option_13 = StrOption(name="templating", doc="templating", default="none")
+option_8 = StrOption(name="engine", doc="engine", default="none")
+option_9 = StrOption(name="group", doc="group", default="root")
+option_10 = StrOption(name="mode", doc="mode", default="0644")
+option_11 = StrOption(name="name", doc="name", default="/systemd/system/test.service.d/rougail.conf")
+option_12 = StrOption(name="owner", doc="owner", default="root")
+option_13 = StrOption(name="source", doc="source", default="test.service")
option_14 = BoolOption(name="activate", doc="activate", default=True)
option_7 = OptionDescription(name="test_service", doc="test.service", children=[option_8, option_9, option_10, option_11, option_12, option_13, option_14])
option_6 = OptionDescription(name="overrides", doc="overrides", children=[option_7])
diff --git a/tests/dictionaries/20override_source/makedict/base.json b/tests/dictionaries/20override_source/makedict/base.json
index 645c0bb70..855228056 100644
--- a/tests/dictionaries/20override_source/makedict/base.json
+++ b/tests/dictionaries/20override_source/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.mode_conteneur_actif": "non", "services.test.overrides.test2_service.group": "root", "services.test.overrides.test2_service.mode": "0644", "services.test.overrides.test2_service.name": "/systemd/system/test.service.d/rougail.conf", "services.test.overrides.test2_service.owner": "root", "services.test.overrides.test2_service.source": "test2.service", "services.test.overrides.test2_service.templating": "creole", "services.test.overrides.test2_service.activate": true}
+{"rougail.general.mode_conteneur_actif": "non", "services.test.overrides.test2_service.engine": "creole", "services.test.overrides.test2_service.group": "root", "services.test.overrides.test2_service.mode": "0644", "services.test.overrides.test2_service.name": "/systemd/system/test.service.d/rougail.conf", "services.test.overrides.test2_service.owner": "root", "services.test.overrides.test2_service.source": "test2.service", "services.test.overrides.test2_service.activate": true}
diff --git a/tests/dictionaries/20override_source/tiramisu/base.py b/tests/dictionaries/20override_source/tiramisu/base.py
index d9a14cba4..7c3e25eed 100644
--- a/tests/dictionaries/20override_source/tiramisu/base.py
+++ b/tests/dictionaries/20override_source/tiramisu/base.py
@@ -14,12 +14,12 @@ except:
option_3 = StrOption(name="mode_conteneur_actif", doc="No change", default="non", properties=frozenset({"mandatory", "normal"}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_8 = StrOption(name="group", doc="group", default="root")
-option_9 = StrOption(name="mode", doc="mode", default="0644")
-option_10 = StrOption(name="name", doc="name", default="/systemd/system/test.service.d/rougail.conf")
-option_11 = StrOption(name="owner", doc="owner", default="root")
-option_12 = StrOption(name="source", doc="source", default="test2.service")
-option_13 = StrOption(name="templating", doc="templating", default="creole")
+option_8 = StrOption(name="engine", doc="engine", default="creole")
+option_9 = StrOption(name="group", doc="group", default="root")
+option_10 = StrOption(name="mode", doc="mode", default="0644")
+option_11 = StrOption(name="name", doc="name", default="/systemd/system/test.service.d/rougail.conf")
+option_12 = StrOption(name="owner", doc="owner", default="root")
+option_13 = StrOption(name="source", doc="source", default="test2.service")
option_14 = BoolOption(name="activate", doc="activate", default=True)
option_7 = OptionDescription(name="test2_service", doc="test2.service", children=[option_8, option_9, option_10, option_11, option_12, option_13, option_14])
option_6 = OptionDescription(name="overrides", doc="overrides", children=[option_7])
diff --git a/tests/dictionaries/40ifin_leadershipauto/makedict/base.json b/tests/dictionaries/40ifin_leadershipauto/makedict/base.json
index ea91c26f8..ff6a2a382 100644
--- a/tests/dictionaries/40ifin_leadershipauto/makedict/base.json
+++ b/tests/dictionaries/40ifin_leadershipauto/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.mode_conteneur_actif": "non", "rougail.general.condition": "oui", "rougail.general.leader.leader": [{"rougail.general.leader.leader": "a", "rougail.general.leader.follower2": null}], "services.test.files.mailname.group": "root", "services.test.files.mailname.mode": "0644", "services.test.files.mailname.name": "/etc/mailname", "services.test.files.mailname.owner": "root", "services.test.files.mailname.source": "mailname", "services.test.files.mailname.templating": "creole", "services.test.files.mailname.activate": true}
+{"rougail.general.mode_conteneur_actif": "non", "rougail.general.condition": "oui", "rougail.general.leader.leader": [{"rougail.general.leader.leader": "a", "rougail.general.leader.follower2": null}], "services.test.files.mailname.engine": "creole", "services.test.files.mailname.group": "root", "services.test.files.mailname.mode": "0644", "services.test.files.mailname.name": "/etc/mailname", "services.test.files.mailname.owner": "root", "services.test.files.mailname.source": "mailname", "services.test.files.mailname.activate": true}
diff --git a/tests/dictionaries/40ifin_leadershipauto/tiramisu/base.py b/tests/dictionaries/40ifin_leadershipauto/tiramisu/base.py
index 59c5b4e0d..1e194d7bb 100644
--- a/tests/dictionaries/40ifin_leadershipauto/tiramisu/base.py
+++ b/tests/dictionaries/40ifin_leadershipauto/tiramisu/base.py
@@ -19,12 +19,12 @@ option_8 = StrOption(name="follower2", doc="follower2", multi=True, properties=f
option_5 = Leadership(name="leader", doc="leader", children=[option_6, option_7, option_8], properties=frozenset({"normal"}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3, option_4, option_5], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_13 = StrOption(name="group", doc="group", default="root")
-option_14 = StrOption(name="mode", doc="mode", default="0644")
-option_15 = FilenameOption(name="name", doc="name", default="/etc/mailname")
-option_16 = StrOption(name="owner", doc="owner", default="root")
-option_17 = StrOption(name="source", doc="source", default="mailname")
-option_18 = StrOption(name="templating", doc="templating", default="creole")
+option_13 = StrOption(name="engine", doc="engine", default="creole")
+option_14 = StrOption(name="group", doc="group", default="root")
+option_15 = StrOption(name="mode", doc="mode", default="0644")
+option_16 = FilenameOption(name="name", doc="name", default="/etc/mailname")
+option_17 = StrOption(name="owner", doc="owner", default="root")
+option_18 = StrOption(name="source", doc="source", default="mailname")
option_19 = BoolOption(name="activate", doc="activate", default=True)
option_12 = OptionDescription(name="mailname", doc="mailname", children=[option_13, option_14, option_15, option_16, option_17, option_18, option_19])
option_11 = OptionDescription(name="files", doc="files", children=[option_12])
diff --git a/tests/dictionaries/40ifin_leadershipauto_follower/makedict/base.json b/tests/dictionaries/40ifin_leadershipauto_follower/makedict/base.json
index cc75c97eb..d62bf5fd5 100644
--- a/tests/dictionaries/40ifin_leadershipauto_follower/makedict/base.json
+++ b/tests/dictionaries/40ifin_leadershipauto_follower/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.mode_conteneur_actif": "non", "rougail.general.condition": "oui", "rougail.general.leader.leader": [{"rougail.general.leader.leader": "a", "rougail.general.leader.follower2": null}, {"rougail.general.leader.leader": "b", "rougail.general.leader.follower1": null, "rougail.general.leader.follower2": null}], "services.test.files.mailname.group": "root", "services.test.files.mailname.mode": "0644", "services.test.files.mailname.name": "/etc/mailname", "services.test.files.mailname.owner": "root", "services.test.files.mailname.source": "mailname", "services.test.files.mailname.templating": "creole", "services.test.files.mailname.activate": true}
+{"rougail.general.mode_conteneur_actif": "non", "rougail.general.condition": "oui", "rougail.general.leader.leader": [{"rougail.general.leader.leader": "a", "rougail.general.leader.follower2": null}, {"rougail.general.leader.leader": "b", "rougail.general.leader.follower1": null, "rougail.general.leader.follower2": null}], "services.test.files.mailname.engine": "creole", "services.test.files.mailname.group": "root", "services.test.files.mailname.mode": "0644", "services.test.files.mailname.name": "/etc/mailname", "services.test.files.mailname.owner": "root", "services.test.files.mailname.source": "mailname", "services.test.files.mailname.activate": true}
diff --git a/tests/dictionaries/40ifin_leadershipauto_follower/tiramisu/base.py b/tests/dictionaries/40ifin_leadershipauto_follower/tiramisu/base.py
index 0034ae996..f4fe7ffbb 100644
--- a/tests/dictionaries/40ifin_leadershipauto_follower/tiramisu/base.py
+++ b/tests/dictionaries/40ifin_leadershipauto_follower/tiramisu/base.py
@@ -19,12 +19,12 @@ option_8 = StrOption(name="follower2", doc="follower2", multi=True, properties=f
option_5 = Leadership(name="leader", doc="leader", children=[option_6, option_7, option_8], properties=frozenset({"normal"}))
option_2 = OptionDescription(name="general", doc="general", children=[option_3, option_4, option_5], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_13 = StrOption(name="group", doc="group", default="root")
-option_14 = StrOption(name="mode", doc="mode", default="0644")
-option_15 = FilenameOption(name="name", doc="name", default="/etc/mailname")
-option_16 = StrOption(name="owner", doc="owner", default="root")
-option_17 = StrOption(name="source", doc="source", default="mailname")
-option_18 = StrOption(name="templating", doc="templating", default="creole")
+option_13 = StrOption(name="engine", doc="engine", default="creole")
+option_14 = StrOption(name="group", doc="group", default="root")
+option_15 = StrOption(name="mode", doc="mode", default="0644")
+option_16 = FilenameOption(name="name", doc="name", default="/etc/mailname")
+option_17 = StrOption(name="owner", doc="owner", default="root")
+option_18 = StrOption(name="source", doc="source", default="mailname")
option_19 = BoolOption(name="activate", doc="activate", default=True)
option_12 = OptionDescription(name="mailname", doc="mailname", children=[option_13, option_14, option_15, option_16, option_17, option_18, option_19])
option_11 = OptionDescription(name="files", doc="files", children=[option_12])
diff --git a/tests/dictionaries/45extra_without_family/makedict/base.json b/tests/dictionaries/45extra_without_family/makedict/base.json
index f78601d23..fa08f9adb 100644
--- a/tests/dictionaries/45extra_without_family/makedict/base.json
+++ b/tests/dictionaries/45extra_without_family/makedict/base.json
@@ -1 +1 @@
-{"rougail.my_var": "rougail", "extra.my_var": null, "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/etc/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.templating": "creole", "services.test.files.file.activate": true}
+{"rougail.my_var": "rougail", "extra.my_var": null, "services.test.files.file.engine": "creole", "services.test.files.file.group": "root", "services.test.files.file.mode": "0644", "services.test.files.file.name": "/etc/file", "services.test.files.file.owner": "root", "services.test.files.file.source": "file", "services.test.files.file.activate": true}
diff --git a/tests/dictionaries/45extra_without_family/tiramisu/base.py b/tests/dictionaries/45extra_without_family/tiramisu/base.py
index 6ad149f31..6b313e835 100644
--- a/tests/dictionaries/45extra_without_family/tiramisu/base.py
+++ b/tests/dictionaries/45extra_without_family/tiramisu/base.py
@@ -15,12 +15,12 @@ option_2 = StrOption(name="my_var", doc="my_var", default="rougail", properties=
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
option_4 = StrOption(name="my_var", doc="my_var", default=Calculation(func.calc_multi_condition, Params((ParamValue("non")))), properties=frozenset({"normal"}))
option_3 = OptionDescription(name="extra", doc="extra", children=[option_4])
-option_9 = StrOption(name="group", doc="group", default="root")
-option_10 = StrOption(name="mode", doc="mode", default="0644")
-option_11 = FilenameOption(name="name", doc="name", default="/etc/file")
-option_12 = StrOption(name="owner", doc="owner", default="root")
-option_13 = StrOption(name="source", doc="source", default="file")
-option_14 = StrOption(name="templating", doc="templating", default="creole")
+option_9 = StrOption(name="engine", doc="engine", default="creole")
+option_10 = StrOption(name="group", doc="group", default="root")
+option_11 = StrOption(name="mode", doc="mode", default="0644")
+option_12 = FilenameOption(name="name", doc="name", default="/etc/file")
+option_13 = StrOption(name="owner", doc="owner", default="root")
+option_14 = StrOption(name="source", doc="source", default="file")
option_15 = BoolOption(name="activate", doc="activate", default=True)
option_8 = OptionDescription(name="file", doc="file", children=[option_9, option_10, option_11, option_12, option_13, option_14, option_15])
option_7 = OptionDescription(name="files", doc="files", children=[option_8])
diff --git a/tests/dictionaries/60extra_group/makedict/base.json b/tests/dictionaries/60extra_group/makedict/base.json
index a1fcc2327..b8be046fb 100644
--- a/tests/dictionaries/60extra_group/makedict/base.json
+++ b/tests/dictionaries/60extra_group/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.mode_conteneur_actif": "non", "rougail.general.activer_ejabberd": "non", "extra.ejabberd.description.description": [{"extra.ejabberd.description.description": "test", "extra.ejabberd.description.mode": "pre"}], "services.test.files.mailname.group": "root", "services.test.files.mailname.mode": "0644", "services.test.files.mailname.name": "/etc/mailname", "services.test.files.mailname.owner": "root", "services.test.files.mailname.source": "mailname", "services.test.files.mailname.templating": "creole", "services.test.files.mailname.activate": true}
+{"rougail.general.mode_conteneur_actif": "non", "rougail.general.activer_ejabberd": "non", "extra.ejabberd.description.description": [{"extra.ejabberd.description.description": "test", "extra.ejabberd.description.mode": "pre"}], "services.test.files.mailname.engine": "creole", "services.test.files.mailname.group": "root", "services.test.files.mailname.mode": "0644", "services.test.files.mailname.name": "/etc/mailname", "services.test.files.mailname.owner": "root", "services.test.files.mailname.source": "mailname", "services.test.files.mailname.activate": true}
diff --git a/tests/dictionaries/60extra_group/tiramisu/base.py b/tests/dictionaries/60extra_group/tiramisu/base.py
index eee42aa7c..437937a91 100644
--- a/tests/dictionaries/60extra_group/tiramisu/base.py
+++ b/tests/dictionaries/60extra_group/tiramisu/base.py
@@ -20,12 +20,12 @@ option_9 = StrOption(name="mode", doc="mode", multi=True, default_multi="pre", p
option_7 = Leadership(name="description", doc="description", 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 = StrOption(name="group", doc="group", default="root")
-option_15 = StrOption(name="mode", doc="mode", default="0644")
-option_16 = FilenameOption(name="name", doc="name", default="/etc/mailname")
-option_17 = StrOption(name="owner", doc="owner", default="root")
-option_18 = StrOption(name="source", doc="source", default="mailname")
-option_19 = StrOption(name="templating", doc="templating", default="creole")
+option_14 = StrOption(name="engine", doc="engine", default="creole")
+option_15 = StrOption(name="group", doc="group", default="root")
+option_16 = StrOption(name="mode", doc="mode", default="0644")
+option_17 = FilenameOption(name="name", doc="name", default="/etc/mailname")
+option_18 = StrOption(name="owner", doc="owner", default="root")
+option_19 = StrOption(name="source", doc="source", default="mailname")
option_20 = BoolOption(name="activate", doc="activate", default=True)
option_13 = OptionDescription(name="mailname", doc="mailname", children=[option_14, option_15, option_16, option_17, option_18, option_19, option_20])
option_12 = OptionDescription(name="files", doc="files", children=[option_13])
diff --git a/tests/dictionaries/60extra_help/makedict/base.json b/tests/dictionaries/60extra_help/makedict/base.json
index d0618c668..416240857 100644
--- a/tests/dictionaries/60extra_help/makedict/base.json
+++ b/tests/dictionaries/60extra_help/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.mode_conteneur_actif": "non", "rougail.general.activer_ejabberd": "non", "extra.ejabberd.description": "Exportation de la base de ejabberd", "extra.ejabberd.day": null, "extra.ejabberd.mode": "pre", "services.test.files.mailname.group": "root", "services.test.files.mailname.mode": "0644", "services.test.files.mailname.name": "/etc/mailname", "services.test.files.mailname.owner": "root", "services.test.files.mailname.source": "mailname", "services.test.files.mailname.templating": "creole", "services.test.files.mailname.activate": true}
+{"rougail.general.mode_conteneur_actif": "non", "rougail.general.activer_ejabberd": "non", "extra.ejabberd.description": "Exportation de la base de ejabberd", "extra.ejabberd.day": null, "extra.ejabberd.mode": "pre", "services.test.files.mailname.engine": "creole", "services.test.files.mailname.group": "root", "services.test.files.mailname.mode": "0644", "services.test.files.mailname.name": "/etc/mailname", "services.test.files.mailname.owner": "root", "services.test.files.mailname.source": "mailname", "services.test.files.mailname.activate": true}
diff --git a/tests/dictionaries/60extra_help/tiramisu/base.py b/tests/dictionaries/60extra_help/tiramisu/base.py
index 7e2d6c7ba..b76df2e04 100644
--- a/tests/dictionaries/60extra_help/tiramisu/base.py
+++ b/tests/dictionaries/60extra_help/tiramisu/base.py
@@ -21,12 +21,12 @@ option_8.impl_set_information('help', "Test help")
option_9 = ChoiceOption(name="mode", doc="mode", values=('pre', 'post'), default="pre", properties=frozenset({"mandatory", "normal"}))
option_6 = OptionDescription(name="ejabberd", doc="ejabberd", children=[option_7, option_8, option_9], properties=frozenset({"normal"}))
option_5 = OptionDescription(name="extra", doc="extra", children=[option_6])
-option_14 = StrOption(name="group", doc="group", default="root")
-option_15 = StrOption(name="mode", doc="mode", default="0644")
-option_16 = FilenameOption(name="name", doc="name", default="/etc/mailname")
-option_17 = StrOption(name="owner", doc="owner", default="root")
-option_18 = StrOption(name="source", doc="source", default="mailname")
-option_19 = StrOption(name="templating", doc="templating", default="creole")
+option_14 = StrOption(name="engine", doc="engine", default="creole")
+option_15 = StrOption(name="group", doc="group", default="root")
+option_16 = StrOption(name="mode", doc="mode", default="0644")
+option_17 = FilenameOption(name="name", doc="name", default="/etc/mailname")
+option_18 = StrOption(name="owner", doc="owner", default="root")
+option_19 = StrOption(name="source", doc="source", default="mailname")
option_20 = BoolOption(name="activate", doc="activate", default=True)
option_13 = OptionDescription(name="mailname", doc="mailname", children=[option_14, option_15, option_16, option_17, option_18, option_19, option_20])
option_12 = OptionDescription(name="files", doc="files", children=[option_13])
diff --git a/tests/dictionaries/70container_files/makedict/base.json b/tests/dictionaries/70container_files/makedict/base.json
index 83da4f6b3..da4649ab4 100644
--- a/tests/dictionaries/70container_files/makedict/base.json
+++ b/tests/dictionaries/70container_files/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.mode_conteneur_actif": "oui", "services.test.files.mailname.group": "root", "services.test.files.mailname.mode": "0644", "services.test.files.mailname.name": "/etc/mailname", "services.test.files.mailname.owner": "root", "services.test.files.mailname.source": "mailname", "services.test.files.mailname.templating": "creole", "services.test.files.mailname.activate": true, "services.test.files.rougail_conf.group": "root", "services.test.files.rougail_conf.mode": "0644", "services.test.files.rougail_conf.name": "/rougail.conf", "services.test.files.rougail_conf.owner": "root", "services.test.files.rougail_conf.source": "rougail.conf", "services.test.files.rougail_conf.templating": "creole", "services.test.files.rougail_conf.activate": true}
+{"rougail.general.mode_conteneur_actif": "oui", "services.test.files.mailname.engine": "creole", "services.test.files.mailname.group": "root", "services.test.files.mailname.mode": "0644", "services.test.files.mailname.name": "/etc/mailname", "services.test.files.mailname.owner": "root", "services.test.files.mailname.source": "mailname", "services.test.files.mailname.activate": true, "services.test.files.rougail_conf.engine": "creole", "services.test.files.rougail_conf.group": "root", "services.test.files.rougail_conf.mode": "0644", "services.test.files.rougail_conf.name": "/rougail.conf", "services.test.files.rougail_conf.owner": "root", "services.test.files.rougail_conf.source": "rougail.conf", "services.test.files.rougail_conf.activate": true}
diff --git a/tests/dictionaries/70container_files/tiramisu/base.py b/tests/dictionaries/70container_files/tiramisu/base.py
index 94d6c4f33..f23861a1b 100644
--- a/tests/dictionaries/70container_files/tiramisu/base.py
+++ b/tests/dictionaries/70container_files/tiramisu/base.py
@@ -14,20 +14,20 @@ except:
option_3 = StrOption(name="mode_conteneur_actif", doc="No change", default="oui", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "mandatory", "normal"}))
option_2 = OptionDescription(name="general", doc="général", children=[option_3], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_8 = StrOption(name="group", doc="group", default="root")
-option_9 = StrOption(name="mode", doc="mode", default="0644")
-option_10 = FilenameOption(name="name", doc="name", default="/etc/mailname")
-option_11 = StrOption(name="owner", doc="owner", default="root")
-option_12 = StrOption(name="source", doc="source", default="mailname")
-option_13 = StrOption(name="templating", doc="templating", default="creole")
+option_8 = StrOption(name="engine", doc="engine", default="creole")
+option_9 = StrOption(name="group", doc="group", default="root")
+option_10 = StrOption(name="mode", doc="mode", default="0644")
+option_11 = FilenameOption(name="name", doc="name", default="/etc/mailname")
+option_12 = StrOption(name="owner", doc="owner", default="root")
+option_13 = StrOption(name="source", doc="source", default="mailname")
option_14 = BoolOption(name="activate", doc="activate", default=True)
option_7 = OptionDescription(name="mailname", doc="mailname", children=[option_8, option_9, option_10, option_11, option_12, option_13, option_14])
-option_16 = StrOption(name="group", doc="group", default="root")
-option_17 = StrOption(name="mode", doc="mode", default="0644")
-option_18 = FilenameOption(name="name", doc="name", default="/rougail.conf")
-option_19 = StrOption(name="owner", doc="owner", default="root")
-option_20 = StrOption(name="source", doc="source", default="rougail.conf")
-option_21 = StrOption(name="templating", doc="templating", default="creole")
+option_16 = StrOption(name="engine", doc="engine", default="creole")
+option_17 = StrOption(name="group", doc="group", default="root")
+option_18 = StrOption(name="mode", doc="mode", default="0644")
+option_19 = FilenameOption(name="name", doc="name", default="/rougail.conf")
+option_20 = StrOption(name="owner", doc="owner", default="root")
+option_21 = StrOption(name="source", doc="source", default="rougail.conf")
option_22 = BoolOption(name="activate", doc="activate", default=True)
option_15 = OptionDescription(name="rougail_conf", doc="rougail.conf", children=[option_16, option_17, option_18, option_19, option_20, option_21, option_22])
option_6 = OptionDescription(name="files", doc="files", children=[option_7, option_15])
diff --git a/tests/dictionaries/70container_files_symlink_multi/makedict/base.json b/tests/dictionaries/70container_files_symlink_multi/makedict/base.json
index 32ba56d29..13f02e446 100644
--- a/tests/dictionaries/70container_files_symlink_multi/makedict/base.json
+++ b/tests/dictionaries/70container_files_symlink_multi/makedict/base.json
@@ -1 +1 @@
-{"rougail.file_name": ["/etc/mailname", "/etc/mailname2"], "services.test.files.mailname.group": "root", "services.test.files.mailname.mode": "0644", "services.test.files.mailname.name": ["/etc/mailname", "/etc/mailname2"], "services.test.files.mailname.owner": "root", "services.test.files.mailname.source": "mailname", "services.test.files.mailname.templating": "creole", "services.test.files.mailname.activate": true}
+{"rougail.file_name": ["/etc/mailname", "/etc/mailname2"], "services.test.files.mailname.engine": "creole", "services.test.files.mailname.group": "root", "services.test.files.mailname.mode": "0644", "services.test.files.mailname.name": ["/etc/mailname", "/etc/mailname2"], "services.test.files.mailname.owner": "root", "services.test.files.mailname.source": "mailname", "services.test.files.mailname.activate": true}
diff --git a/tests/dictionaries/70container_files_symlink_multi/tiramisu/base.py b/tests/dictionaries/70container_files_symlink_multi/tiramisu/base.py
index 4d1b08976..fa10981de 100644
--- a/tests/dictionaries/70container_files_symlink_multi/tiramisu/base.py
+++ b/tests/dictionaries/70container_files_symlink_multi/tiramisu/base.py
@@ -13,12 +13,12 @@ except:
from tiramisu import *
option_2 = FilenameOption(name="file_name", doc="file_name", multi=True, default=['/etc/mailname', '/etc/mailname2'], default_multi="/etc/mailname", properties=frozenset({"mandatory", "normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_7 = StrOption(name="group", doc="group", default="root")
-option_8 = StrOption(name="mode", doc="mode", default="0644")
-option_9 = SymLinkOption(name="name", opt=option_2)
-option_10 = StrOption(name="owner", doc="owner", default="root")
-option_11 = StrOption(name="source", doc="source", default="mailname")
-option_12 = StrOption(name="templating", doc="templating", default="creole")
+option_7 = StrOption(name="engine", doc="engine", default="creole")
+option_8 = StrOption(name="group", doc="group", default="root")
+option_9 = StrOption(name="mode", doc="mode", default="0644")
+option_10 = SymLinkOption(name="name", opt=option_2)
+option_11 = StrOption(name="owner", doc="owner", default="root")
+option_12 = StrOption(name="source", doc="source", default="mailname")
option_13 = BoolOption(name="activate", doc="activate", default=True)
option_6 = OptionDescription(name="mailname", doc="mailname", children=[option_7, option_8, option_9, option_10, option_11, option_12, option_13])
option_5 = OptionDescription(name="files", doc="files", children=[option_6])
diff --git a/tests/dictionaries/70container_files_symlink_multi_variable/makedict/base.json b/tests/dictionaries/70container_files_symlink_multi_variable/makedict/base.json
index 84d239ffe..20ffd9cac 100644
--- a/tests/dictionaries/70container_files_symlink_multi_variable/makedict/base.json
+++ b/tests/dictionaries/70container_files_symlink_multi_variable/makedict/base.json
@@ -1 +1 @@
-{"rougail.file_name": ["/etc/mailname", "/etc/mailname2"], "rougail.var": ["mailname", "mailname2"], "services.test.files.mailname.group": "root", "services.test.files.mailname.mode": "0644", "services.test.files.mailname.name": ["/etc/mailname", "/etc/mailname2"], "services.test.files.mailname.owner": "root", "services.test.files.mailname.source": "mailname", "services.test.files.mailname.templating": "creole", "services.test.files.mailname.variable": ["mailname", "mailname2"], "services.test.files.mailname.activate": true}
+{"rougail.file_name": ["/etc/mailname", "/etc/mailname2"], "rougail.var": ["mailname", "mailname2"], "services.test.files.mailname.engine": "creole", "services.test.files.mailname.group": "root", "services.test.files.mailname.mode": "0644", "services.test.files.mailname.name": ["/etc/mailname", "/etc/mailname2"], "services.test.files.mailname.owner": "root", "services.test.files.mailname.source": "mailname", "services.test.files.mailname.variable": ["mailname", "mailname2"], "services.test.files.mailname.activate": true}
diff --git a/tests/dictionaries/70container_files_symlink_multi_variable/tiramisu/base.py b/tests/dictionaries/70container_files_symlink_multi_variable/tiramisu/base.py
index dc6fda843..b241d49d3 100644
--- a/tests/dictionaries/70container_files_symlink_multi_variable/tiramisu/base.py
+++ b/tests/dictionaries/70container_files_symlink_multi_variable/tiramisu/base.py
@@ -14,12 +14,12 @@ except:
option_2 = FilenameOption(name="file_name", doc="file_name", multi=True, default=['/etc/mailname', '/etc/mailname2'], default_multi="/etc/mailname", properties=frozenset({"mandatory", "normal"}))
option_3 = StrOption(name="var", doc="var", multi=True, default=['mailname', 'mailname2'], default_multi="mailname", properties=frozenset({"mandatory", "normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2, option_3])
-option_8 = StrOption(name="group", doc="group", default="root")
-option_9 = StrOption(name="mode", doc="mode", default="0644")
-option_10 = SymLinkOption(name="name", opt=option_2)
-option_11 = StrOption(name="owner", doc="owner", default="root")
-option_12 = StrOption(name="source", doc="source", default="mailname")
-option_13 = StrOption(name="templating", doc="templating", default="creole")
+option_8 = StrOption(name="engine", doc="engine", default="creole")
+option_9 = StrOption(name="group", doc="group", default="root")
+option_10 = StrOption(name="mode", doc="mode", default="0644")
+option_11 = SymLinkOption(name="name", opt=option_2)
+option_12 = StrOption(name="owner", doc="owner", default="root")
+option_13 = StrOption(name="source", doc="source", default="mailname")
option_14 = SymLinkOption(name="variable", opt=option_3)
option_15 = BoolOption(name="activate", doc="activate", default=True)
option_7 = OptionDescription(name="mailname", doc="mailname", children=[option_8, option_9, option_10, option_11, option_12, option_13, option_14, option_15])
diff --git a/tests/dictionaries/70container_files_symlink_variable/makedict/base.json b/tests/dictionaries/70container_files_symlink_variable/makedict/base.json
index 8543cb745..9fa411124 100644
--- a/tests/dictionaries/70container_files_symlink_variable/makedict/base.json
+++ b/tests/dictionaries/70container_files_symlink_variable/makedict/base.json
@@ -1 +1 @@
-{"rougail.file_name": "/etc/mailname", "rougail.var": "mailname", "services.test.files.mailname.group": "root", "services.test.files.mailname.mode": "0644", "services.test.files.mailname.name": "/etc/mailname", "services.test.files.mailname.owner": "root", "services.test.files.mailname.source": "mailname", "services.test.files.mailname.templating": "creole", "services.test.files.mailname.variable": "mailname", "services.test.files.mailname.activate": true}
+{"rougail.file_name": "/etc/mailname", "rougail.var": "mailname", "services.test.files.mailname.engine": "creole", "services.test.files.mailname.group": "root", "services.test.files.mailname.mode": "0644", "services.test.files.mailname.name": "/etc/mailname", "services.test.files.mailname.owner": "root", "services.test.files.mailname.source": "mailname", "services.test.files.mailname.variable": "mailname", "services.test.files.mailname.activate": true}
diff --git a/tests/dictionaries/70container_files_symlink_variable/tiramisu/base.py b/tests/dictionaries/70container_files_symlink_variable/tiramisu/base.py
index de24603e5..583cb5592 100644
--- a/tests/dictionaries/70container_files_symlink_variable/tiramisu/base.py
+++ b/tests/dictionaries/70container_files_symlink_variable/tiramisu/base.py
@@ -14,12 +14,12 @@ except:
option_2 = FilenameOption(name="file_name", doc="file_name", default="/etc/mailname", properties=frozenset({"mandatory", "normal"}))
option_3 = StrOption(name="var", doc="var", default="mailname", properties=frozenset({"mandatory", "normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2, option_3])
-option_8 = StrOption(name="group", doc="group", default="root")
-option_9 = StrOption(name="mode", doc="mode", default="0644")
-option_10 = SymLinkOption(name="name", opt=option_2)
-option_11 = StrOption(name="owner", doc="owner", default="root")
-option_12 = StrOption(name="source", doc="source", default="mailname")
-option_13 = StrOption(name="templating", doc="templating", default="creole")
+option_8 = StrOption(name="engine", doc="engine", default="creole")
+option_9 = StrOption(name="group", doc="group", default="root")
+option_10 = StrOption(name="mode", doc="mode", default="0644")
+option_11 = SymLinkOption(name="name", opt=option_2)
+option_12 = StrOption(name="owner", doc="owner", default="root")
+option_13 = StrOption(name="source", doc="source", default="mailname")
option_14 = SymLinkOption(name="variable", opt=option_3)
option_15 = BoolOption(name="activate", doc="activate", default=True)
option_7 = OptionDescription(name="mailname", doc="mailname", children=[option_8, option_9, option_10, option_11, option_12, option_13, option_14, option_15])
diff --git a/tests/dictionaries/70container_files_twice/makedict/base.json b/tests/dictionaries/70container_files_twice/makedict/base.json
index 717691228..590ce473c 100644
--- a/tests/dictionaries/70container_files_twice/makedict/base.json
+++ b/tests/dictionaries/70container_files_twice/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.mode_conteneur_actif": "oui", "services.test.files.mailname.group": "root", "services.test.files.mailname.mode": "0644", "services.test.files.mailname.name": "/etc/mailname", "services.test.files.mailname.owner": "root", "services.test.files.mailname.source": "mailname", "services.test.files.mailname.templating": "creole", "services.test.files.mailname.activate": true, "services.test.files.mailname_1.group": "root", "services.test.files.mailname_1.mode": "0644", "services.test.files.mailname_1.name": "/etc/eole/mailname", "services.test.files.mailname_1.owner": "root", "services.test.files.mailname_1.source": "mailname", "services.test.files.mailname_1.templating": "creole", "services.test.files.mailname_1.activate": true, "services.test.files.rougail_conf.group": "root", "services.test.files.rougail_conf.mode": "0644", "services.test.files.rougail_conf.name": "/rougail.conf", "services.test.files.rougail_conf.owner": "root", "services.test.files.rougail_conf.source": "rougail.conf", "services.test.files.rougail_conf.templating": "creole", "services.test.files.rougail_conf.activate": true}
+{"rougail.general.mode_conteneur_actif": "oui", "services.test.files.mailname.engine": "creole", "services.test.files.mailname.group": "root", "services.test.files.mailname.mode": "0644", "services.test.files.mailname.name": "/etc/mailname", "services.test.files.mailname.owner": "root", "services.test.files.mailname.source": "mailname", "services.test.files.mailname.activate": true, "services.test.files.mailname_1.engine": "creole", "services.test.files.mailname_1.group": "root", "services.test.files.mailname_1.mode": "0644", "services.test.files.mailname_1.name": "/etc/eole/mailname", "services.test.files.mailname_1.owner": "root", "services.test.files.mailname_1.source": "mailname", "services.test.files.mailname_1.activate": true, "services.test.files.rougail_conf.engine": "creole", "services.test.files.rougail_conf.group": "root", "services.test.files.rougail_conf.mode": "0644", "services.test.files.rougail_conf.name": "/rougail.conf", "services.test.files.rougail_conf.owner": "root", "services.test.files.rougail_conf.source": "rougail.conf", "services.test.files.rougail_conf.activate": true}
diff --git a/tests/dictionaries/70container_files_twice/tiramisu/base.py b/tests/dictionaries/70container_files_twice/tiramisu/base.py
index 1cf7e15f8..002186575 100644
--- a/tests/dictionaries/70container_files_twice/tiramisu/base.py
+++ b/tests/dictionaries/70container_files_twice/tiramisu/base.py
@@ -14,28 +14,28 @@ except:
option_3 = StrOption(name="mode_conteneur_actif", doc="No change", default="oui", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "mandatory", "normal"}))
option_2 = OptionDescription(name="general", doc="général", children=[option_3], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_8 = StrOption(name="group", doc="group", default="root")
-option_9 = StrOption(name="mode", doc="mode", default="0644")
-option_10 = FilenameOption(name="name", doc="name", default="/etc/mailname")
-option_11 = StrOption(name="owner", doc="owner", default="root")
-option_12 = StrOption(name="source", doc="source", default="mailname")
-option_13 = StrOption(name="templating", doc="templating", default="creole")
+option_8 = StrOption(name="engine", doc="engine", default="creole")
+option_9 = StrOption(name="group", doc="group", default="root")
+option_10 = StrOption(name="mode", doc="mode", default="0644")
+option_11 = FilenameOption(name="name", doc="name", default="/etc/mailname")
+option_12 = StrOption(name="owner", doc="owner", default="root")
+option_13 = StrOption(name="source", doc="source", default="mailname")
option_14 = BoolOption(name="activate", doc="activate", default=True)
option_7 = OptionDescription(name="mailname", doc="mailname", children=[option_8, option_9, option_10, option_11, option_12, option_13, option_14])
-option_16 = StrOption(name="group", doc="group", default="root")
-option_17 = StrOption(name="mode", doc="mode", default="0644")
-option_18 = FilenameOption(name="name", doc="name", default="/etc/eole/mailname")
-option_19 = StrOption(name="owner", doc="owner", default="root")
-option_20 = StrOption(name="source", doc="source", default="mailname")
-option_21 = StrOption(name="templating", doc="templating", default="creole")
+option_16 = StrOption(name="engine", doc="engine", default="creole")
+option_17 = StrOption(name="group", doc="group", default="root")
+option_18 = StrOption(name="mode", doc="mode", default="0644")
+option_19 = FilenameOption(name="name", doc="name", default="/etc/eole/mailname")
+option_20 = StrOption(name="owner", doc="owner", default="root")
+option_21 = StrOption(name="source", doc="source", default="mailname")
option_22 = BoolOption(name="activate", doc="activate", default=True)
option_15 = OptionDescription(name="mailname_1", doc="mailname_1", children=[option_16, option_17, option_18, option_19, option_20, option_21, option_22])
-option_24 = StrOption(name="group", doc="group", default="root")
-option_25 = StrOption(name="mode", doc="mode", default="0644")
-option_26 = FilenameOption(name="name", doc="name", default="/rougail.conf")
-option_27 = StrOption(name="owner", doc="owner", default="root")
-option_28 = StrOption(name="source", doc="source", default="rougail.conf")
-option_29 = StrOption(name="templating", doc="templating", default="creole")
+option_24 = StrOption(name="engine", doc="engine", default="creole")
+option_25 = StrOption(name="group", doc="group", default="root")
+option_26 = StrOption(name="mode", doc="mode", default="0644")
+option_27 = FilenameOption(name="name", doc="name", default="/rougail.conf")
+option_28 = StrOption(name="owner", doc="owner", default="root")
+option_29 = StrOption(name="source", doc="source", default="rougail.conf")
option_30 = BoolOption(name="activate", doc="activate", default=True)
option_23 = OptionDescription(name="rougail_conf", doc="rougail.conf", children=[option_24, option_25, option_26, option_27, option_28, option_29, option_30])
option_6 = OptionDescription(name="files", doc="files", children=[option_7, option_15, option_23])
diff --git a/tests/dictionaries/70container_filesmulti/makedict/base.json b/tests/dictionaries/70container_filesmulti/makedict/base.json
index f17a97d3d..1446b24c3 100644
--- a/tests/dictionaries/70container_filesmulti/makedict/base.json
+++ b/tests/dictionaries/70container_filesmulti/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.mode_conteneur_actif": "oui", "services.test.files.mailname.group": "root", "services.test.files.mailname.mode": "0644", "services.test.files.mailname.name": "/etc/mailname", "services.test.files.mailname.owner": "root", "services.test.files.mailname.source": "mailname", "services.test.files.mailname.templating": "creole", "services.test.files.mailname.activate": true, "services.test.files.mailname2.group": "root", "services.test.files.mailname2.mode": "0644", "services.test.files.mailname2.name": "/etc/mailname2", "services.test.files.mailname2.owner": "root", "services.test.files.mailname2.source": "mailname2", "services.test.files.mailname2.templating": "creole", "services.test.files.mailname2.activate": true}
+{"rougail.general.mode_conteneur_actif": "oui", "services.test.files.mailname.engine": "creole", "services.test.files.mailname.group": "root", "services.test.files.mailname.mode": "0644", "services.test.files.mailname.name": "/etc/mailname", "services.test.files.mailname.owner": "root", "services.test.files.mailname.source": "mailname", "services.test.files.mailname.activate": true, "services.test.files.mailname2.engine": "creole", "services.test.files.mailname2.group": "root", "services.test.files.mailname2.mode": "0644", "services.test.files.mailname2.name": "/etc/mailname2", "services.test.files.mailname2.owner": "root", "services.test.files.mailname2.source": "mailname2", "services.test.files.mailname2.activate": true}
diff --git a/tests/dictionaries/70container_filesmulti/tiramisu/base.py b/tests/dictionaries/70container_filesmulti/tiramisu/base.py
index b1716b535..d3357eaaf 100644
--- a/tests/dictionaries/70container_filesmulti/tiramisu/base.py
+++ b/tests/dictionaries/70container_filesmulti/tiramisu/base.py
@@ -14,20 +14,20 @@ except:
option_3 = StrOption(name="mode_conteneur_actif", doc="No change", default="oui", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "mandatory", "normal"}))
option_2 = OptionDescription(name="general", doc="général", children=[option_3], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_8 = StrOption(name="group", doc="group", default="root")
-option_9 = StrOption(name="mode", doc="mode", default="0644")
-option_10 = FilenameOption(name="name", doc="name", default="/etc/mailname")
-option_11 = StrOption(name="owner", doc="owner", default="root")
-option_12 = StrOption(name="source", doc="source", default="mailname")
-option_13 = StrOption(name="templating", doc="templating", default="creole")
+option_8 = StrOption(name="engine", doc="engine", default="creole")
+option_9 = StrOption(name="group", doc="group", default="root")
+option_10 = StrOption(name="mode", doc="mode", default="0644")
+option_11 = FilenameOption(name="name", doc="name", default="/etc/mailname")
+option_12 = StrOption(name="owner", doc="owner", default="root")
+option_13 = StrOption(name="source", doc="source", default="mailname")
option_14 = BoolOption(name="activate", doc="activate", default=True)
option_7 = OptionDescription(name="mailname", doc="mailname", children=[option_8, option_9, option_10, option_11, option_12, option_13, option_14])
-option_16 = StrOption(name="group", doc="group", default="root")
-option_17 = StrOption(name="mode", doc="mode", default="0644")
-option_18 = FilenameOption(name="name", doc="name", default="/etc/mailname2")
-option_19 = StrOption(name="owner", doc="owner", default="root")
-option_20 = StrOption(name="source", doc="source", default="mailname2")
-option_21 = StrOption(name="templating", doc="templating", default="creole")
+option_16 = StrOption(name="engine", doc="engine", default="creole")
+option_17 = StrOption(name="group", doc="group", default="root")
+option_18 = StrOption(name="mode", doc="mode", default="0644")
+option_19 = FilenameOption(name="name", doc="name", default="/etc/mailname2")
+option_20 = StrOption(name="owner", doc="owner", default="root")
+option_21 = StrOption(name="source", doc="source", default="mailname2")
option_22 = BoolOption(name="activate", doc="activate", default=True)
option_15 = OptionDescription(name="mailname2", doc="mailname2", children=[option_16, option_17, option_18, option_19, option_20, option_21, option_22])
option_6 = OptionDescription(name="files", doc="files", children=[option_7, option_15])
diff --git a/tests/dictionaries/70container_filesredefine/makedict/base.json b/tests/dictionaries/70container_filesredefine/makedict/base.json
index dcdb36b44..23c40f8ac 100644
--- a/tests/dictionaries/70container_filesredefine/makedict/base.json
+++ b/tests/dictionaries/70container_filesredefine/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.mode_conteneur_actif": "oui", "services.test.files.mailname_new.group": "root", "services.test.files.mailname_new.mode": "0644", "services.test.files.mailname_new.name": "/etc/mailname", "services.test.files.mailname_new.owner": "root", "services.test.files.mailname_new.source": "mailname.new", "services.test.files.mailname_new.templating": "creole", "services.test.files.mailname_new.activate": true}
+{"rougail.general.mode_conteneur_actif": "oui", "services.test.files.mailname_new.engine": "creole", "services.test.files.mailname_new.group": "root", "services.test.files.mailname_new.mode": "0644", "services.test.files.mailname_new.name": "/etc/mailname", "services.test.files.mailname_new.owner": "root", "services.test.files.mailname_new.source": "mailname.new", "services.test.files.mailname_new.activate": true}
diff --git a/tests/dictionaries/70container_filesredefine/tiramisu/base.py b/tests/dictionaries/70container_filesredefine/tiramisu/base.py
index ee2f63d08..a6996d4e6 100644
--- a/tests/dictionaries/70container_filesredefine/tiramisu/base.py
+++ b/tests/dictionaries/70container_filesredefine/tiramisu/base.py
@@ -14,12 +14,12 @@ except:
option_3 = StrOption(name="mode_conteneur_actif", doc="No change", default="oui", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "mandatory", "normal"}))
option_2 = OptionDescription(name="general", doc="général", children=[option_3], properties=frozenset({"normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_8 = StrOption(name="group", doc="group", default="root")
-option_9 = StrOption(name="mode", doc="mode", default="0644")
-option_10 = FilenameOption(name="name", doc="name", default="/etc/mailname")
-option_11 = StrOption(name="owner", doc="owner", default="root")
-option_12 = StrOption(name="source", doc="source", default="mailname.new")
-option_13 = StrOption(name="templating", doc="templating", default="creole")
+option_8 = StrOption(name="engine", doc="engine", default="creole")
+option_9 = StrOption(name="group", doc="group", default="root")
+option_10 = StrOption(name="mode", doc="mode", default="0644")
+option_11 = FilenameOption(name="name", doc="name", default="/etc/mailname")
+option_12 = StrOption(name="owner", doc="owner", default="root")
+option_13 = StrOption(name="source", doc="source", default="mailname.new")
option_14 = BoolOption(name="activate", doc="activate", default=True)
option_7 = OptionDescription(name="mailname_new", doc="mailname.new", children=[option_8, option_9, option_10, option_11, option_12, option_13, option_14])
option_6 = OptionDescription(name="files", doc="files", children=[option_7])
diff --git a/tests/dictionaries/70service_not_managed/makedict/base.json b/tests/dictionaries/70service_not_managed/makedict/base.json
index fb13dad2e..08e24b759 100644
--- a/tests/dictionaries/70service_not_managed/makedict/base.json
+++ b/tests/dictionaries/70service_not_managed/makedict/base.json
@@ -1 +1 @@
-{"rougail.var": "mailname", "services.test.files.test.group": "root", "services.test.files.test.mode": "0644", "services.test.files.test.name": "/tmp/test", "services.test.files.test.owner": "root", "services.test.files.test.source": "test", "services.test.files.test.templating": "creole", "services.test.files.test.activate": true}
+{"rougail.var": "mailname", "services.test.files.test.engine": "creole", "services.test.files.test.group": "root", "services.test.files.test.mode": "0644", "services.test.files.test.name": "/tmp/test", "services.test.files.test.owner": "root", "services.test.files.test.source": "test", "services.test.files.test.activate": true}
diff --git a/tests/dictionaries/70service_not_managed/tiramisu/base.py b/tests/dictionaries/70service_not_managed/tiramisu/base.py
index 0dadb7971..273eec8de 100644
--- a/tests/dictionaries/70service_not_managed/tiramisu/base.py
+++ b/tests/dictionaries/70service_not_managed/tiramisu/base.py
@@ -13,12 +13,12 @@ except:
from tiramisu import *
option_2 = StrOption(name="var", doc="var", default="mailname", properties=frozenset({"mandatory", "normal"}))
option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
-option_7 = StrOption(name="group", doc="group", default="root")
-option_8 = StrOption(name="mode", doc="mode", default="0644")
-option_9 = FilenameOption(name="name", doc="name", default="/tmp/test")
-option_10 = StrOption(name="owner", doc="owner", default="root")
-option_11 = StrOption(name="source", doc="source", default="test")
-option_12 = StrOption(name="templating", doc="templating", default="creole")
+option_7 = StrOption(name="engine", doc="engine", default="creole")
+option_8 = StrOption(name="group", doc="group", default="root")
+option_9 = StrOption(name="mode", doc="mode", default="0644")
+option_10 = FilenameOption(name="name", doc="name", default="/tmp/test")
+option_11 = StrOption(name="owner", doc="owner", default="root")
+option_12 = StrOption(name="source", doc="source", default="test")
option_13 = BoolOption(name="activate", doc="activate", default=True)
option_6 = OptionDescription(name="test", doc="test", children=[option_7, option_8, option_9, option_10, option_11, option_12, option_13])
option_5 = OptionDescription(name="files", doc="files", children=[option_6])
diff --git a/tests/dictionaries/70services_ip/00-base.xml b/tests/dictionaries/70services_ip/00-base.xml
index 4fc371a1a..6c06e3c61 100644
--- a/tests/dictionaries/70services_ip/00-base.xml
+++ b/tests/dictionaries/70services_ip/00-base.xml
@@ -9,7 +9,9 @@
-
+
+ 192.168.0.1
+
diff --git a/tests/dictionaries/70services_ip_multi/__init__.py b/tests/dictionaries/70services_ip_multi/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/dictionaries/70services_ip_multi/makedict/base.json b/tests/dictionaries/70services_ip_multi/makedict/base.json
new file mode 100644
index 000000000..23f84d9ac
--- /dev/null
+++ b/tests/dictionaries/70services_ip_multi/makedict/base.json
@@ -0,0 +1 @@
+{"rougail.nut_monitor_host": ["192.168.0.1", "192.168.0.2"], "services.nut.ip./systemd/system/nut_service_d/rougail_ip_conf.engine": "creole", "services.nut.ip./systemd/system/nut_service_d/rougail_ip_conf.group": "root", "services.nut.ip./systemd/system/nut_service_d/rougail_ip_conf.mode": "0644", "services.nut.ip./systemd/system/nut_service_d/rougail_ip_conf.name": "/systemd/system/nut.service.d/rougail_ip.conf", "services.nut.ip./systemd/system/nut_service_d/rougail_ip_conf.network": ["192.168.0.1", "192.168.0.2"], "services.nut.ip./systemd/system/nut_service_d/rougail_ip_conf.owner": "root", "services.nut.ip./systemd/system/nut_service_d/rougail_ip_conf.activate": true}
diff --git a/tests/dictionaries/70services_ip_multi/result/systemd/system/nut.service.d/rougail_ip.conf b/tests/dictionaries/70services_ip_multi/result/systemd/system/nut.service.d/rougail_ip.conf
new file mode 100644
index 000000000..c1dc19684
--- /dev/null
+++ b/tests/dictionaries/70services_ip_multi/result/systemd/system/nut.service.d/rougail_ip.conf
@@ -0,0 +1,4 @@
+[Service]
+IPAddressAllow=192.168.0.1
+IPAddressAllow=192.168.0.2
+IPAddressDeny=any
diff --git a/tests/dictionaries/70services_ip_multi/tiramisu/base.py b/tests/dictionaries/70services_ip_multi/tiramisu/base.py
new file mode 100644
index 000000000..69921736b
--- /dev/null
+++ b/tests/dictionaries/70services_ip_multi/tiramisu/base.py
@@ -0,0 +1,27 @@
+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 = IPOption(name="nut_monitor_host", doc="nut_monitor_host", multi=True, default=['192.168.0.1', '192.168.0.2'], default_multi="192.168.0.1", allow_reserved=True, properties=frozenset({"mandatory", "normal"}))
+option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
+option_7 = StrOption(name="engine", doc="engine", default="creole")
+option_8 = StrOption(name="group", doc="group", default="root")
+option_9 = StrOption(name="mode", doc="mode", default="0644")
+option_10 = FilenameOption(name="name", doc="name", default="/systemd/system/nut.service.d/rougail_ip.conf")
+option_11 = SymLinkOption(name="network", opt=option_2)
+option_12 = StrOption(name="owner", doc="owner", default="root")
+option_13 = BoolOption(name="activate", doc="activate", default=True)
+option_6 = OptionDescription(name="/systemd/system/nut_service_d/rougail_ip_conf", doc="/systemd/system/nut.service.d/rougail_ip.conf", children=[option_7, option_8, option_9, option_10, option_11, option_12, option_13])
+option_5 = OptionDescription(name="ip", doc="ip", children=[option_6])
+option_4 = OptionDescription(name="nut", doc="nut", children=[option_5])
+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/70services_ip_network/00-base.xml b/tests/dictionaries/70services_ip_network/00-base.xml
index 8057b3d36..ebe0e8dd1 100644
--- a/tests/dictionaries/70services_ip_network/00-base.xml
+++ b/tests/dictionaries/70services_ip_network/00-base.xml
@@ -9,8 +9,12 @@
-
-
+
+ 255.255.255.0
+
+
+ 192.168.0.0
+
diff --git a/tests/dictionaries/70services_ip_not_mandatory/__init__.py b/tests/dictionaries/70services_ip_not_mandatory/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/dictionaries/70services_ip_not_mandatory/makedict/base.json b/tests/dictionaries/70services_ip_not_mandatory/makedict/base.json
new file mode 100644
index 000000000..7e0c53a39
--- /dev/null
+++ b/tests/dictionaries/70services_ip_not_mandatory/makedict/base.json
@@ -0,0 +1 @@
+{"rougail.nut_monitor_host": null, "services.nut.ip./systemd/system/nut_service_d/rougail_ip_conf.engine": "creole", "services.nut.ip./systemd/system/nut_service_d/rougail_ip_conf.group": "root", "services.nut.ip./systemd/system/nut_service_d/rougail_ip_conf.mode": "0644", "services.nut.ip./systemd/system/nut_service_d/rougail_ip_conf.name": "/systemd/system/nut.service.d/rougail_ip.conf", "services.nut.ip./systemd/system/nut_service_d/rougail_ip_conf.network": null, "services.nut.ip./systemd/system/nut_service_d/rougail_ip_conf.owner": "root", "services.nut.ip./systemd/system/nut_service_d/rougail_ip_conf.activate": true}
diff --git a/tests/dictionaries/70services_ip_not_mandatory/result/systemd/system/nut.service.d/rougail_ip.conf b/tests/dictionaries/70services_ip_not_mandatory/result/systemd/system/nut.service.d/rougail_ip.conf
new file mode 100644
index 000000000..9c0580a98
--- /dev/null
+++ b/tests/dictionaries/70services_ip_not_mandatory/result/systemd/system/nut.service.d/rougail_ip.conf
@@ -0,0 +1,2 @@
+[Service]
+IPAddressDeny=any
diff --git a/tests/dictionaries/70services_ip_not_mandatory/tiramisu/base.py b/tests/dictionaries/70services_ip_not_mandatory/tiramisu/base.py
new file mode 100644
index 000000000..19aa72e48
--- /dev/null
+++ b/tests/dictionaries/70services_ip_not_mandatory/tiramisu/base.py
@@ -0,0 +1,27 @@
+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 = IPOption(name="nut_monitor_host", doc="nut_monitor_host", allow_reserved=True, properties=frozenset({"normal"}))
+option_1 = OptionDescription(name="rougail", doc="rougail", children=[option_2])
+option_7 = StrOption(name="engine", doc="engine", default="creole")
+option_8 = StrOption(name="group", doc="group", default="root")
+option_9 = StrOption(name="mode", doc="mode", default="0644")
+option_10 = FilenameOption(name="name", doc="name", default="/systemd/system/nut.service.d/rougail_ip.conf")
+option_11 = SymLinkOption(name="network", opt=option_2)
+option_12 = StrOption(name="owner", doc="owner", default="root")
+option_13 = BoolOption(name="activate", doc="activate", default=True)
+option_6 = OptionDescription(name="/systemd/system/nut_service_d/rougail_ip_conf", doc="/systemd/system/nut.service.d/rougail_ip.conf", children=[option_7, option_8, option_9, option_10, option_11, option_12, option_13])
+option_5 = OptionDescription(name="ip", doc="ip", children=[option_6])
+option_4 = OptionDescription(name="nut", doc="nut", children=[option_5])
+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/80value_not_multi/00-base.xml b/tests/dictionaries/80value_not_multi/00-base.xml
new file mode 100644
index 000000000..288ee61eb
--- /dev/null
+++ b/tests/dictionaries/80value_not_multi/00-base.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+ 192.168.0.1
+ 192.168.0.2
+
+
+
+
diff --git a/tests/dictionaries/80value_not_multi/__init__.py b/tests/dictionaries/80value_not_multi/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/dictionaries/80value_not_multi/errno_68 b/tests/dictionaries/80value_not_multi/errno_68
new file mode 100644
index 000000000..e69de29bb