diff --git a/doc/service/file.md b/doc/service/file.md
index 5c3f8a1c..f14435ca 100644
--- a/doc/service/file.md
+++ b/doc/service/file.md
@@ -41,6 +41,8 @@ Il est possible également de définir le nom du fichier dans une variable :
```
+Attention, la variable doit être de type "filename".
+
Dans le cas des fichiers dynamique, la source est obligatoire.
Il est même possible de définir une variable de type multiple, ce qui génèrera plusiers fichiers :
diff --git a/doc/service/ip.md b/doc/service/ip.md
index e81e2686..bc39c1c7 100644
--- a/doc/service/ip.md
+++ b/doc/service/ip.md
@@ -18,6 +18,8 @@ L'IP peut être un variable :
variable_ip
```
+Attention, la variable doit être de type "network".
+
## La gestion d'un réseau
L'adresse IP peut être un réseau :
@@ -32,6 +34,8 @@ Le masque de réseau peut être un variable :
variable_ip
```
+Attention, la variable doit être de type "netmask".
+
## L'interface
Il est possible de spécifier le nom de l'interface si on la connait :
@@ -48,6 +52,14 @@ Mais il est possible de calculer automatiquement cette valeur :
Dans ce cas l'interface est déduite à partir de la table de routage.
+L'interface peut être un variable :
+
+```
+192.168.0.1
+```
+
+Attention, la variable doit être de type "string".
+
## Désactiver la génération d'une IP
Il est possible de définir une [condition](../condition/README.md) de type "disabled_if_in" ou "disabled_if_not_in" sur une balise IP :
diff --git a/doc/service/port.md b/doc/service/port.md
index 1b02d388..7a5b6f1d 100644
--- a/doc/service/port.md
+++ b/doc/service/port.md
@@ -37,6 +37,8 @@ Il est possible également de définir le port dans une variable :
```
+Attention, la variable doit être de type "port".
+
## Désactiver le port
Il est possible de définir une [condition](../condition/README.md) de type "disabled_if_in" ou "disabled_if_not_in" sur une balise port :
diff --git a/src/rougail/annotator/service.py b/src/rougail/annotator/service.py
index 6d8ab88b..04ec6107 100644
--- a/src/rougail/annotator/service.py
+++ b/src/rougail/annotator/service.py
@@ -238,7 +238,7 @@ class ServiceAnnotator:
file_,
service_name,
):
- if not hasattr(file_, 'file_type') or file_.file_type == "string":
+ if not hasattr(file_, 'file_type') or file_.file_type == "filename":
if not hasattr(file_, 'source'):
file_.source = basename(file_.name)
elif not hasattr(file_, 'source'):
diff --git a/src/rougail/data/rougail.dtd b/src/rougail/data/rougail.dtd
index b2c0e59d..ef773057 100644
--- a/src/rougail/data/rougail.dtd
+++ b/src/rougail/data/rougail.dtd
@@ -63,7 +63,7 @@
-
+
diff --git a/tests/dictionaries/01base_file/tiramisu/base.py b/tests/dictionaries/01base_file/tiramisu/base.py
index 297f5366..a9f008e6 100644
--- a/tests/dictionaries/01base_file/tiramisu/base.py
+++ b/tests/dictionaries/01base_file/tiramisu/base.py
@@ -16,7 +16,7 @@ option_2 = OptionDescription(name="general", doc="general", children=[option_3],
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="/etc/file")
+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")
diff --git a/tests/dictionaries/01base_file_include/tiramisu/base.py b/tests/dictionaries/01base_file_include/tiramisu/base.py
index 297f5366..a9f008e6 100644
--- a/tests/dictionaries/01base_file_include/tiramisu/base.py
+++ b/tests/dictionaries/01base_file_include/tiramisu/base.py
@@ -16,7 +16,7 @@ option_2 = OptionDescription(name="general", doc="general", children=[option_3],
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="/etc/file")
+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")
diff --git a/tests/dictionaries/01base_file_patch/tiramisu/base.py b/tests/dictionaries/01base_file_patch/tiramisu/base.py
index 297f5366..a9f008e6 100644
--- a/tests/dictionaries/01base_file_patch/tiramisu/base.py
+++ b/tests/dictionaries/01base_file_patch/tiramisu/base.py
@@ -16,7 +16,7 @@ option_2 = OptionDescription(name="general", doc="general", children=[option_3],
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="/etc/file")
+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")
diff --git a/tests/dictionaries/01base_file_utfchar/tiramisu/base.py b/tests/dictionaries/01base_file_utfchar/tiramisu/base.py
index 40c381f2..b68ce93c 100644
--- a/tests/dictionaries/01base_file_utfchar/tiramisu/base.py
+++ b/tests/dictionaries/01base_file_utfchar/tiramisu/base.py
@@ -16,7 +16,7 @@ option_2 = OptionDescription(name="general", doc="general", children=[option_3],
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="/etc/systemd-makefs@dev-disk-by\\x2dpartlabel")
+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")
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 2653972a..2c7794e1 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
@@ -18,7 +18,7 @@ option_2 = OptionDescription(name="general", doc="general", children=[option_3,
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 = StrOption(name="name", doc="name", default="/tmp/file1")
+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")
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 83a34e72..9b745caf 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
@@ -18,7 +18,7 @@ option_2 = OptionDescription(name="general", doc="general", children=[option_3,
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 = StrOption(name="name", doc="name", default="/tmp/file1")
+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")
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 f3a106a8..024a3198 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
@@ -18,7 +18,7 @@ option_2 = OptionDescription(name="general", doc="general", children=[option_3,
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 = StrOption(name="name", doc="name", default="/tmp/file1")
+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")
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 dc751ea4..1d4938cf 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
@@ -18,7 +18,7 @@ option_2 = OptionDescription(name="general", doc="general", children=[option_3,
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 = StrOption(name="name", doc="name", default="/tmp/file1")
+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")
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 0a82c0d2..85db20ff 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
@@ -18,7 +18,7 @@ option_2 = OptionDescription(name="general", doc="general", children=[option_3,
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 = StrOption(name="name", doc="name", default="/tmp/file1")
+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")
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 1585798d..3bc1c751 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
@@ -18,7 +18,7 @@ option_2 = OptionDescription(name="general", doc="general", children=[option_3,
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 = StrOption(name="name", doc="name", default="/tmp/file1")
+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")
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 b3b6e12f..9e84a801 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
@@ -18,7 +18,7 @@ option_2 = OptionDescription(name="general", doc="general", children=[option_3,
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 = StrOption(name="name", doc="name", default="/tmp/file1")
+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")
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 5fe77eb1..32d0b092 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
@@ -17,7 +17,7 @@ option_2 = OptionDescription(name="general", doc="general", children=[option_3,
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 = StrOption(name="name", doc="name", default="/tmp/file1")
+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")
diff --git a/tests/dictionaries/11disabled_if_in_filelist/tiramisu/base.py b/tests/dictionaries/11disabled_if_in_filelist/tiramisu/base.py
index 04871ea3..203f3b50 100644
--- a/tests/dictionaries/11disabled_if_in_filelist/tiramisu/base.py
+++ b/tests/dictionaries/11disabled_if_in_filelist/tiramisu/base.py
@@ -18,7 +18,7 @@ option_2 = OptionDescription(name="general", doc="general", children=[option_3,
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 = StrOption(name="name", doc="name", default="/etc/file")
+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")
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 4c480964..eaeb5f1a 100644
--- a/tests/dictionaries/11disabled_if_in_filelist_boolean/tiramisu/base.py
+++ b/tests/dictionaries/11disabled_if_in_filelist_boolean/tiramisu/base.py
@@ -16,7 +16,7 @@ option_2 = OptionDescription(name="general", doc="general", children=[option_3],
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="/tmp/file1")
+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")
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 ca3e94e5..20bfffa1 100644
--- a/tests/dictionaries/11disabled_if_in_filelist_boolean2/tiramisu/base.py
+++ b/tests/dictionaries/11disabled_if_in_filelist_boolean2/tiramisu/base.py
@@ -16,7 +16,7 @@ option_2 = OptionDescription(name="general", doc="general", children=[option_3],
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="/tmp/file1")
+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")
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 6828bd6c..c4f42074 100644
--- a/tests/dictionaries/11disabled_if_in_filelist_disabled/tiramisu/base.py
+++ b/tests/dictionaries/11disabled_if_in_filelist_disabled/tiramisu/base.py
@@ -18,7 +18,7 @@ option_2 = OptionDescription(name="general", doc="general", children=[option_3,
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 = StrOption(name="name", doc="name", default="/etc/file")
+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")
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 58d7afea..8072af9b 100644
--- a/tests/dictionaries/11disabled_if_in_filelist_multi/tiramisu/base.py
+++ b/tests/dictionaries/11disabled_if_in_filelist_multi/tiramisu/base.py
@@ -18,7 +18,7 @@ option_2 = OptionDescription(name="general", doc="general", children=[option_3,
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 = StrOption(name="name", doc="name", default="/tmp/file1")
+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")
@@ -26,7 +26,7 @@ option_16 = BoolOption(name="activate", doc="activate", default=Calculation(func
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 = StrOption(name="name", doc="name", default="/tmp/file2")
+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")
diff --git a/tests/dictionaries/11disabledifin_filelist_notexist/tiramisu/base.py b/tests/dictionaries/11disabledifin_filelist_notexist/tiramisu/base.py
index 299e1d37..75adf3f4 100644
--- a/tests/dictionaries/11disabledifin_filelist_notexist/tiramisu/base.py
+++ b/tests/dictionaries/11disabledifin_filelist_notexist/tiramisu/base.py
@@ -18,7 +18,7 @@ option_2 = OptionDescription(name="general", doc="general", children=[option_3,
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 = StrOption(name="name", doc="name", default="/tmp/file")
+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")
diff --git a/tests/dictionaries/11disabledifnotin_filelist_notexist/tiramisu/base.py b/tests/dictionaries/11disabledifnotin_filelist_notexist/tiramisu/base.py
index 299e1d37..75adf3f4 100644
--- a/tests/dictionaries/11disabledifnotin_filelist_notexist/tiramisu/base.py
+++ b/tests/dictionaries/11disabledifnotin_filelist_notexist/tiramisu/base.py
@@ -18,7 +18,7 @@ option_2 = OptionDescription(name="general", doc="general", children=[option_3,
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 = StrOption(name="name", doc="name", default="/tmp/file")
+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")
diff --git a/tests/dictionaries/11disabledifnotin_filelist_notexist_multi/tiramisu/base.py b/tests/dictionaries/11disabledifnotin_filelist_notexist_multi/tiramisu/base.py
index 875068e7..a0f22bc1 100644
--- a/tests/dictionaries/11disabledifnotin_filelist_notexist_multi/tiramisu/base.py
+++ b/tests/dictionaries/11disabledifnotin_filelist_notexist_multi/tiramisu/base.py
@@ -18,7 +18,7 @@ option_2 = OptionDescription(name="general", doc="general", children=[option_3,
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 = StrOption(name="name", doc="name", default="/tmp/file")
+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")
diff --git a/tests/dictionaries/11disabledifnotin_filelist_notexist_validenum/tiramisu/base.py b/tests/dictionaries/11disabledifnotin_filelist_notexist_validenum/tiramisu/base.py
index 365d0e6d..7759aa66 100644
--- a/tests/dictionaries/11disabledifnotin_filelist_notexist_validenum/tiramisu/base.py
+++ b/tests/dictionaries/11disabledifnotin_filelist_notexist_validenum/tiramisu/base.py
@@ -18,7 +18,7 @@ option_2 = OptionDescription(name="general", doc="general", children=[option_3,
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 = StrOption(name="name", doc="name", default="/tmp/file")
+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")
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 d6ef9410..4408179d 100644
--- a/tests/dictionaries/11multi_disabled_if_in_filelist/tiramisu/base.py
+++ b/tests/dictionaries/11multi_disabled_if_in_filelist/tiramisu/base.py
@@ -17,7 +17,7 @@ option_2 = OptionDescription(name="general", doc="general", children=[option_3,
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 = StrOption(name="name", doc="name", default="/tmp/file1")
+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")
diff --git a/tests/dictionaries/20notemplating/tiramisu/base.py b/tests/dictionaries/20notemplating/tiramisu/base.py
index a6e0a5ac..25608104 100644
--- a/tests/dictionaries/20notemplating/tiramisu/base.py
+++ b/tests/dictionaries/20notemplating/tiramisu/base.py
@@ -16,7 +16,7 @@ option_2 = OptionDescription(name="general", doc="general", children=[option_3],
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="/etc/file")
+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")
diff --git a/tests/dictionaries/40ifin_leadershipauto/tiramisu/base.py b/tests/dictionaries/40ifin_leadershipauto/tiramisu/base.py
index b9d6e460..59c5b4e0 100644
--- a/tests/dictionaries/40ifin_leadershipauto/tiramisu/base.py
+++ b/tests/dictionaries/40ifin_leadershipauto/tiramisu/base.py
@@ -21,7 +21,7 @@ option_2 = OptionDescription(name="general", doc="general", children=[option_3,
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 = StrOption(name="name", doc="name", default="/etc/mailname")
+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")
diff --git a/tests/dictionaries/40ifin_leadershipauto_follower/tiramisu/base.py b/tests/dictionaries/40ifin_leadershipauto_follower/tiramisu/base.py
index 0a0c35e7..0034ae99 100644
--- a/tests/dictionaries/40ifin_leadershipauto_follower/tiramisu/base.py
+++ b/tests/dictionaries/40ifin_leadershipauto_follower/tiramisu/base.py
@@ -21,7 +21,7 @@ option_2 = OptionDescription(name="general", doc="general", children=[option_3,
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 = StrOption(name="name", doc="name", default="/etc/mailname")
+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")
diff --git a/tests/dictionaries/45extra_without_family/tiramisu/base.py b/tests/dictionaries/45extra_without_family/tiramisu/base.py
index 00324be9..6ad149f3 100644
--- a/tests/dictionaries/45extra_without_family/tiramisu/base.py
+++ b/tests/dictionaries/45extra_without_family/tiramisu/base.py
@@ -17,7 +17,7 @@ option_4 = StrOption(name="my_var", doc="my_var", default=Calculation(func.calc_
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 = StrOption(name="name", doc="name", default="/etc/file")
+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")
diff --git a/tests/dictionaries/60extra_group/tiramisu/base.py b/tests/dictionaries/60extra_group/tiramisu/base.py
index 2dfb82fa..eee42aa7 100644
--- a/tests/dictionaries/60extra_group/tiramisu/base.py
+++ b/tests/dictionaries/60extra_group/tiramisu/base.py
@@ -22,7 +22,7 @@ option_6 = OptionDescription(name="ejabberd", doc="ejabberd", children=[option_7
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 = StrOption(name="name", doc="name", default="/etc/mailname")
+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")
diff --git a/tests/dictionaries/60extra_help/tiramisu/base.py b/tests/dictionaries/60extra_help/tiramisu/base.py
index de4eb536..7e2d6c7b 100644
--- a/tests/dictionaries/60extra_help/tiramisu/base.py
+++ b/tests/dictionaries/60extra_help/tiramisu/base.py
@@ -23,7 +23,7 @@ option_6 = OptionDescription(name="ejabberd", doc="ejabberd", children=[option_7
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 = StrOption(name="name", doc="name", default="/etc/mailname")
+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")
diff --git a/tests/dictionaries/70container_files/tiramisu/base.py b/tests/dictionaries/70container_files/tiramisu/base.py
index c939a358..94d6c4f3 100644
--- a/tests/dictionaries/70container_files/tiramisu/base.py
+++ b/tests/dictionaries/70container_files/tiramisu/base.py
@@ -16,7 +16,7 @@ option_2 = OptionDescription(name="general", doc="général", children=[option_3
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="/etc/mailname")
+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")
@@ -24,7 +24,7 @@ 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 = StrOption(name="name", doc="name", default="/rougail.conf")
+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")
diff --git a/tests/dictionaries/70container_files_symlink_multi/00-base.xml b/tests/dictionaries/70container_files_symlink_multi/00-base.xml
index afb2b6fc..a85ac593 100644
--- a/tests/dictionaries/70container_files_symlink_multi/00-base.xml
+++ b/tests/dictionaries/70container_files_symlink_multi/00-base.xml
@@ -6,14 +6,9 @@
-
-
- oui
-
-
- /etc/mailname
- /etc/mailname2
-
-
+
+ /etc/mailname
+ /etc/mailname2
+
diff --git a/tests/dictionaries/70container_files_symlink_multi/makedict/base.json b/tests/dictionaries/70container_files_symlink_multi/makedict/base.json
index 84fd8e1c..32ba56d2 100644
--- a/tests/dictionaries/70container_files_symlink_multi/makedict/base.json
+++ b/tests/dictionaries/70container_files_symlink_multi/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.mode_conteneur_actif": "oui", "rougail.general.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.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}
diff --git a/tests/dictionaries/70container_files_symlink_multi/tiramisu/base.py b/tests/dictionaries/70container_files_symlink_multi/tiramisu/base.py
index 1d3e2c34..4d1b0897 100644
--- a/tests/dictionaries/70container_files_symlink_multi/tiramisu/base.py
+++ b/tests/dictionaries/70container_files_symlink_multi/tiramisu/base.py
@@ -11,19 +11,17 @@ try:
from tiramisu3 import *
except:
from tiramisu import *
-option_3 = StrOption(name="mode_conteneur_actif", doc="No change", default="oui", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "mandatory", "normal"}))
-option_4 = StrOption(name="file_name", doc="file_name", multi=True, default=['/etc/mailname', '/etc/mailname2'], default_multi="/etc/mailname", properties=frozenset({"mandatory", "normal"}))
-option_2 = OptionDescription(name="general", doc="général", children=[option_3, option_4], properties=frozenset({"normal"}))
+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_9 = StrOption(name="group", doc="group", default="root")
-option_10 = StrOption(name="mode", doc="mode", default="0644")
-option_11 = SymLinkOption(name="name", opt=option_4)
-option_12 = StrOption(name="owner", doc="owner", default="root")
-option_13 = StrOption(name="source", doc="source", default="mailname")
-option_14 = StrOption(name="templating", doc="templating", default="creole")
-option_15 = BoolOption(name="activate", doc="activate", default=True)
-option_8 = OptionDescription(name="mailname", doc="mailname", 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])
-option_6 = OptionDescription(name="test", doc="test", children=[option_7])
-option_5 = OptionDescription(name="services", doc="services", children=[option_6], properties=frozenset({"hidden"}))
-option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[option_1, option_5])
+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_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])
+option_4 = OptionDescription(name="test", doc="test", 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/70container_files_symlink_multi_variable/00-base.xml b/tests/dictionaries/70container_files_symlink_multi_variable/00-base.xml
index 056b4c22..90e7ad3b 100644
--- a/tests/dictionaries/70container_files_symlink_multi_variable/00-base.xml
+++ b/tests/dictionaries/70container_files_symlink_multi_variable/00-base.xml
@@ -6,18 +6,13 @@
-
-
- oui
-
-
- /etc/mailname
- /etc/mailname2
-
-
- mailname
- mailname2
-
-
+
+ /etc/mailname
+ /etc/mailname2
+
+
+ mailname
+ mailname2
+
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 470a20ea..84d239ff 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.general.mode_conteneur_actif": "oui", "rougail.general.file_name": ["/etc/mailname", "/etc/mailname2"], "rougail.general.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.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}
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 3f8dcd23..dc6fda84 100644
--- a/tests/dictionaries/70container_files_symlink_multi_variable/tiramisu/base.py
+++ b/tests/dictionaries/70container_files_symlink_multi_variable/tiramisu/base.py
@@ -11,21 +11,19 @@ try:
from tiramisu3 import *
except:
from tiramisu import *
-option_3 = StrOption(name="mode_conteneur_actif", doc="No change", default="oui", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "mandatory", "normal"}))
-option_4 = StrOption(name="file_name", doc="file_name", multi=True, default=['/etc/mailname', '/etc/mailname2'], default_multi="/etc/mailname", properties=frozenset({"mandatory", "normal"}))
-option_5 = StrOption(name="var", doc="var", multi=True, default=['mailname', 'mailname2'], default_multi="mailname", properties=frozenset({"mandatory", "normal"}))
-option_2 = OptionDescription(name="general", doc="général", 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 = SymLinkOption(name="name", opt=option_4)
-option_13 = StrOption(name="owner", doc="owner", default="root")
-option_14 = StrOption(name="source", doc="source", default="mailname")
-option_15 = StrOption(name="templating", doc="templating", default="creole")
-option_16 = SymLinkOption(name="variable", opt=option_5)
-option_17 = BoolOption(name="activate", doc="activate", default=True)
-option_9 = OptionDescription(name="mailname", doc="mailname", children=[option_10, option_11, option_12, option_13, option_14, option_15, option_16, option_17])
-option_8 = OptionDescription(name="files", doc="files", children=[option_9])
-option_7 = OptionDescription(name="test", doc="test", children=[option_8])
-option_6 = OptionDescription(name="services", doc="services", children=[option_7], properties=frozenset({"hidden"}))
-option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[option_1, option_6])
+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_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])
+option_6 = OptionDescription(name="files", doc="files", children=[option_7])
+option_5 = OptionDescription(name="test", doc="test", children=[option_6])
+option_4 = OptionDescription(name="services", doc="services", children=[option_5], properties=frozenset({"hidden"}))
+option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[option_1, option_4])
diff --git a/tests/dictionaries/70container_files_symlink_variable/00-base.xml b/tests/dictionaries/70container_files_symlink_variable/00-base.xml
index bb6103a4..c77ea562 100644
--- a/tests/dictionaries/70container_files_symlink_variable/00-base.xml
+++ b/tests/dictionaries/70container_files_symlink_variable/00-base.xml
@@ -6,16 +6,11 @@
-
-
- oui
-
-
- /etc/mailname
-
-
- mailname
-
-
+
+ /etc/mailname
+
+
+ mailname
+
diff --git a/tests/dictionaries/70container_files_symlink_variable/makedict/base.json b/tests/dictionaries/70container_files_symlink_variable/makedict/base.json
index 18ba2f42..8543cb74 100644
--- a/tests/dictionaries/70container_files_symlink_variable/makedict/base.json
+++ b/tests/dictionaries/70container_files_symlink_variable/makedict/base.json
@@ -1 +1 @@
-{"rougail.general.mode_conteneur_actif": "oui", "rougail.general.file_name": "/etc/mailname", "rougail.general.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.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}
diff --git a/tests/dictionaries/70container_files_symlink_variable/tiramisu/base.py b/tests/dictionaries/70container_files_symlink_variable/tiramisu/base.py
index 6c29194e..de24603e 100644
--- a/tests/dictionaries/70container_files_symlink_variable/tiramisu/base.py
+++ b/tests/dictionaries/70container_files_symlink_variable/tiramisu/base.py
@@ -11,21 +11,19 @@ try:
from tiramisu3 import *
except:
from tiramisu import *
-option_3 = StrOption(name="mode_conteneur_actif", doc="No change", default="oui", properties=frozenset({"force_default_on_freeze", "frozen", "hidden", "mandatory", "normal"}))
-option_4 = StrOption(name="file_name", doc="file_name", default="/etc/mailname", properties=frozenset({"mandatory", "normal"}))
-option_5 = StrOption(name="var", doc="var", default="mailname", properties=frozenset({"mandatory", "normal"}))
-option_2 = OptionDescription(name="general", doc="général", 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 = SymLinkOption(name="name", opt=option_4)
-option_13 = StrOption(name="owner", doc="owner", default="root")
-option_14 = StrOption(name="source", doc="source", default="mailname")
-option_15 = StrOption(name="templating", doc="templating", default="creole")
-option_16 = SymLinkOption(name="variable", opt=option_5)
-option_17 = BoolOption(name="activate", doc="activate", default=True)
-option_9 = OptionDescription(name="mailname", doc="mailname", children=[option_10, option_11, option_12, option_13, option_14, option_15, option_16, option_17])
-option_8 = OptionDescription(name="files", doc="files", children=[option_9])
-option_7 = OptionDescription(name="test", doc="test", children=[option_8])
-option_6 = OptionDescription(name="services", doc="services", children=[option_7], properties=frozenset({"hidden"}))
-option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[option_1, option_6])
+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_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])
+option_6 = OptionDescription(name="files", doc="files", children=[option_7])
+option_5 = OptionDescription(name="test", doc="test", children=[option_6])
+option_4 = OptionDescription(name="services", doc="services", children=[option_5], properties=frozenset({"hidden"}))
+option_0 = OptionDescription(name="baseoption", doc="baseoption", children=[option_1, option_4])
diff --git a/tests/dictionaries/70container_files_twice/tiramisu/base.py b/tests/dictionaries/70container_files_twice/tiramisu/base.py
index be8d98d2..1cf7e15f 100644
--- a/tests/dictionaries/70container_files_twice/tiramisu/base.py
+++ b/tests/dictionaries/70container_files_twice/tiramisu/base.py
@@ -16,7 +16,7 @@ option_2 = OptionDescription(name="general", doc="général", children=[option_3
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="/etc/mailname")
+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")
@@ -24,7 +24,7 @@ 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 = StrOption(name="name", doc="name", default="/etc/eole/mailname")
+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")
@@ -32,7 +32,7 @@ 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 = StrOption(name="name", doc="name", default="/rougail.conf")
+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")
diff --git a/tests/dictionaries/70container_filesmulti/tiramisu/base.py b/tests/dictionaries/70container_filesmulti/tiramisu/base.py
index 6406494f..b1716b53 100644
--- a/tests/dictionaries/70container_filesmulti/tiramisu/base.py
+++ b/tests/dictionaries/70container_filesmulti/tiramisu/base.py
@@ -16,7 +16,7 @@ option_2 = OptionDescription(name="general", doc="général", children=[option_3
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="/etc/mailname")
+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")
@@ -24,7 +24,7 @@ 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 = StrOption(name="name", doc="name", default="/etc/mailname2")
+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")
diff --git a/tests/dictionaries/70container_filesredefine/tiramisu/base.py b/tests/dictionaries/70container_filesredefine/tiramisu/base.py
index 31ec80f8..ee2f63d0 100644
--- a/tests/dictionaries/70container_filesredefine/tiramisu/base.py
+++ b/tests/dictionaries/70container_filesredefine/tiramisu/base.py
@@ -16,7 +16,7 @@ option_2 = OptionDescription(name="general", doc="général", children=[option_3
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="/etc/mailname")
+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")
diff --git a/tests/dictionaries/80port_string/00-base.xml b/tests/dictionaries/80port_string/00-base.xml
new file mode 100644
index 00000000..7c7ae605
--- /dev/null
+++ b/tests/dictionaries/80port_string/00-base.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+ my_variable
+ my_variable
+
+
+
+
+
+ 123
+
+
+
+
diff --git a/tests/dictionaries/80port_string/__init__.py b/tests/dictionaries/80port_string/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/tests/dictionaries/80port_string/errno_58 b/tests/dictionaries/80port_string/errno_58
new file mode 100644
index 00000000..e69de29b