dictionary can be a YAML file
This commit is contained in:
parent
f6143e843c
commit
e16230064d
947 changed files with 15213 additions and 150 deletions
|
@ -1,6 +1,6 @@
|
|||
# Rougail
|
||||
|
||||
Rougail est un bibliothèque python3 qui permet de charger des dictionnaires (fichiers au format XML), de charger les variables dans Tiramisu et de générer des templates.
|
||||
Rougail est un bibliothèque python3 qui permet de charger des dictionnaires (fichiers au format XML ou YAML), de charger les variables dans Tiramisu et de générer des templates.
|
||||
|
||||
## La bibliothèque
|
||||
|
||||
|
|
|
@ -17,6 +17,20 @@ Voici un exemple simple de validation des valeurs :
|
|||
</constraints>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- variable:
|
||||
name: my_variable
|
||||
constraints:
|
||||
- check:
|
||||
- name: islower
|
||||
target:
|
||||
- text: my_variable
|
||||
```
|
||||
|
||||
|
||||
La [cible (de type variable)](../target/variable.md) de la fonction de vérification est ici "my_variable".
|
||||
|
||||
Dans cette exemple, la valeur de la variable "my_variable" va être validé par la fonction islower.
|
||||
|
@ -50,4 +64,14 @@ Dans la contrainte, il est possible de spécifier le niveau d'erreur et le mettr
|
|||
</check>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- check:
|
||||
- name: islower
|
||||
level: warning
|
||||
target:
|
||||
- text: my_variable
|
||||
```
|
||||
|
||||
Dans ce cas une valeur avec une majuscule sera accepté, mais un message d'avertissement apparaitra.
|
||||
|
|
|
@ -15,6 +15,19 @@ Dans un premier dictionnaire déclarons notre variable et sa fonction de vérifi
|
|||
</constraints>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- variable:
|
||||
name: my_variable
|
||||
constraints:
|
||||
- check:
|
||||
- name: islower
|
||||
target:
|
||||
- text: my_variable
|
||||
```
|
||||
|
||||
Dans un second dictionnaire il est possible de redéfinir le calcul :
|
||||
|
||||
```
|
||||
|
@ -28,6 +41,20 @@ Dans un second dictionnaire il est possible de redéfinir le calcul :
|
|||
</constraints>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- variable:
|
||||
name: my_variable
|
||||
redefine: 'True'
|
||||
constraints:
|
||||
- check:
|
||||
- name: isspace
|
||||
target:
|
||||
- text: my_variable
|
||||
```
|
||||
|
||||
Dans ce cas, la fonction "islower" exécuté. Si cette fonction ne retourne pas d'erreur, la seconde fonction "isspace" sera exécuté.
|
||||
|
||||
## Redéfinition avec suppression d'un calcul
|
||||
|
@ -49,13 +76,33 @@ Dans un premier dictionnaire déclarons notre variable et notre fonction de vér
|
|||
</constraints>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- variable:
|
||||
name: my_variable
|
||||
constraints:
|
||||
- check:
|
||||
- name: islower
|
||||
target:
|
||||
- text: my_variable
|
||||
```
|
||||
|
||||
Dans un second dictionnaire supprimer cette vérification :
|
||||
|
||||
```
|
||||
<variables>
|
||||
<family name="family">
|
||||
<variable name="my_variable" redefine="True" remove_check="True"/>
|
||||
</family>
|
||||
</variables>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- variable:
|
||||
name: my_variable
|
||||
redefine: 'True'
|
||||
remove_check: 'True'
|
||||
```
|
||||
|
|
|
@ -22,6 +22,25 @@ La condition hidden_if_in permet de cacher une variable où une famille à l'uti
|
|||
</constraints>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- variable:
|
||||
name: condition
|
||||
type: boolean
|
||||
- variable:
|
||||
name: my_variable
|
||||
constraints:
|
||||
- condition:
|
||||
- name: hidden_if_in
|
||||
source: condition
|
||||
param:
|
||||
- text: 'True'
|
||||
target:
|
||||
- text: my_variable
|
||||
```
|
||||
|
||||
Le [paramètres](../param/README.md) de la condition permet de définir les valeurs que doit avoir la source pour appliquer l'action.
|
||||
|
||||
La [cible](../target/README.md) de la condition est ici "my_variable".
|
||||
|
@ -47,6 +66,25 @@ Il est également possible de mettre plusieurs paramètre :
|
|||
</constraints>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- variable:
|
||||
name: condition
|
||||
- variable:
|
||||
name: my_variable
|
||||
constraints:
|
||||
- condition:
|
||||
- name: hidden_if_in
|
||||
source: condition
|
||||
param:
|
||||
- text: 'yes'
|
||||
- text: 'maybe'
|
||||
target:
|
||||
- text: my_variable
|
||||
```
|
||||
|
||||
## Une condition optionnelle
|
||||
|
||||
Il est possible de définir une condition avec une variable source qui n'existe pas dans toutes les contextes.
|
||||
|
@ -74,3 +112,18 @@ Exemple :
|
|||
<target>my_variable</target>
|
||||
</condition>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- condition:
|
||||
- name: hidden_if_in
|
||||
source: condition
|
||||
optional: 'True'
|
||||
apply_on_fallback: 'False'
|
||||
param:
|
||||
- text: 'yes'
|
||||
- text: 'maybe'
|
||||
target:
|
||||
- text: my_variable
|
||||
```
|
||||
|
|
|
@ -20,6 +20,25 @@ Dans un premier dictionnaire déclarons notre variable et notre calcule :
|
|||
</constraints>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- variable:
|
||||
name: condition
|
||||
type: boolean
|
||||
- variable:
|
||||
name: my_variable
|
||||
constraints:
|
||||
- condition:
|
||||
- name: hidden_if_in
|
||||
source: condition
|
||||
param:
|
||||
- text: 'True'
|
||||
target:
|
||||
- text: my_variable
|
||||
```
|
||||
|
||||
Dans un second dictionnaire supprimer ce calcul :
|
||||
|
||||
```
|
||||
|
@ -27,3 +46,13 @@ Dans un second dictionnaire supprimer ce calcul :
|
|||
<variable name="condition" redefine="True" remove_condition="True"/>
|
||||
</variables>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- variable:
|
||||
name: condition
|
||||
redefine: 'True'
|
||||
remove_condition: 'True'
|
||||
```
|
||||
|
|
|
@ -28,9 +28,9 @@ Il existe deux types de répertoires de dictionnaires :
|
|||
|
||||
- les dictionnaires principaux avec la clef "dictionaries_dir". La valeur par défaut est ['/srv/rougail/dictionaries']. Cette variable doit contenir la liste des répertoires contenants des dictionnaires.
|
||||
|
||||
Les dictionnaires sont chargés dans l'ordre des répertoires. Chaque répertoire est chargé les uns après les autres. A l'intérieur de ces répertoires les fichiers XML seront classés par ordre alphabétique.
|
||||
Les dictionnaires sont chargés dans l'ordre des répertoires. Chaque répertoire est chargé les uns après les autres. A l'intérieur de ces répertoires les fichiers XML ou YAML seront classés par ordre alphabétique.
|
||||
|
||||
Il n'y a pas de classement par ordre alphabétique de l'ensemble des fichiers XML de tous les répertoires.
|
||||
Il n'y a pas de classement par ordre alphabétique de l'ensemble des fichiers XML ou YAML de tous les répertoires.
|
||||
|
||||
Les familles et variables de ces dictionnaires sont classés, par défaut, dans l'espace de nom "rougail". Il est possible de changer le nom de cet espace de nom avec la clef "variable_namespace".
|
||||
|
||||
|
@ -44,13 +44,13 @@ RougailConfig['extra_dictionaries']['example'] = ['/dir1', '/dir2']
|
|||
|
||||
Les dictionnaires sont chargés dans le même ordre que les dictionnaires principaux.
|
||||
|
||||
### La DTD
|
||||
### La DTD et le schema YAML
|
||||
|
||||
Rougail a besoin du fichier de DTD pour lire les fichiers dictionnaire.
|
||||
Rougail a besoin du fichier de la DTD pour lire les fichiers dictionnaire de type XML et du schema YAML pour les fichiers dictionnaire de type YAML.
|
||||
|
||||
Par défaut le fichier de la DTD est dans le sous répertoire "data" du répertoire de code. Le nom du fichier est rougail.dtd.
|
||||
Par défaut le fichier de la DTD et le schema YAML sont dans le sous répertoire "data" du répertoire de code. Le nom du fichier est rougail.dtd et rougail.yml.
|
||||
|
||||
Pour pouvez changer le répertoire de destination de la DTD et le nom du fichier avec la clef "dtdfilename".
|
||||
Pour pouvez changer le nom du fichier DTD avec la clef "dtdfilename" et le nom du schema YAML avec la clef "yamlschema_filename".
|
||||
|
||||
### Le fichier de fonction
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
## Un dictionnaire ?
|
||||
|
||||
Un dictionnaire est un fichier XML donc la structure est décrite dans cette documentation.
|
||||
Un dictionnaire est un fichier XML ou YAML donc la structure est décrite dans cette documentation.
|
||||
|
||||
Un dictionnaire contient en ensemble de variable chargé dans Tiramisu, utilisable à tout moment, notamment dans des templates.
|
||||
|
||||
|
|
|
@ -15,6 +15,25 @@ Par exemple :
|
|||
</family>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- variable:
|
||||
name: variable
|
||||
multi: 'True'
|
||||
value:
|
||||
- text: 'val1'
|
||||
- text: 'val2'
|
||||
- family:
|
||||
name: my_dyn_family_
|
||||
dynamic: varname
|
||||
description: 'Describe '
|
||||
variables:
|
||||
- variable:
|
||||
name: my_dyn_var_
|
||||
```
|
||||
|
||||
Créera deux familles :
|
||||
|
||||
- la famille dynamique : "my_dyn_family_val1" avec la description "Describe val1"
|
||||
|
|
|
@ -43,6 +43,24 @@ Voici un exemple de définition d'une variable meneuse et de deux variables mene
|
|||
</variables>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- family:
|
||||
name: family
|
||||
leadership: 'True'
|
||||
variables:
|
||||
- variable:
|
||||
name: leader
|
||||
multi: 'True'
|
||||
- variable:
|
||||
name: follower1
|
||||
- variable:
|
||||
name: follower2
|
||||
multi: 'True'
|
||||
```
|
||||
|
||||
## Ajout d'une nouvelle variable suiveuse
|
||||
|
||||
Pour ajouter, dans un nouveau dictionnaire, une variable suiveuse à notre groupe, rien de plus simple, il suffit définir une ou des nouvelles variables dans la famille :
|
||||
|
@ -54,3 +72,14 @@ Pour ajouter, dans un nouveau dictionnaire, une variable suiveuse à notre group
|
|||
</family>
|
||||
</variables>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- family:
|
||||
name: family
|
||||
variables:
|
||||
- variable:
|
||||
name: follower3
|
||||
```
|
||||
|
|
|
@ -8,6 +8,13 @@ Pour décrire une famille il faut mettre au minimum un nom :
|
|||
<family name="my_family"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- family:
|
||||
name: my_family
|
||||
```
|
||||
|
||||
Cette famille doit être placé dans une balise [variables](../variables.md) :
|
||||
|
||||
```
|
||||
|
@ -16,6 +23,14 @@ Cette famille doit être placé dans une balise [variables](../variables.md) :
|
|||
</variables>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- family:
|
||||
name: my_family
|
||||
```
|
||||
|
||||
Ou dans une autre famille :
|
||||
|
||||
```
|
||||
|
@ -26,6 +41,17 @@ Ou dans une autre famille :
|
|||
</variables>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- family:
|
||||
name: my_family
|
||||
variables:
|
||||
- family:
|
||||
name: second_family
|
||||
```
|
||||
|
||||
Attention, une famille vide sera automatiquement supprimée.
|
||||
|
||||
## Description et aide de la famille
|
||||
|
@ -36,12 +62,30 @@ En plus d'un nom, il est possible de mettre une "description" à la famille. C'e
|
|||
<family name="my_family" description="This is a great family"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- family:
|
||||
name: my_family
|
||||
description: 'This is a great family'
|
||||
```
|
||||
|
||||
En plus de la description, il est possible de préciser une aide complémentaire :
|
||||
|
||||
```
|
||||
<family name="my_family" help="This is a great family"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- family:
|
||||
name: my_family
|
||||
help: 'This is a great family'
|
||||
```
|
||||
|
||||
## Mode de la famille
|
||||
|
||||
Le [mode](../mode.md) par défaut d'une famille correspond au [mode](../mode.md) du mode le plus petit entre la famille parente, les variables enfants ou des familles enfants qui sont contenu dans cette famille.
|
||||
|
@ -54,6 +98,14 @@ Pour définir le [mode](../mode.md) :
|
|||
<family name="my_family" mode="expert"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- family:
|
||||
name: my_family
|
||||
mode: expert
|
||||
```
|
||||
|
||||
## Famille invisible
|
||||
|
||||
Il est possible de cacher une famille, ainsi que toutes les variables et des familles inclusent dans cette famille.
|
||||
|
@ -66,3 +118,11 @@ Pour cacher une famille :
|
|||
```
|
||||
<family name="my_family" hidden="True"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- family:
|
||||
name: my_family
|
||||
hidden: 'True'
|
||||
```
|
||||
|
|
|
@ -15,6 +15,25 @@ Créeons deux variables multiples, une pour accueillir la liste des éléments d
|
|||
</variables>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- variable:
|
||||
name: zones_list
|
||||
type: string
|
||||
multi: 'True'
|
||||
value:
|
||||
- text: 'zone1'
|
||||
- text: 'zone2'
|
||||
- text: 'zone3'
|
||||
- variable:
|
||||
name: netwokd_configurations
|
||||
type: filename
|
||||
multi: 'True'
|
||||
hidden: 'True'
|
||||
```
|
||||
|
||||
Calculons la valeur de la seconde variable à partir de la première :
|
||||
|
||||
```
|
||||
|
@ -30,6 +49,25 @@ Calculons la valeur de la seconde variable à partir de la première :
|
|||
</constraints>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
constraints:
|
||||
- fill:
|
||||
- name: calc_value
|
||||
param:
|
||||
- text: /systemd/network/10-
|
||||
- type: variable
|
||||
text: zones_list
|
||||
- text: -risotto.network
|
||||
- name: join
|
||||
- name: multi
|
||||
type: boolean
|
||||
text: 'True'
|
||||
target:
|
||||
- text: netwokd_configurations
|
||||
```
|
||||
|
||||
Le contenu de la variable `netwokd_configurations` sera alors :
|
||||
|
||||
- /systemd/netword/10-zone1/risotto.network
|
||||
|
@ -46,3 +84,15 @@ Enfin déclarer une balise file en utilisant ces deux variables :
|
|||
</services>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
services:
|
||||
- service:
|
||||
- name: systemd-networkd
|
||||
file:
|
||||
- file_type: variable
|
||||
source: network
|
||||
variable: zones_list
|
||||
text: netwokd_configurations
|
||||
```
|
||||
|
|
|
@ -15,6 +15,19 @@ Dans un premier dictionnaire déclarons notre variable et notre calcule :
|
|||
</constraints>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- variable:
|
||||
name: my_calculated_variable
|
||||
constraints:
|
||||
- fill:
|
||||
- name: return_no
|
||||
target:
|
||||
- text: my_calculated_variable
|
||||
```
|
||||
|
||||
Dans un second dictionnaire il est possible de redéfinir le calcul :
|
||||
|
||||
```
|
||||
|
@ -28,6 +41,20 @@ Dans un second dictionnaire il est possible de redéfinir le calcul :
|
|||
</constraints>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- variable:
|
||||
name: my_calculated_variable
|
||||
redefine: 'True'
|
||||
constraints:
|
||||
- fill:
|
||||
- name: return_yes
|
||||
target:
|
||||
- text: my_calculated_variable
|
||||
```
|
||||
|
||||
Dans ce cas, à aucun moment la fonction "return_no" ne sera exécuté. Seul la fonction "return_yes" le sera.
|
||||
|
||||
## Redéfinition avec suppression d'un calcul
|
||||
|
@ -49,6 +76,19 @@ Dans un premier dictionnaire déclarons notre variable et notre calcule :
|
|||
</constraints>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- variable:
|
||||
name: my_calculated_variable
|
||||
constraints:
|
||||
- fill:
|
||||
- name: return_no
|
||||
target:
|
||||
- text: my_calculated_variable
|
||||
```
|
||||
|
||||
Dans un second dictionnaire supprimer ce calcul :
|
||||
|
||||
```
|
||||
|
@ -56,3 +96,13 @@ Dans un second dictionnaire supprimer ce calcul :
|
|||
<variable name="my_calculated_variable" redefine="True" remove_fill="True"/>
|
||||
</variables>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- variable:
|
||||
name: my_calculated_variable
|
||||
redefine: 'True'
|
||||
remove_fill: 'True'
|
||||
```
|
||||
|
|
|
@ -15,6 +15,19 @@ Créons une variable dont la valeur est retournée par la fonction "return_no" :
|
|||
</constraints>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- variable:
|
||||
name: my_calculated_variable
|
||||
constraints:
|
||||
- fill:
|
||||
- name: return_no
|
||||
target:
|
||||
- text: my_calculated_variable
|
||||
```
|
||||
|
||||
Puis créons la fonction "return_no" :
|
||||
|
||||
```
|
||||
|
@ -33,6 +46,17 @@ Attention, si une valeur par défaut est définit dans la variable "my_calculate
|
|||
<value>yes</value>
|
||||
</variable>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- variable:
|
||||
name: my_calculated_variable
|
||||
value:
|
||||
- text: yes
|
||||
```
|
||||
|
||||
Cette valeur par défaut sera complètement ignorée. C'est le calcul qui en définira la valeur.
|
||||
|
||||
Il est possible de définir des [paramètres](../param/README.md) à cette fonction.
|
||||
|
@ -45,6 +69,15 @@ En ajoutant le paramètre "hidden" à "True" dans la variable précédente, l'ut
|
|||
<variable name="my_calculated_variable" hidden="True"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- variable:
|
||||
name: my_calculated_variable
|
||||
hidden: 'True'
|
||||
```
|
||||
|
||||
Si une condition "hidden_if_in" est spécifié à la variable, la valeur sera modifiable par l'utilisateur si elle n'est pas cachée mais elle sera systèmatiquement calculée (même si elle a déjà était modifiée) si la variable est cachée.
|
||||
|
||||
## Variable meneuse ou suiveuse avec valeur calculé
|
||||
|
@ -67,7 +100,7 @@ Il est également possible de calculer [une variable d'une famille dynamique](..
|
|||
<value>val</value>
|
||||
</variable>
|
||||
<family name='dyn' dynamic="suffixes">
|
||||
<variable name="my_calculated_variable_dyn\_" type="string" description="My calculated variable"/>
|
||||
<variable name="my_calculated_variable_dyn_" type="string" description="My calculated variable"/>
|
||||
<value>val</value>
|
||||
</variable>
|
||||
</family>
|
||||
|
@ -80,6 +113,44 @@ Il est également possible de calculer [une variable d'une famille dynamique](..
|
|||
</constraints>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- variable:
|
||||
name: suffixes
|
||||
type: string
|
||||
description: Suffixes of dynamic family
|
||||
multi: 'True'
|
||||
value:
|
||||
- text: val1
|
||||
- text: val2
|
||||
- variable:
|
||||
name: my_variable
|
||||
type: string
|
||||
description: My variable
|
||||
value:
|
||||
- text: val
|
||||
- family:
|
||||
name: dyn
|
||||
dynamic: suffixes
|
||||
variables:
|
||||
- variable:
|
||||
name: my_calculated_variable_dyn_
|
||||
type: string
|
||||
description: My calculated variable
|
||||
value:
|
||||
- text: val
|
||||
constraints:
|
||||
- fill:
|
||||
- name: return_value
|
||||
param:
|
||||
- type: variable
|
||||
text: my_variable
|
||||
target:
|
||||
- text: my_calculated_variable_dyn_
|
||||
```
|
||||
|
||||
Dans ce cas, les variables dynamiques "my_calculated_variable_dyn_" seront calculés à partir de la valeur de la variable "my_variable".
|
||||
Que cela soit pour la variable "my_calculated_variable_dyn_val1" et "my_calculated_variable_dyn_val2".
|
||||
|
||||
|
@ -98,6 +169,20 @@ Dans ce cas, il faut explicitement demander la valeur du suffix dans la fonction
|
|||
</constraints>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
constraints:
|
||||
- fill:
|
||||
- name: return_value_suffix
|
||||
param:
|
||||
- type: variable
|
||||
text: my_variable
|
||||
- type:suffix
|
||||
target:
|
||||
- text: my_calculated_variable_dyn_
|
||||
```
|
||||
|
||||
Et ainsi faire un traitement spécifique pour ce suffix :
|
||||
|
||||
```
|
||||
|
|
|
@ -8,6 +8,14 @@ Le paramètre peut être la valeur est issue d'une information de la configurati
|
|||
<param type="information">server_name</param>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
param:
|
||||
- type: information
|
||||
text: server_name
|
||||
```
|
||||
|
||||
Dans ce cas, l'information de la configuration "server_name" sera utilisé comme valeur du paramètre.
|
||||
Si l'information n'existe pas, la paramètre aura la valeur "None".
|
||||
|
||||
|
@ -20,5 +28,15 @@ Le paramètre peut être la valeur est issue d'une information de la cible du ca
|
|||
<param type="target_information">help</param>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
param:
|
||||
- type: target_information
|
||||
text: test
|
||||
- type: target_information
|
||||
text: help
|
||||
```
|
||||
|
||||
Dans ce cas, l'information de la configuration "test" ou "help" sera utilisé comme valeur du paramètre.
|
||||
Si l'information n'existe pas, la paramètre aura la valeur "None".
|
||||
|
|
|
@ -6,6 +6,13 @@ Déclarons un paramètre positionnel :
|
|||
<param>no</param>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
param:
|
||||
- text: no
|
||||
```
|
||||
|
||||
Créons la fonction correspondante :
|
||||
|
||||
```
|
||||
|
@ -23,4 +30,12 @@ Déclarons maintenant un paramètre nommée :
|
|||
<param name="valeur">no</param>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
param:
|
||||
- name: valeur
|
||||
text: no
|
||||
```
|
||||
|
||||
Dans ce cas la fonction return_value sera exécuté avec le paramètre nommé "valeur" dont sa valeur sera "no".
|
||||
|
|
|
@ -6,6 +6,14 @@ Déclarons un paramètre avec une string :
|
|||
<param type="string">no</param>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
param:
|
||||
- type: string
|
||||
text: no
|
||||
```
|
||||
|
||||
C'est le type par défaut pour un paramètre.
|
||||
|
||||
# Paramètre de type "nombre"
|
||||
|
@ -16,6 +24,14 @@ Déclarons un paramètre avec un nombre :
|
|||
<param type="number">1</param>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
param:
|
||||
- type: number
|
||||
text: '1'
|
||||
```
|
||||
|
||||
Créons la fonction correspondante :
|
||||
|
||||
```
|
||||
|
@ -35,6 +51,14 @@ Déclarons un paramètre avec un booléen :
|
|||
<param type="boolean">True</param>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
param:
|
||||
- type: boolean
|
||||
text: 'True'
|
||||
```
|
||||
|
||||
# Paramètre de type "nil"
|
||||
|
||||
Le paramètre peut être une valeur null (None en python) :
|
||||
|
@ -43,6 +67,13 @@ Le paramètre peut être une valeur null (None en python) :
|
|||
<param type="nil"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
param:
|
||||
- type: nil
|
||||
```
|
||||
|
||||
# Paramètre de type "space"
|
||||
|
||||
Les paramètres sont chargés en supprimer les espaces en début ou fin de chaîne. Ce qui rend impossible d'avoir un paramètre " ". Avec le type "space", le paramètre sera donc un simple espace :
|
||||
|
@ -50,3 +81,10 @@ Les paramètres sont chargés en supprimer les espaces en début ou fin de chaî
|
|||
```
|
||||
<param type="space"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
param:
|
||||
- type: space
|
||||
```
|
||||
|
|
|
@ -6,6 +6,14 @@ Imaginons que la variable "my_variable" pré-existe. La valeur de la variable se
|
|||
<param type="variable">my_variable</param>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
param:
|
||||
- type: variable
|
||||
text: my_variable
|
||||
```
|
||||
|
||||
[Les variables meneuses ou suiveuses](../family/leadership.md) peuvent être utilisé sans soucis comme paramètre.
|
||||
|
||||
## Paramètre avec variable potentiellement non existante
|
||||
|
@ -18,6 +26,15 @@ Un paramètre de type "variable" peut être "optional" :
|
|||
<param type="variable" optional="True">unknow_variable</param>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
param:
|
||||
- type: variable
|
||||
optional: 'True'
|
||||
text: unknow_variable
|
||||
```
|
||||
|
||||
Si la variable "unknow_variable" n'existe pas, le paramètre ne sera pas passé à la fonction.
|
||||
|
||||
Si maintenant on créé un nouveau dictionnaire en créant cette variable, la fonction sera exécuté avec le paramètre.
|
||||
|
@ -32,6 +49,15 @@ Il est possible de ne pas générer d'erreur si une variable est désactivé en
|
|||
<param type="variable" propertyerror="False">variable1</param>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
param:
|
||||
- type: variable
|
||||
propertyerror: 'False'
|
||||
text: variable1
|
||||
```
|
||||
|
||||
Dans ce cas, si la variable est désactivé, le paramètre n'est jamais donnée à la fonction de destination.
|
||||
|
||||
## Paramètre avec variable dynamique
|
||||
|
@ -44,6 +70,14 @@ Par exemple :
|
|||
<param type="variable">vardynval1</param>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
param:
|
||||
- type: variable
|
||||
text: vardynval1
|
||||
```
|
||||
|
||||
Dans ce cas, la valeur du paramètre de la fonction sera la valeur de la variable "vardyn" pour la famille ayant le suffix "val1".
|
||||
|
||||
Il peut être utile de récupérer la valeur du suffix dans la fonction, pour cela il suffit de mettre un paramètre de type suffix :
|
||||
|
@ -52,4 +86,11 @@ Il peut être utile de récupérer la valeur du suffix dans la fonction, pour ce
|
|||
<param type="suffix"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
param:
|
||||
- type: suffix
|
||||
```
|
||||
|
||||
Dans l'exemple précédent la valeur de ce paramètre sera "val1".
|
||||
|
|
|
@ -10,13 +10,22 @@ Il faut, à la création du service, préciser son nom :
|
|||
|
||||
```
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<rougail>
|
||||
<rougail version="0.10">
|
||||
<services>
|
||||
<service name="squid"/>
|
||||
</services>
|
||||
</rougail>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
version: '0.10'
|
||||
services:
|
||||
- service:
|
||||
- name: squid
|
||||
```
|
||||
|
||||
## Les types de service
|
||||
|
||||
Les services peuvent être de plusieurs type :
|
||||
|
@ -30,6 +39,14 @@ Les services peuvent être de plusieurs type :
|
|||
<service name="dev-disk-by\x2dpartlabel-swap" type="swap"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- service:
|
||||
- name: dev-disk-by\x2dpartlabel-swap
|
||||
type: swap
|
||||
```
|
||||
|
||||
## Les targets de service
|
||||
|
||||
Active le service systemd pour une target systemd déterminé. Par défaut, l'activation du service n'est pas gérer par rougail.
|
||||
|
@ -38,6 +55,14 @@ Active le service systemd pour une target systemd déterminé. Par défaut, l'ac
|
|||
<service name="squid" target="multi-user"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- service:
|
||||
- name: squid
|
||||
target: multi-user
|
||||
```
|
||||
|
||||
## La génération du fichier service
|
||||
|
||||
Le fichier de description du service peut être fourni directement par la distribution GNU/Linux utilisé, mais il peut également être fournit par l'administrateur.
|
||||
|
@ -52,6 +77,15 @@ Deux types de template sont aujourd'hui disponible :
|
|||
<service name="dev-disk-by\x2dpartlabel-swap" type="swap" engine="creole"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- service:
|
||||
- name: dev-disk-by\x2dpartlabel-swap
|
||||
type: swap
|
||||
engine: creole
|
||||
```
|
||||
|
||||
Dans ce cas, rougail utilisera le template "dev-disk-by\x2dpartlabel-swap.swap" pour générer le fichier systemd de gestion de ce service.
|
||||
|
||||
## Le service factice
|
||||
|
@ -62,6 +96,14 @@ Un service peut être factice, donc non géré par le système de service du sys
|
|||
<service name="ldap_client" manage="False"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- service:
|
||||
- name: ldap_client
|
||||
manage: 'False'
|
||||
```
|
||||
|
||||
Un service factice est généralement une service qui n'existe pas réellement (par exemple si on configure un client). Il n'est là que pour contenir des fichiers.
|
||||
|
||||
## Désactiver le service
|
||||
|
@ -69,9 +111,15 @@ Un service factice est généralement une service qui n'existe pas réellement (
|
|||
Il est possible de désactiver un service. Pour cela il faut rajouter l'attribut "disabled" à True :
|
||||
|
||||
```
|
||||
<services>
|
||||
<service name="test" disabled="True"/>
|
||||
</services>
|
||||
<service name="test" disabled="True"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- service:
|
||||
- name: test
|
||||
disabled: 'True'
|
||||
```
|
||||
|
||||
Dans ce cas, le service et les éléments qu'il compose ([fichier](file.md), [IP](ip.md) et [réécriture](override.md) seront désactivés.
|
||||
|
@ -94,6 +142,28 @@ Il est possible de définir une [condition](../condition/README.md) de type "dis
|
|||
</constraints>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
services:
|
||||
- service:
|
||||
- name: test
|
||||
servicelist: test
|
||||
variables:
|
||||
- variable:
|
||||
name: condition
|
||||
type: boolean
|
||||
constraints:
|
||||
- condition:
|
||||
name: disabled_if_in
|
||||
source: condition
|
||||
param:
|
||||
- text: 'False'
|
||||
target:
|
||||
- type: servicelist
|
||||
text: test
|
||||
```
|
||||
|
||||
Dans ce cas, tous les services et les éléments qu'il compose avec un attribut servicelist à "test" seront désactivés si la variable "condition" est False.
|
||||
|
||||
## Ne pas désactiver le service dans systemd
|
||||
|
@ -105,3 +175,12 @@ Si vous ne voulez juste pas créer le fichier de service et ne pas faire de lien
|
|||
```
|
||||
<service name="test" disabled="True" undisable="True"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- service:
|
||||
- name: test
|
||||
disabled: 'True'
|
||||
undisable: 'True'
|
||||
```
|
||||
|
|
|
@ -16,6 +16,16 @@ Il est nécessaire, au minimum, de spécifier le chemin complet du fichier :
|
|||
</services>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
services:
|
||||
- service:
|
||||
- name: squid
|
||||
file:
|
||||
- text: /etc/squid/squid.conf
|
||||
```
|
||||
|
||||
Dans ce cas, le nom du template est déduit du nom du fichier, ici cela sera "squid.conf".
|
||||
|
||||
Si le template a un nom différent (par exemple si plusieurs template se retrouve avec le même nom), il est possible de changer le nom du template avec l'attribut source :
|
||||
|
@ -24,6 +34,14 @@ Si le template a un nom différent (par exemple si plusieurs template se retrouv
|
|||
<file source="template-squid.conf">/etc/squid/squid.conf</file>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
file:
|
||||
- source: template-squid.conf
|
||||
text: /etc/squid/squid.conf
|
||||
```
|
||||
|
||||
## Les noms de fichiers dynamique
|
||||
|
||||
Il est possible également de définir le nom du fichier dans une variable :
|
||||
|
@ -41,6 +59,23 @@ Il est possible également de définir le nom du fichier dans une variable :
|
|||
</variables>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
services:
|
||||
- service:
|
||||
- name: squid
|
||||
file:
|
||||
- file_type: variable
|
||||
source: squid.conf
|
||||
text: my_variable
|
||||
variables:
|
||||
- variable:
|
||||
name: my_variable
|
||||
value:
|
||||
- text: /etc/squid/squid.conf
|
||||
```
|
||||
|
||||
Attention, la variable doit être de type "filename".
|
||||
|
||||
Dans le cas des fichiers dynamique, la source est obligatoire.
|
||||
|
@ -61,6 +96,25 @@ Il est même possible de définir une variable de type multiple, ce qui génère
|
|||
</variables>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
services:
|
||||
- service:
|
||||
- name: squid
|
||||
file:
|
||||
- file_type: variable
|
||||
source: squid.conf
|
||||
text: my_variable
|
||||
variables:
|
||||
- variable:
|
||||
name: my_variable
|
||||
multi: 'True'
|
||||
value:
|
||||
- text: /etc/squid1/squid.conf
|
||||
- text: /etc/squid2/squid.conf
|
||||
```
|
||||
|
||||
Dans ce cas là, le fichier source est identique mais les fichiers de destination seront différent.
|
||||
|
||||
Il peut être important de personnaliser le contenu du fichier suivant le fichier de destination.
|
||||
|
@ -89,6 +143,32 @@ En effet, il est possible de passer le contenu d'une variable au template :
|
|||
</variables>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
services:
|
||||
- service:
|
||||
- name: squid
|
||||
file:
|
||||
- file_type: variable
|
||||
source: squid.conf
|
||||
variable: my_variable2
|
||||
text: my_variable1
|
||||
variables:
|
||||
- variable:
|
||||
name: my_variable1
|
||||
multi: 'True'
|
||||
value:
|
||||
- text: /etc/squid1/squid.conf
|
||||
- text: /etc/squid2/squid.conf
|
||||
- variable:
|
||||
name: my_variable2
|
||||
multi: 'True'
|
||||
value:
|
||||
- text: squid1
|
||||
- text: squid2
|
||||
```
|
||||
|
||||
Dans ce cas, lors de la génération du fichier /etc/squid1/squid.conf on retrouvera la variable "rougail_variable" avec la valeur "squid1" et la variable "rougail_index" avec la valeur "0". Lors de la génération du fichier /etc/squid2/squid.conf on retrouvera la variable "rougail_variable" avec la valeur "squid2" et la variable "rougail_index" avec la valeur "1".
|
||||
|
||||
Attention : les deux variables "my_variable1" et "my_variable2" doivent être multiple et de même longueur.
|
||||
|
@ -103,6 +183,16 @@ Il est possible de définir les droits, l'utilisateur ou le groupe d'un fichier
|
|||
<file mode="0640" owner="nobody" group="squid">/etc/squid/squid.conf</file>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
file:
|
||||
- mode: '0640'
|
||||
owner: nobody
|
||||
group: squid
|
||||
text: /etc/squid/squid.conf
|
||||
```
|
||||
|
||||
Il est possible de personnaliser les droits par défaut dans la [configuration de rougail](../dev/config.md)
|
||||
|
||||
## Désactiver la génération d'un fichier
|
||||
|
@ -113,6 +203,14 @@ Il est possible de désactiver la génération d'un fichier avec l'attribut "dis
|
|||
<file disabled="True">/etc/squid/squid.conf</file>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
file:
|
||||
- disabled: 'True'
|
||||
text: /etc/squid/squid.conf
|
||||
```
|
||||
|
||||
Il est aussi possible de définir une [condition](../condition/README.md) de type "disabled_if_in" ou "disabled_if_not_in" sur une balise fichier :
|
||||
|
||||
```
|
||||
|
@ -132,6 +230,30 @@ Il est aussi possible de définir une [condition](../condition/README.md) de typ
|
|||
</constraints>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
services:
|
||||
- service:
|
||||
- name: text
|
||||
file:
|
||||
- filelist: squid
|
||||
text: /etc/squid/squid.conf
|
||||
variables:
|
||||
- variable:
|
||||
name: condition
|
||||
type: boolean
|
||||
constraints:
|
||||
- condition:
|
||||
- name: disabled_if_in
|
||||
source: condition
|
||||
param:
|
||||
- text: 'False'
|
||||
target:
|
||||
- type: filelist
|
||||
text: squid
|
||||
```
|
||||
|
||||
Dans ce cas, tous les fichiers avec un attribut filelist à "squid" seront désactivés si la variable "condition" est False.
|
||||
|
||||
## Redéfinir une fichier
|
||||
|
@ -152,12 +274,28 @@ Il est possible de désactiver la templatisation du fichier (il sera alors uniqu
|
|||
<file engine="none">/etc/squid/squid.conf</file>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
file:
|
||||
- engine: 'none'
|
||||
text: /etc/squid/squid.conf
|
||||
```
|
||||
|
||||
Ou d'utiliser le moteur "jinja2" :
|
||||
|
||||
```
|
||||
<file engine="jinja2">/etc/squid/squid.conf</file>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
file:
|
||||
- engine: jinja2
|
||||
text: /etc/squid/squid.conf
|
||||
```
|
||||
|
||||
Il est possible de personnaliser le moteur par défaut dans la [configuration de rougail](../dev/config.md)
|
||||
|
||||
## Inclusion de template
|
||||
|
@ -205,6 +343,16 @@ Et déclaront ces deux templates :
|
|||
<file included="name" engine="none">/etc/squid/squid.d/squid.conf</file>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
file:
|
||||
- text: /etc/squid/squid.conf
|
||||
- included: name
|
||||
engine: 'none'
|
||||
text: /etc/squid/squid.d/squid.conf
|
||||
```
|
||||
|
||||
Le contenu du fichier généré (/etc/squid/squid.conf) sera donc :
|
||||
|
||||
```
|
||||
|
@ -242,6 +390,16 @@ Et déclaront ces deux templates :
|
|||
<file included="content" engine="none">squid.d/squid.conf</file>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
file:
|
||||
- text: /etc/squid/squid.conf
|
||||
- included: content
|
||||
engine: 'none'
|
||||
text: squid.d/squid.conf
|
||||
```
|
||||
|
||||
Le contenu du fichier généré (/etc/squid/squid.conf) sera donc maintenant :
|
||||
|
||||
```
|
||||
|
|
|
@ -12,6 +12,14 @@ Il est nécessaire, au minimum, de spécifier le nom d'une variable de type "IP"
|
|||
<ip ip_type="variable">variable_ip</ip>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
ip:
|
||||
- ip_type: variable_ip
|
||||
text: variable_ip
|
||||
```
|
||||
|
||||
## La gestion d'un réseau
|
||||
|
||||
L'adresse peut être de type réseau ("network") :
|
||||
|
@ -20,6 +28,14 @@ L'adresse peut être de type réseau ("network") :
|
|||
<ip netmask="variable_netmask">variable_ip</ip>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
ip:
|
||||
- netmask: variable_netmask
|
||||
text: variable_ip
|
||||
```
|
||||
|
||||
Attention, dans ce cas il faut préciser une variable de type "netmask" dans l'attribut netmask.
|
||||
|
||||
## Désactiver la génération d'une IP
|
||||
|
@ -44,4 +60,32 @@ Il est possible de définir une [condition](../condition/README.md) de type "dis
|
|||
</constraints>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
services:
|
||||
- service:
|
||||
- name: test
|
||||
ip:
|
||||
- iplist: test_ip
|
||||
text: variable_ip
|
||||
variables:
|
||||
- variable:
|
||||
name: condition
|
||||
type: boolean
|
||||
- variable:
|
||||
name: variable_ip
|
||||
type: ip
|
||||
constraints:
|
||||
- condition:
|
||||
- name: disabled_if_in
|
||||
source: condition
|
||||
param:
|
||||
- text: 'False'
|
||||
target:
|
||||
- type: iplist
|
||||
text: test_ip
|
||||
|
||||
```
|
||||
|
||||
Dans ce cas, tous les IP avec un attribut iplist à "test_ip" seront désactivé si la variable "condition" est False.
|
||||
|
|
|
@ -16,6 +16,15 @@ Il suffit d'avoir un template dont le nom est par défaut le nom du service avec
|
|||
</services>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
services:
|
||||
- service:
|
||||
- name: squid
|
||||
override: null
|
||||
```
|
||||
|
||||
Dans cette exemple, le template associé doit s'appeler squid.service
|
||||
|
||||
Si le fichier service a un nom différent (par exemple si plusieurs template se retrouve avec le même nom), il est possible de changer le nom du template avec l'attribut source :
|
||||
|
@ -24,6 +33,13 @@ Si le fichier service a un nom différent (par exemple si plusieurs template se
|
|||
<override source="test.service"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
override:
|
||||
- source: test.service
|
||||
```
|
||||
|
||||
Dans ce cas le fichier de destination aura le même nom.
|
||||
|
||||
## Choix du moteur de templating
|
||||
|
@ -36,10 +52,24 @@ Il est possible de désactiver la templatisation du fichier (il sera alors uniqu
|
|||
<override engine="none"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
override:
|
||||
- engine: 'none'
|
||||
```
|
||||
|
||||
Ou d'utiliser le moteur "jinja2" :
|
||||
|
||||
```
|
||||
<override engine="jinja2"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
override:
|
||||
- engine: 'jinja2'
|
||||
```
|
||||
|
||||
Il est possible de personnaliser le moteur par défaut dans la [configuration de rougail](../dev/config.md)
|
||||
|
|
|
@ -11,4 +11,11 @@ Il est placé à la racine du dictionnaire :
|
|||
</rougail>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
version: '0.10'
|
||||
services: none
|
||||
```
|
||||
|
||||
Attention, cette balise ne peut pas être placé dans un dictionnaire "extra".
|
||||
|
|
|
@ -6,8 +6,25 @@ Une cible peut être de type famille :
|
|||
<target type="family">my_family</target>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
target:
|
||||
- type: family
|
||||
text: my_family
|
||||
```
|
||||
|
||||
Mais une target peut être optionnelle. C'est à dire que si la famille n'existe pas, l'action ne sera pas associé à cette famille.
|
||||
|
||||
```
|
||||
<target type="family" optional="True">my_family</target>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
target:
|
||||
- type: family
|
||||
optional: 'True'
|
||||
text: my_family
|
||||
```
|
||||
|
|
|
@ -10,6 +10,14 @@ Une cible peut être de type [service](../service/README.md) :
|
|||
<target type="servicelist">example</target>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
target:
|
||||
- type: servicelist
|
||||
text: example
|
||||
```
|
||||
|
||||
### filelist
|
||||
|
||||
Une cible peut être de type [fichier](../service/file.md) :
|
||||
|
@ -18,6 +26,14 @@ Une cible peut être de type [fichier](../service/file.md) :
|
|||
<target type="filelist">example</target>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
target:
|
||||
- type: filelist
|
||||
text: example
|
||||
```
|
||||
|
||||
### iplist
|
||||
|
||||
Une cible peut être de type [ip](../service/ip.md) :
|
||||
|
@ -26,6 +42,14 @@ Une cible peut être de type [ip](../service/ip.md) :
|
|||
<target type="iplist">example</target>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
target:
|
||||
- type: iplist
|
||||
text: example
|
||||
```
|
||||
|
||||
## La cible optionnelle
|
||||
|
||||
Mais une target peut être optionnelle. C'est à dire que si la \*list n'existe pas, l'action ne sera pas associé.
|
||||
|
@ -33,3 +57,12 @@ Mais une target peut être optionnelle. C'est à dire que si la \*list n'existe
|
|||
```
|
||||
<target type="filelist" optional="True">unknown</target>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
target:
|
||||
- type: filelist
|
||||
optional: 'True'
|
||||
text: unknown
|
||||
```
|
||||
|
|
|
@ -6,8 +6,23 @@ Par défaut une cible est de type variable.
|
|||
<target>my_variable</target>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
target:
|
||||
- text: my_variable
|
||||
```
|
||||
|
||||
Mais une target peut être optionnelle. C'est à dire que si la variable n'existe pas, l'action ne sera pas associé à cette variable.
|
||||
|
||||
```
|
||||
<target optional='True'>my_variable</target>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
target:
|
||||
- optional: 'True'
|
||||
text: my_variable
|
||||
```
|
||||
|
|
|
@ -15,18 +15,49 @@ Une variable est déjà un nom. C'est à dire qu'on pourra utiliser plus tard la
|
|||
</variables>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- variable:
|
||||
name: my_variable
|
||||
- family:
|
||||
name: my_family
|
||||
variables:
|
||||
- variable:
|
||||
name: my_family_variable
|
||||
```
|
||||
|
||||
## Description et aide sur la variable
|
||||
|
||||
En plus d'un nom, il est possible de mettre une "description" à la variable. C'est une information "utilisateur" qui nous permettra d'avoir des informations complémentaires sur le contenu de cette variable :
|
||||
|
||||
```
|
||||
<variable name="my_variable" description="This is a greate variable"/>
|
||||
<variable name="my_variable" description="This is a good variable"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- variable:
|
||||
name: my_variable
|
||||
description: This is a good variable
|
||||
```
|
||||
|
||||
En plus de la description, il est possible de préciser une aide complémentaire :
|
||||
|
||||
```
|
||||
<variable name="my_variable" help="This is a greate variable"/>
|
||||
<variable name="my_variable" help="This is a good variable"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
variables:
|
||||
- variable:
|
||||
name: my_variable
|
||||
help: This is a good variable
|
||||
```
|
||||
|
||||
Cette aide peut être utilisé à tout moment comme valeur [d'un paramètre](../param/information.md).
|
||||
|
@ -66,6 +97,14 @@ Pour définir le type d'une variable :
|
|||
<variable name="my_variable" type="number"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- variable:
|
||||
name: my_variable
|
||||
type: number
|
||||
```
|
||||
|
||||
## Variable à valeur multiple
|
||||
|
||||
Par défaut une variable ne peut acceuillir qu'une seule valeur. Il peut être utile de pouvoir spécifier plusieurs valeurs à une même variable.
|
||||
|
@ -76,6 +115,14 @@ Pour définir une variable à valeur multiple :
|
|||
<variable name="my_variable" multi="True"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- variable:
|
||||
name: my_variable
|
||||
multi: 'True'
|
||||
```
|
||||
|
||||
## Variable invisible
|
||||
|
||||
Il est possible de cacher une variable.
|
||||
|
@ -89,6 +136,14 @@ Pour cacher une variable :
|
|||
<variable name="my_variable" hidden="True"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- variable:
|
||||
name: my_variable
|
||||
hidden: 'True'
|
||||
```
|
||||
|
||||
## Variable désactive
|
||||
|
||||
Il est possible de désactiver une variable.
|
||||
|
@ -101,6 +156,14 @@ Pour désactiver une variable :
|
|||
<variable name="my_variable" disabled="True"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- variable:
|
||||
name: my_variable
|
||||
disabled: 'True'
|
||||
```
|
||||
|
||||
## Variable obligatoire
|
||||
|
||||
Variable dont une valeur est requise :
|
||||
|
@ -109,12 +172,29 @@ Variable dont une valeur est requise :
|
|||
<variable name="my_variable" mandatory="True"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- variable:
|
||||
name: my_variable
|
||||
mandatory: 'True'
|
||||
```
|
||||
|
||||
Les variables booléans sont par défaut obligatoire. Pour qu'une variable booléan ne soit pas obligatoire il faut le préciser explicitement :
|
||||
|
||||
```
|
||||
<variable name="my_variable" type="boolean" mandatory="False"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- variable:
|
||||
name: my_variable
|
||||
type: boolean
|
||||
mandatory: 'False'
|
||||
```
|
||||
|
||||
Les variables avec une valeur par défaut (non calculée) sont également automatiquement obligatoire.
|
||||
|
||||
## Valeur par défaut d'une variable
|
||||
|
@ -127,6 +207,15 @@ Il est possible de fixer les valeurs par défaut d'une variable :
|
|||
</variable>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- variable:
|
||||
name: my_variable
|
||||
value:
|
||||
- text: value
|
||||
```
|
||||
|
||||
Pour une variable multiple, il est possible de préciser plusieurs valeurs :
|
||||
|
||||
```
|
||||
|
@ -136,6 +225,17 @@ Pour une variable multiple, il est possible de préciser plusieurs valeurs :
|
|||
</variable>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- variable:
|
||||
name: my_variable
|
||||
multi: 'True'
|
||||
value:
|
||||
- text: value 1
|
||||
- text: value 2
|
||||
```
|
||||
|
||||
Si la variable n'est pas pas une [variable meneuse](../family/leadership.md), la première valeur défini dans cette liste sera également la valeur par défaut proposé si on ajoute une nouvelle valeur à cette variable.
|
||||
|
||||
Une valeur par défaut peut également être [une valeur calculer](../fill/README.md).
|
||||
|
@ -156,12 +256,28 @@ Créons notre variable :
|
|||
<variable name="my_variable"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- variable:
|
||||
name: my_variable
|
||||
```
|
||||
|
||||
Et redéfinisons là :
|
||||
|
||||
```
|
||||
<variable name="my_variable" redefine="True" description="New description"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- variable:
|
||||
name: my_variable
|
||||
redefine: 'True'
|
||||
description: New description
|
||||
```
|
||||
|
||||
## Créer une variable inexistante
|
||||
|
||||
Il est parfois utile de créer une variable si elle n'existe pas dans un autre dictionnaire :
|
||||
|
@ -170,6 +286,14 @@ Il est parfois utile de créer une variable si elle n'existe pas dans un autre d
|
|||
<variable name="my_variable" exists="False"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- variable:
|
||||
name: my_variable
|
||||
exists: 'False'
|
||||
```
|
||||
|
||||
Si cette variable existe dans un autre dictionnaire, elle ne sera pas modifié ni recréé
|
||||
|
||||
## Redéfinir une variable si elle existe
|
||||
|
@ -180,6 +304,15 @@ Parfois on veut pouvoir redéfinir une variable mais seulement dans le cas où e
|
|||
<variable name="my_variable" redefine="True" exists="True" hidden="True"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- variable:
|
||||
name: my_variable
|
||||
exists: 'True'
|
||||
hidden: 'True'
|
||||
```
|
||||
|
||||
## Variable à valeur automatiquement modifiée
|
||||
|
||||
Une variable avec valeur automatiquement modifiée est une variable dont la valeur sera considéré comme modifié quand la propriété global "force_store_value" de Tiramisu est mise.
|
||||
|
@ -192,6 +325,16 @@ Voici une variable a valeur automatiquement modifiée :
|
|||
</variable>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- variable:
|
||||
name: my_variable
|
||||
auto_save: 'True'
|
||||
value:
|
||||
- text: my_value
|
||||
```
|
||||
|
||||
Dans ce cas la valeur est fixée à la valeur actuelle.
|
||||
Par exemple, si la valeur de cette variable est issue d'un calcul, la valeur ne sera plus recalculée.
|
||||
|
||||
|
@ -212,6 +355,19 @@ Voici un variable à valeur en lecture seule automatique :
|
|||
<variable name="my_variable" auto_freeze="True"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- variable:
|
||||
name: server_deployed
|
||||
type: boolean
|
||||
value:
|
||||
- text: 'False
|
||||
- variable:
|
||||
name: my_variable
|
||||
auto_freeze: 'True'
|
||||
```
|
||||
|
||||
Dans ce cas la valeur est fixée à la valeur actuelle et elle ne sera plus modifiable par l'utilisateur.
|
||||
Par exemple, si la valeur de cette variable est issue d'un calcul, la valeur ne sera plus recalculée.
|
||||
|
||||
|
@ -231,12 +387,28 @@ Exemple :
|
|||
<variable name="my_variable" test="yes"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- variable:
|
||||
name: my_variable
|
||||
test: yes
|
||||
```
|
||||
|
||||
Il est possible de préciser plusieurs valeurs avec le séparateur "|" :
|
||||
|
||||
```
|
||||
<variable name="my_variable" test="yes|no"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- variable:
|
||||
name: my_variable
|
||||
test: yes|no
|
||||
```
|
||||
|
||||
Cette valeur peut être utilisé à tout moment comme valeur [d'un paramètre](../param/information.md).
|
||||
|
||||
## Mode de la variable
|
||||
|
@ -255,6 +427,14 @@ Pour définir le [mode](../mode.md) :
|
|||
<variable name="my_variable" mode="expert"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- variable:
|
||||
name: my_variable
|
||||
mode: expert
|
||||
```
|
||||
|
||||
## Les variables qui fournissent des valeurs
|
||||
|
||||
Il peut être intéressant de retrouver facilement des variables sans connaitre le chemin complet mais en utilisant le contenu du paramètre "provider".
|
||||
|
@ -266,6 +446,14 @@ Pour déclarer :
|
|||
<variable name="my_variable" provider="my_function"/>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- variable:
|
||||
name: my_variable
|
||||
provider: my_variable
|
||||
```
|
||||
|
||||
Dans le code de l'application, on pourra retrouver le chemin de la variable en faisant :
|
||||
|
||||
```
|
||||
|
|
|
@ -12,6 +12,18 @@ Il est possible d'imposer une liste de valeur pour une variable particulière :
|
|||
</variable>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- variable:
|
||||
name: my_variable
|
||||
type: choice
|
||||
choice:
|
||||
- text: val1
|
||||
- text: val2
|
||||
- text: val3
|
||||
```
|
||||
|
||||
Dans ce cas, seules les valeurs proposées sont possibles pour cette variable.
|
||||
Cette variable n'est pas obligatoire dont il est possible de mettre la valeur "None".
|
||||
|
||||
|
@ -26,6 +38,20 @@ Si la variable est obligatoire ou si une valeur est précisée (la variable pass
|
|||
</variable>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- variable:
|
||||
name: my_variable
|
||||
type: choice
|
||||
choice:
|
||||
- text: val1
|
||||
- text: val2
|
||||
- text: val3
|
||||
value:
|
||||
- text: val1
|
||||
```
|
||||
|
||||
## Un variable à choix typée
|
||||
|
||||
Par défaut les choix sont de type "string". Il est possible de préciser des nombres, des booléens ou la valeur None :
|
||||
|
@ -40,6 +66,23 @@ Par défaut les choix sont de type "string". Il est possible de préciser des no
|
|||
</variable>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- variable:
|
||||
name: my_variable
|
||||
type: choice
|
||||
choice:
|
||||
- text: val1
|
||||
- type: string
|
||||
text: val2
|
||||
- type: number
|
||||
text: '3'
|
||||
- type: boolean
|
||||
text: 'True'
|
||||
- type: 'nil'
|
||||
```
|
||||
|
||||
Comme vu précédement ajouter la valeur None n'est pas utile parce qu'elle est automatiquement ajouté si la variable n'est pas obligatoire.
|
||||
|
||||
## Ajouter une option à une variable à choix existante
|
||||
|
@ -52,6 +95,16 @@ Pour ajouter un choix à une variable à choix existante, rien de plus simple, j
|
|||
</variable>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- variable:
|
||||
name: my_variable
|
||||
redefine: 'True'
|
||||
choice:
|
||||
- text: val4
|
||||
```
|
||||
|
||||
## Redéfinir une option à choix
|
||||
|
||||
Si on veut supprimer un choix ou redéfinir complètement la liste, il faut redéfinir cette variable et ajouter l'attribut "remove_choice" à "True" :
|
||||
|
@ -63,6 +116,18 @@ Si on veut supprimer un choix ou redéfinir complètement la liste, il faut red
|
|||
</variable>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- variable:
|
||||
name: my_variable
|
||||
redefine: 'True'
|
||||
remove_choice: 'True'
|
||||
choice:
|
||||
- text: val1
|
||||
- text: val2
|
||||
```
|
||||
|
||||
Dans ce cas toutes les anciens choix ne seront plus possible. Seuls les nouveaux le seront.
|
||||
|
||||
## Un variable à choix provenant d'une variable
|
||||
|
@ -75,6 +140,17 @@ Une variable à valeur multiple peut servir de source des choix :
|
|||
</variable>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- variable:
|
||||
name: my_variable
|
||||
type: choice
|
||||
choice:
|
||||
- type: variable
|
||||
text: other_variable
|
||||
```
|
||||
|
||||
Dans ce cas, toutes les valeurs de la variable seront des choix utilisables par l'utilisateur.
|
||||
Seul un choice de type "variable" est possible par variable.
|
||||
|
||||
|
@ -82,10 +158,29 @@ Seul un choice de type "variable" est possible par variable.
|
|||
|
||||
```
|
||||
<variable name="my_variable" type="choice">
|
||||
<choice type="function" name="trange">
|
||||
<choice type="function" name="range">
|
||||
<param type="number">0</param>
|
||||
<param type="number">10</param>
|
||||
</choice>
|
||||
<value type="number">9</value>
|
||||
</variable>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
- variable:
|
||||
name: my_variable
|
||||
type: choice
|
||||
choice:
|
||||
- type: function
|
||||
name: range
|
||||
param:
|
||||
- type: number
|
||||
text: '0'
|
||||
- type: number
|
||||
text: '10'
|
||||
value:
|
||||
- type: number
|
||||
text: '9'
|
||||
```
|
||||
|
|
|
@ -10,3 +10,10 @@ Il est placé à la racine du dictionnaire :
|
|||
<variables/>
|
||||
</rougail>
|
||||
```
|
||||
|
||||
En YAML :
|
||||
|
||||
```
|
||||
version: '0.10'
|
||||
variables: none
|
||||
```
|
||||
|
|
|
@ -39,6 +39,7 @@ RougailConfig = {'dictionaries_dir': [join(ROUGAILROOT, 'dictionaries')],
|
|||
'destinations_dir': join(ROUGAILROOT, 'destinations'),
|
||||
'tmp_dir': join(ROUGAILROOT, 'tmp'),
|
||||
'dtdfilename': join(DTDDIR, 'rougail.dtd'),
|
||||
'yamlschema_filename': join(DTDDIR, 'rougail.yml'),
|
||||
'functions_file': join(ROUGAILROOT, 'functions.py'),
|
||||
'tmpfile_dest_dir': '/usr/local/lib',
|
||||
'variable_namespace': 'rougail',
|
||||
|
|
|
@ -9,6 +9,9 @@ Forked by:
|
|||
Cadoles (http://www.cadoles.com)
|
||||
Copyright (C) 2019-2021
|
||||
|
||||
Silique (https://www.silique.fr)
|
||||
Copyright (C) 2022
|
||||
|
||||
distribued with GPL-2 or later license
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
|
@ -46,7 +49,7 @@ from typing import List
|
|||
from .i18n import _
|
||||
from .config import RougailConfig
|
||||
from .objspace import RougailObjSpace
|
||||
from .xmlreflector import XMLReflector
|
||||
from .reflector import Reflector
|
||||
from .tiramisureflector import TiramisuReflector
|
||||
from .annotator import SpaceAnnotator
|
||||
from .error import DictConsistencyError
|
||||
|
@ -63,7 +66,7 @@ class RougailConvert:
|
|||
if rougailconfig is None:
|
||||
rougailconfig = RougailConfig
|
||||
self.rougailconfig = rougailconfig
|
||||
xmlreflector = XMLReflector(self.rougailconfig)
|
||||
xmlreflector = Reflector(self.rougailconfig)
|
||||
self.rougailobjspace = RougailObjSpace(xmlreflector,
|
||||
self.rougailconfig,
|
||||
)
|
||||
|
@ -101,13 +104,13 @@ class RougailConvert:
|
|||
self.dictionaries = True
|
||||
|
||||
def _load_dictionaries(self,
|
||||
xmlreflector: XMLReflector,
|
||||
xmlreflector: Reflector,
|
||||
namespace: str,
|
||||
xmlfolders: List[str],
|
||||
path_prefix: str,
|
||||
namespace_description: str=None,
|
||||
) -> List[str]:
|
||||
for xmlfile, document in xmlreflector.load_xml_from_folders(xmlfolders):
|
||||
for xmlfile, document in xmlreflector.load_dictionaries_from_folders(xmlfolders):
|
||||
self.rougailobjspace.xml_parse_document(xmlfile,
|
||||
document,
|
||||
namespace,
|
||||
|
|
2733
src/rougail/data/rougail.yml
Normal file
2733
src/rougail/data/rougail.yml
Normal file
File diff suppressed because it is too large
Load diff
|
@ -28,7 +28,7 @@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|||
from typing import Optional
|
||||
|
||||
from .i18n import _
|
||||
from .xmlreflector import XMLReflector
|
||||
from .reflector import Reflector
|
||||
from .utils import valid_variable_family_name, normalize_family
|
||||
from .error import SpaceObjShallNotBeUpdated, DictConsistencyError
|
||||
from .path import Path
|
||||
|
@ -99,7 +99,7 @@ class RougailObjSpace:
|
|||
"""
|
||||
|
||||
def __init__(self,
|
||||
xmlreflector: XMLReflector,
|
||||
xmlreflector: Reflector,
|
||||
rougailconfig: 'RougailConfig',
|
||||
) -> None:
|
||||
self.space = ObjSpace()
|
||||
|
@ -115,7 +115,7 @@ class RougailObjSpace:
|
|||
self.xmlreflector = xmlreflector
|
||||
|
||||
def make_object_space_classes(self,
|
||||
xmlreflector: XMLReflector,
|
||||
xmlreflector: Reflector,
|
||||
) -> None:
|
||||
"""Create Rougail ObjectSpace class types from DDT file
|
||||
It enables us to create objects like:
|
||||
|
@ -426,6 +426,8 @@ class RougailObjSpace:
|
|||
if has_value and len(child) != 0:
|
||||
del variableobj.value
|
||||
for attr, val in child.attrib.items():
|
||||
if attr == 'text' and child.tag in self.forced_text_elts_as_name:
|
||||
continue
|
||||
if redefine and attr in UNREDEFINABLE:
|
||||
msg = _(f'cannot redefine attribute "{attr}" for variable "{child.attrib["name"]}"'
|
||||
f' already defined')
|
||||
|
|
187
src/rougail/reflector.py
Normal file
187
src/rougail/reflector.py
Normal file
|
@ -0,0 +1,187 @@
|
|||
"""load XML file from directory
|
||||
|
||||
Created by:
|
||||
EOLE (http://eole.orion.education.fr)
|
||||
Copyright (C) 2005-2018
|
||||
|
||||
Forked by:
|
||||
Cadoles (http://www.cadoles.com)
|
||||
Copyright (C) 2019-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 List
|
||||
from os.path import join, isfile
|
||||
from os import listdir
|
||||
|
||||
from lxml.etree import DTD, parse, XMLSyntaxError # pylint: disable=E0611
|
||||
from pykwalify.core import Core
|
||||
from pykwalify.errors import SchemaError
|
||||
|
||||
|
||||
from .i18n import _
|
||||
from .error import DictConsistencyError
|
||||
|
||||
|
||||
FORCE_SUBYAML = ['override']
|
||||
|
||||
|
||||
class Reflector:
|
||||
"""Helper class for loading the Creole XML file,
|
||||
parsing it, validating against the Creole DTD
|
||||
"""
|
||||
def __init__(self,
|
||||
rougailconfig: 'RougailConfig',
|
||||
) -> None:
|
||||
"""Loads the Creole DTD
|
||||
|
||||
:raises IOError: if the DTD is not found
|
||||
|
||||
:param dtdfilename: the full filename of the Creole DTD
|
||||
"""
|
||||
dtdfilename = rougailconfig['dtdfilename']
|
||||
yamlschema_filename = rougailconfig['yamlschema_filename']
|
||||
if not isfile(dtdfilename):
|
||||
raise IOError(_(f"no such DTD file: {dtdfilename}"))
|
||||
with open(dtdfilename, 'r') as dtdfd:
|
||||
self.dtd = DTD(dtdfd)
|
||||
if not isfile(yamlschema_filename):
|
||||
raise IOError(_(f"no such YAML Schema file: {yamlschema_filename}"))
|
||||
self.yamlschema_filename = yamlschema_filename
|
||||
|
||||
def load_dictionaries_from_folders(self,
|
||||
folders: List[str],
|
||||
):
|
||||
"""Loads all the dictionary files located in the folders' list
|
||||
|
||||
:param folders: list of full folder's name
|
||||
"""
|
||||
filenames = {}
|
||||
for folder in folders:
|
||||
for filename in listdir(folder):
|
||||
if filename.endswith('.xml'):
|
||||
ext = 'xml'
|
||||
full_filename = join(folder, filename)
|
||||
elif filename.endswith('.yml'):
|
||||
ext = 'yml'
|
||||
full_filename = join(folder, filename)
|
||||
else:
|
||||
continue
|
||||
if filename in filenames:
|
||||
raise DictConsistencyError(_(f'duplicate dictionary file name {filename}'), 78, [filenames[filename], full_filename])
|
||||
filenames[filename] = (ext, full_filename)
|
||||
if not filenames:
|
||||
raise DictConsistencyError(_('there is no dictionary file'), 77, [folder])
|
||||
file_names = list(filenames.keys())
|
||||
file_names.sort()
|
||||
for filename in file_names:
|
||||
ext, filename = filenames[filename]
|
||||
if ext == 'xml':
|
||||
yield self.load_xml_file(filename)
|
||||
else:
|
||||
yield self.load_yml_file(filename)
|
||||
|
||||
def load_xml_file(self,
|
||||
filename: str,
|
||||
):
|
||||
try:
|
||||
document = parse(filename)
|
||||
except XMLSyntaxError as err:
|
||||
raise DictConsistencyError(_(f'not a XML file: {err}'), 52, [filename]) from err
|
||||
if not self.dtd.validate(document):
|
||||
dtd_error = self.dtd.error_log.filter_from_errors()[0]
|
||||
msg = _(f'not a valid XML file: {dtd_error}')
|
||||
raise DictConsistencyError(msg, 43, [filename])
|
||||
return filename, document.getroot()
|
||||
|
||||
def load_yml_file(self,
|
||||
filename: str,
|
||||
):
|
||||
try:
|
||||
document = Core(source_file=filename, schema_files=[self.yamlschema_filename])
|
||||
except XMLSyntaxError as err:
|
||||
raise DictConsistencyError(_(f'not a XML file: {err}'), 52, [filename]) from err
|
||||
try:
|
||||
return filename, YParser(document.validate(raise_exception=True))
|
||||
except SchemaError as yaml_error:
|
||||
msg = _(f'not a valid YAML file: {yaml_error}')
|
||||
raise DictConsistencyError(msg, 43, [filename])
|
||||
|
||||
|
||||
class SubYAML:
|
||||
def __init__(self, key, value):
|
||||
if value is None:
|
||||
value = {}
|
||||
self.tag = key
|
||||
self.dico = value
|
||||
if 'text' in value:
|
||||
self.text = value['text']
|
||||
else:
|
||||
self.text = None
|
||||
if isinstance(value, list):
|
||||
self.attrib = {}
|
||||
else:
|
||||
self.attrib = {k: v for k, v in value.items() if not isinstance(v, list) and k not in FORCE_SUBYAML}
|
||||
|
||||
def __str__(self):
|
||||
return f"<SubYAML {self.tag} at {id(self)}>"
|
||||
|
||||
def __iter__(self):
|
||||
if isinstance(self.dico, list):
|
||||
lists = []
|
||||
for dico in self.dico:
|
||||
for key, value in dico.items():
|
||||
lists.append((key, [value]))
|
||||
else:
|
||||
lists = []
|
||||
for key, values in self.dico.items():
|
||||
if key == 'variables':
|
||||
for v in values:
|
||||
if 'variable' in v:
|
||||
lists.append(('variable', [v['variable']]))
|
||||
if 'family' in v:
|
||||
lists.append(('family', [v['family']]))
|
||||
else:
|
||||
lists.append((key, values))
|
||||
for key, values in lists:
|
||||
if key not in FORCE_SUBYAML and not isinstance(values, list):
|
||||
continue
|
||||
if values is None:
|
||||
values = [None]
|
||||
for value in values:
|
||||
yield SubYAML(key, value)
|
||||
|
||||
def __len__(self):
|
||||
length = 0
|
||||
for _ in self.__iter__():
|
||||
length += 1
|
||||
return length
|
||||
|
||||
|
||||
class YParser:
|
||||
def __init__(self, dico):
|
||||
self.dico = dico
|
||||
|
||||
def __iter__(self):
|
||||
for key, values in self.dico.items():
|
||||
if not isinstance(values, list):
|
||||
continue
|
||||
if key == 'variables':
|
||||
yield SubYAML(key, values)
|
||||
else:
|
||||
for val in values:
|
||||
yield SubYAML(key, val)
|
|
@ -1,87 +0,0 @@
|
|||
"""load XML file from directory
|
||||
|
||||
Created by:
|
||||
EOLE (http://eole.orion.education.fr)
|
||||
Copyright (C) 2005-2018
|
||||
|
||||
Forked by:
|
||||
Cadoles (http://www.cadoles.com)
|
||||
Copyright (C) 2019-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 List
|
||||
from os.path import join, isfile
|
||||
from os import listdir
|
||||
|
||||
from lxml.etree import DTD, parse, XMLSyntaxError # pylint: disable=E0611
|
||||
|
||||
from .i18n import _
|
||||
from .error import DictConsistencyError
|
||||
|
||||
|
||||
class XMLReflector:
|
||||
"""Helper class for loading the Creole XML file,
|
||||
parsing it, validating against the Creole DTD,
|
||||
writing the xml result on the disk
|
||||
"""
|
||||
def __init__(self,
|
||||
rougailconfig: 'RougailConfig',
|
||||
) -> None:
|
||||
"""Loads the Creole DTD
|
||||
|
||||
:raises IOError: if the DTD is not found
|
||||
|
||||
:param dtdfilename: the full filename of the Creole DTD
|
||||
"""
|
||||
dtdfilename = rougailconfig['dtdfilename']
|
||||
if not isfile(dtdfilename):
|
||||
raise IOError(_("no such DTD file: {}").format(dtdfilename))
|
||||
with open(dtdfilename, 'r') as dtdfd:
|
||||
self.dtd = DTD(dtdfd)
|
||||
|
||||
def load_xml_from_folders(self,
|
||||
xmlfolders: List[str],
|
||||
):
|
||||
"""Loads all the XML files located in the xmlfolders' list
|
||||
|
||||
:param xmlfolders: list of full folder's name
|
||||
"""
|
||||
filenames = {}
|
||||
for xmlfolder in xmlfolders:
|
||||
for filename in listdir(xmlfolder):
|
||||
if not filename.endswith('.xml'):
|
||||
continue
|
||||
full_filename = join(xmlfolder, filename)
|
||||
if filename in filenames:
|
||||
raise DictConsistencyError(_(f'duplicate xml file name {filename}'), 78, [filenames[filename], full_filename])
|
||||
filenames[filename] = full_filename
|
||||
if not filenames:
|
||||
raise DictConsistencyError(_('there is no XML file'), 77, [xmlfolder])
|
||||
file_names = list(filenames.keys())
|
||||
file_names.sort()
|
||||
for filename in file_names:
|
||||
xmlfile = filenames[filename]
|
||||
try:
|
||||
document = parse(xmlfile)
|
||||
except XMLSyntaxError as err:
|
||||
raise DictConsistencyError(_(f'not a XML file: {err}'), 52, [xmlfile]) from err
|
||||
if not self.dtd.validate(document):
|
||||
dtd_error = self.dtd.error_log.filter_from_errors()[0]
|
||||
msg = _(f'not a valid XML file: {dtd_error}')
|
||||
raise DictConsistencyError(msg, 43, [xmlfile])
|
||||
yield xmlfile, document.getroot()
|
4
tests/dictionaries/00empty/yml/00_base.yml
Normal file
4
tests/dictionaries/00empty/yml/00_base.yml
Normal file
|
@ -0,0 +1,4 @@
|
|||
version: '0.10'
|
||||
services:
|
||||
- service:
|
||||
- name: tata
|
12
tests/dictionaries/00load_autofreeze/yml/00-base.yml
Normal file
12
tests/dictionaries/00load_autofreeze/yml/00-base.yml
Normal file
|
@ -0,0 +1,12 @@
|
|||
version: '0.10'
|
||||
variables:
|
||||
- variable:
|
||||
name: myvar
|
||||
auto_freeze: 'True'
|
||||
value:
|
||||
- text: 'no'
|
||||
- variable:
|
||||
name: server_deployed
|
||||
type: boolean
|
||||
value:
|
||||
- text: 'False'
|
13
tests/dictionaries/00load_autofreezeexpert/yml/00-base.yml
Normal file
13
tests/dictionaries/00load_autofreezeexpert/yml/00-base.yml
Normal file
|
@ -0,0 +1,13 @@
|
|||
version: '0.10'
|
||||
variables:
|
||||
- variable:
|
||||
name: my_var
|
||||
auto_freeze: 'True'
|
||||
mode: expert
|
||||
value:
|
||||
- text: 'no'
|
||||
- variable:
|
||||
name: server_deployed
|
||||
type: boolean
|
||||
value:
|
||||
- text: 'False'
|
16
tests/dictionaries/00load_autosave/yml/00-base.yml
Normal file
16
tests/dictionaries/00load_autosave/yml/00-base.yml
Normal file
|
@ -0,0 +1,16 @@
|
|||
version: '0.10'
|
||||
variables:
|
||||
- variable:
|
||||
name: server_deployed
|
||||
type: boolean
|
||||
- family:
|
||||
name: general
|
||||
description: "g\xE9n\xE9ral"
|
||||
variables:
|
||||
- variable:
|
||||
name: mode_conteneur_actif
|
||||
type: string
|
||||
description: No change
|
||||
auto_save: 'True'
|
||||
value:
|
||||
- text: non
|
17
tests/dictionaries/00load_autosaveexpert/yml/00-base.yml
Normal file
17
tests/dictionaries/00load_autosaveexpert/yml/00-base.yml
Normal file
|
@ -0,0 +1,17 @@
|
|||
version: '0.10'
|
||||
variables:
|
||||
- variable:
|
||||
name: server_deployed
|
||||
type: boolean
|
||||
- family:
|
||||
name: general
|
||||
description: "g\xE9n\xE9ral"
|
||||
variables:
|
||||
- variable:
|
||||
name: mode_conteneur_actif
|
||||
type: string
|
||||
description: No change
|
||||
auto_save: 'True'
|
||||
mode: expert
|
||||
value:
|
||||
- text: non
|
13
tests/dictionaries/00load_comment/yml/00-base.yml
Normal file
13
tests/dictionaries/00load_comment/yml/00-base.yml
Normal file
|
@ -0,0 +1,13 @@
|
|||
version: '0.10'
|
||||
variables:
|
||||
- family:
|
||||
name: general
|
||||
description: "g\xE9n\xE9ral"
|
||||
variables:
|
||||
- variable:
|
||||
name: mode_conteneur_actif
|
||||
type: string
|
||||
description: No change
|
||||
hidden: 'True'
|
||||
value:
|
||||
- text: non
|
17
tests/dictionaries/00load_notype/yml/00-base.yml
Normal file
17
tests/dictionaries/00load_notype/yml/00-base.yml
Normal file
|
@ -0,0 +1,17 @@
|
|||
version: '0.10'
|
||||
variables:
|
||||
- family:
|
||||
name: general
|
||||
description: "g\xE9n\xE9ral"
|
||||
variables:
|
||||
- variable:
|
||||
name: mode_conteneur_actif
|
||||
type: string
|
||||
description: No change
|
||||
hidden: 'True'
|
||||
value:
|
||||
- text: non
|
||||
- variable:
|
||||
name: without_type
|
||||
value:
|
||||
- text: non
|
13
tests/dictionaries/00load_save/yml/00-base.yml
Normal file
13
tests/dictionaries/00load_save/yml/00-base.yml
Normal file
|
@ -0,0 +1,13 @@
|
|||
version: '0.10'
|
||||
variables:
|
||||
- family:
|
||||
name: general
|
||||
description: "g\xE9n\xE9ral"
|
||||
variables:
|
||||
- variable:
|
||||
name: mode_conteneur_actif
|
||||
type: string
|
||||
description: No change
|
||||
hidden: 'True'
|
||||
value:
|
||||
- text: non
|
13
tests/dictionaries/00load_subfolder/yml/99-base.yml
Normal file
13
tests/dictionaries/00load_subfolder/yml/99-base.yml
Normal file
|
@ -0,0 +1,13 @@
|
|||
version: '0.10'
|
||||
variables:
|
||||
- family:
|
||||
name: general
|
||||
description: "g\xE9n\xE9ral"
|
||||
variables:
|
||||
- variable:
|
||||
name: mode_conteneur_actif
|
||||
type: string
|
||||
description: No change
|
||||
hidden: 'True'
|
||||
value:
|
||||
- text: non
|
|
@ -0,0 +1,13 @@
|
|||
version: '0.10'
|
||||
variables:
|
||||
- family:
|
||||
name: general
|
||||
description: "g\xE9n\xE9ral"
|
||||
variables:
|
||||
- variable:
|
||||
name: mode_conteneur_actif1
|
||||
type: string
|
||||
description: No change
|
||||
hidden: 'True'
|
||||
value:
|
||||
- text: non
|
20
tests/dictionaries/01auto_autofreeze/yml/00-base.yml
Normal file
20
tests/dictionaries/01auto_autofreeze/yml/00-base.yml
Normal file
|
@ -0,0 +1,20 @@
|
|||
version: '0.10'
|
||||
variables:
|
||||
- variable:
|
||||
name: server_deployed
|
||||
type: boolean
|
||||
value:
|
||||
- text: 'no'
|
||||
- variable:
|
||||
name: my_variable
|
||||
auto_freeze: 'True'
|
||||
hidden: 'True'
|
||||
value:
|
||||
- text: 'no'
|
||||
constraints:
|
||||
- fill:
|
||||
- name: calc_val
|
||||
param:
|
||||
- text: 'yes'
|
||||
target:
|
||||
- text: my_variable
|
26
tests/dictionaries/01auto_base/yml/00-base.yml
Normal file
26
tests/dictionaries/01auto_base/yml/00-base.yml
Normal file
|
@ -0,0 +1,26 @@
|
|||
version: '0.10'
|
||||
variables:
|
||||
- family:
|
||||
name: general
|
||||
variables:
|
||||
- variable:
|
||||
name: mode_conteneur_actif
|
||||
type: string
|
||||
description: No change
|
||||
hidden: 'True'
|
||||
value:
|
||||
- text: non
|
||||
- variable:
|
||||
name: mode_conteneur_actif1
|
||||
type: string
|
||||
description: No change
|
||||
value:
|
||||
- text: non
|
||||
constraints:
|
||||
- fill:
|
||||
- name: calc_val
|
||||
param:
|
||||
- type: variable
|
||||
text: mode_conteneur_actif1
|
||||
target:
|
||||
- text: mode_conteneur_actif
|
23
tests/dictionaries/01auto_withoutparam/yml/00-base.yml
Normal file
23
tests/dictionaries/01auto_withoutparam/yml/00-base.yml
Normal file
|
@ -0,0 +1,23 @@
|
|||
version: '0.10'
|
||||
variables:
|
||||
- family:
|
||||
name: general
|
||||
variables:
|
||||
- variable:
|
||||
name: mode_conteneur_actif
|
||||
type: string
|
||||
description: No change
|
||||
hidden: 'True'
|
||||
value:
|
||||
- text: non
|
||||
- variable:
|
||||
name: mode_conteneur_actif1
|
||||
type: string
|
||||
description: No change
|
||||
value:
|
||||
- text: non
|
||||
constraints:
|
||||
- fill:
|
||||
- name: calc_val
|
||||
target:
|
||||
- text: mode_conteneur_actif
|
11
tests/dictionaries/01base_domainname/yml/00-base.yml
Normal file
11
tests/dictionaries/01base_domainname/yml/00-base.yml
Normal file
|
@ -0,0 +1,11 @@
|
|||
version: '0.10'
|
||||
variables:
|
||||
- family:
|
||||
name: general
|
||||
variables:
|
||||
- variable:
|
||||
name: domain
|
||||
type: domainname
|
||||
description: Description
|
||||
value:
|
||||
- text: my.domain.name
|
18
tests/dictionaries/01base_file/yml/00-base.yml
Normal file
18
tests/dictionaries/01base_file/yml/00-base.yml
Normal file
|
@ -0,0 +1,18 @@
|
|||
version: '0.10'
|
||||
services:
|
||||
- service:
|
||||
- name: test
|
||||
file:
|
||||
- text: /etc/file
|
||||
- engine: jinja2
|
||||
text: /etc/file2
|
||||
variables:
|
||||
- family:
|
||||
name: general
|
||||
variables:
|
||||
- variable:
|
||||
name: mode_conteneur_actif
|
||||
type: string
|
||||
description: Description
|
||||
value:
|
||||
- text: non
|
20
tests/dictionaries/01base_file_disabled/yml/00-base.yml
Normal file
20
tests/dictionaries/01base_file_disabled/yml/00-base.yml
Normal file
|
@ -0,0 +1,20 @@
|
|||
version: '0.10'
|
||||
services:
|
||||
- service:
|
||||
- name: test
|
||||
file:
|
||||
- text: /etc/file
|
||||
- engine: jinja2
|
||||
text: /etc/file2
|
||||
- disabled: 'True'
|
||||
text: /etc/file3
|
||||
variables:
|
||||
- family:
|
||||
name: general
|
||||
variables:
|
||||
- variable:
|
||||
name: mode_conteneur_actif
|
||||
type: string
|
||||
description: Description
|
||||
value:
|
||||
- text: non
|
18
tests/dictionaries/01base_file_include/yml/00-base.yml
Normal file
18
tests/dictionaries/01base_file_include/yml/00-base.yml
Normal file
|
@ -0,0 +1,18 @@
|
|||
version: '0.10'
|
||||
services:
|
||||
- service:
|
||||
- name: test
|
||||
file:
|
||||
- text: /etc/file
|
||||
- engine: jinja2
|
||||
text: /etc/file2
|
||||
variables:
|
||||
- family:
|
||||
name: general
|
||||
variables:
|
||||
- variable:
|
||||
name: mode_conteneur_actif
|
||||
type: string
|
||||
description: Description
|
||||
value:
|
||||
- text: non
|
|
@ -0,0 +1,20 @@
|
|||
version: '0.10'
|
||||
services:
|
||||
- service:
|
||||
- name: test
|
||||
file:
|
||||
- text: /etc/file
|
||||
- engine: jinja2
|
||||
text: /etc/file2
|
||||
- included: content
|
||||
text: /etc/dir/incfile
|
||||
variables:
|
||||
- family:
|
||||
name: general
|
||||
variables:
|
||||
- variable:
|
||||
name: mode_conteneur_actif
|
||||
type: string
|
||||
description: Description
|
||||
value:
|
||||
- text: non
|
20
tests/dictionaries/01base_file_include_name/yml/00-base.yml
Normal file
20
tests/dictionaries/01base_file_include_name/yml/00-base.yml
Normal file
|
@ -0,0 +1,20 @@
|
|||
version: '0.10'
|
||||
services:
|
||||
- service:
|
||||
- name: test
|
||||
file:
|
||||
- text: /etc/file
|
||||
- engine: jinja2
|
||||
text: /etc/file2
|
||||
- included: name
|
||||
text: /etc/dir/incfile
|
||||
variables:
|
||||
- family:
|
||||
name: general
|
||||
variables:
|
||||
- variable:
|
||||
name: mode_conteneur_actif
|
||||
type: string
|
||||
description: Description
|
||||
value:
|
||||
- text: non
|
22
tests/dictionaries/01base_file_owner/yml/00-base.yml
Normal file
22
tests/dictionaries/01base_file_owner/yml/00-base.yml
Normal file
|
@ -0,0 +1,22 @@
|
|||
version: '0.10'
|
||||
services:
|
||||
- service:
|
||||
- name: test
|
||||
file:
|
||||
- owner: nobody
|
||||
group: nobody
|
||||
text: /etc/file
|
||||
- owner: nobody
|
||||
group: nobody
|
||||
engine: jinja2
|
||||
text: /etc/file2
|
||||
variables:
|
||||
- family:
|
||||
name: general
|
||||
variables:
|
||||
- variable:
|
||||
name: mode_conteneur_actif
|
||||
type: string
|
||||
description: Description
|
||||
value:
|
||||
- text: non
|
|
@ -0,0 +1,36 @@
|
|||
version: '0.10'
|
||||
services:
|
||||
- service:
|
||||
- name: test
|
||||
file:
|
||||
- owner_type: variable
|
||||
owner: owner
|
||||
group_type: variable
|
||||
group: group
|
||||
text: /etc/file
|
||||
- owner_type: variable
|
||||
owner: owner
|
||||
group_type: variable
|
||||
group: group
|
||||
engine: jinja2
|
||||
text: /etc/file2
|
||||
variables:
|
||||
- family:
|
||||
name: general
|
||||
variables:
|
||||
- variable:
|
||||
name: mode_conteneur_actif
|
||||
type: string
|
||||
description: Description
|
||||
value:
|
||||
- text: non
|
||||
- variable:
|
||||
name: owner
|
||||
type: unix_user
|
||||
value:
|
||||
- text: nobody
|
||||
- variable:
|
||||
name: group
|
||||
type: unix_user
|
||||
value:
|
||||
- text: nobody
|
18
tests/dictionaries/01base_file_patch/yml/00-base.yml
Normal file
18
tests/dictionaries/01base_file_patch/yml/00-base.yml
Normal file
|
@ -0,0 +1,18 @@
|
|||
version: '0.10'
|
||||
services:
|
||||
- service:
|
||||
- name: test
|
||||
file:
|
||||
- text: /etc/file
|
||||
- engine: jinja2
|
||||
text: /etc/file2
|
||||
variables:
|
||||
- family:
|
||||
name: general
|
||||
variables:
|
||||
- variable:
|
||||
name: mode_conteneur_actif
|
||||
type: string
|
||||
description: Description
|
||||
value:
|
||||
- text: non
|
|
@ -0,0 +1,18 @@
|
|||
version: '0.10'
|
||||
services:
|
||||
- service:
|
||||
- name: test
|
||||
file:
|
||||
- text: /etc/file
|
||||
- engine: jinja2
|
||||
text: /etc/file2
|
||||
variables:
|
||||
- family:
|
||||
name: general
|
||||
variables:
|
||||
- variable:
|
||||
name: mode_conteneur_actif
|
||||
type: string
|
||||
description: Description
|
||||
value:
|
||||
- text: non
|
18
tests/dictionaries/01base_file_utfchar/yml/00-base.yml
Normal file
18
tests/dictionaries/01base_file_utfchar/yml/00-base.yml
Normal file
|
@ -0,0 +1,18 @@
|
|||
version: '0.10'
|
||||
services:
|
||||
- service:
|
||||
- name: test
|
||||
file:
|
||||
- text: /etc/systemd-makefs@dev-disk-by\x2dpartlabel
|
||||
- engine: jinja2
|
||||
text: /etc/systemd-makefs@dev-disk-by\x2dpartlabel2
|
||||
variables:
|
||||
- family:
|
||||
name: general
|
||||
variables:
|
||||
- variable:
|
||||
name: mode_conteneur_actif
|
||||
type: string
|
||||
description: Description
|
||||
value:
|
||||
- text: non
|
18
tests/dictionaries/01base_float/yml/00-base.yml
Normal file
18
tests/dictionaries/01base_float/yml/00-base.yml
Normal file
|
@ -0,0 +1,18 @@
|
|||
version: '0.10'
|
||||
variables:
|
||||
- family:
|
||||
name: general
|
||||
variables:
|
||||
- variable:
|
||||
name: float
|
||||
type: float
|
||||
description: Description
|
||||
value:
|
||||
- text: '0.527'
|
||||
- variable:
|
||||
name: float_multi
|
||||
type: float
|
||||
description: Description
|
||||
multi: 'True'
|
||||
value:
|
||||
- text: '0.527'
|
15
tests/dictionaries/01base_help_quote/yml/00-base.yml
Normal file
15
tests/dictionaries/01base_help_quote/yml/00-base.yml
Normal file
|
@ -0,0 +1,15 @@
|
|||
version: '0.10'
|
||||
variables:
|
||||
- family:
|
||||
name: general
|
||||
variables:
|
||||
- variable:
|
||||
name: mode_conteneur_actif
|
||||
type: string
|
||||
description: Redefine description
|
||||
help: message with '
|
||||
- variable:
|
||||
name: mode_conteneur_actif1
|
||||
type: string
|
||||
description: Redefine description
|
||||
help: message with "
|
13
tests/dictionaries/01base_multi/yml/00-base.yml
Normal file
13
tests/dictionaries/01base_multi/yml/00-base.yml
Normal file
|
@ -0,0 +1,13 @@
|
|||
version: '0.10'
|
||||
variables:
|
||||
- family:
|
||||
name: general
|
||||
variables:
|
||||
- variable:
|
||||
name: mode_conteneur_actif
|
||||
type: string
|
||||
description: Redefine description
|
||||
hidden: 'True'
|
||||
multi: 'True'
|
||||
value:
|
||||
- text: non
|
14
tests/dictionaries/01base_multi_notuniq/yml/00-base.yml
Normal file
14
tests/dictionaries/01base_multi_notuniq/yml/00-base.yml
Normal file
|
@ -0,0 +1,14 @@
|
|||
version: '0.10'
|
||||
variables:
|
||||
- family:
|
||||
name: general
|
||||
variables:
|
||||
- variable:
|
||||
name: mode_conteneur_actif
|
||||
type: string
|
||||
description: Redefine description
|
||||
hidden: 'True'
|
||||
multi: 'True'
|
||||
unique: 'False'
|
||||
value:
|
||||
- text: non
|
14
tests/dictionaries/01base_multi_uniq/yml/00-base.yml
Normal file
14
tests/dictionaries/01base_multi_uniq/yml/00-base.yml
Normal file
|
@ -0,0 +1,14 @@
|
|||
version: '0.10'
|
||||
variables:
|
||||
- family:
|
||||
name: general
|
||||
variables:
|
||||
- variable:
|
||||
name: mode_conteneur_actif
|
||||
type: string
|
||||
description: Redefine description
|
||||
hidden: 'True'
|
||||
multi: 'True'
|
||||
unique: 'True'
|
||||
value:
|
||||
- text: non
|
19
tests/dictionaries/01base_provider/yml/00-base.yml
Normal file
19
tests/dictionaries/01base_provider/yml/00-base.yml
Normal file
|
@ -0,0 +1,19 @@
|
|||
version: '0.10'
|
||||
variables:
|
||||
- family:
|
||||
name: general
|
||||
variables:
|
||||
- variable:
|
||||
name: float
|
||||
type: float
|
||||
description: Description
|
||||
provider: float
|
||||
value:
|
||||
- text: '0.527'
|
||||
- variable:
|
||||
name: float_multi
|
||||
type: float
|
||||
description: Description
|
||||
multi: 'True'
|
||||
value:
|
||||
- text: '0.527'
|
6
tests/dictionaries/01base_provider_extra/yml/00-base.yml
Normal file
6
tests/dictionaries/01base_provider_extra/yml/00-base.yml
Normal file
|
@ -0,0 +1,6 @@
|
|||
version: '0.10'
|
||||
variables:
|
||||
- variable:
|
||||
name: float
|
||||
type: float
|
||||
description: Description
|
|
@ -0,0 +1,9 @@
|
|||
version: '0.10'
|
||||
variables:
|
||||
- family:
|
||||
name: example
|
||||
variables:
|
||||
- variable:
|
||||
name: description
|
||||
type: string
|
||||
provider: example
|
20
tests/dictionaries/01base_provider_hidden/yml/00-base.yml
Normal file
20
tests/dictionaries/01base_provider_hidden/yml/00-base.yml
Normal file
|
@ -0,0 +1,20 @@
|
|||
version: '0.10'
|
||||
variables:
|
||||
- family:
|
||||
name: general
|
||||
variables:
|
||||
- variable:
|
||||
name: float
|
||||
type: float
|
||||
description: Description
|
||||
provider: float
|
||||
hidden: 'True'
|
||||
value:
|
||||
- text: '0.527'
|
||||
- variable:
|
||||
name: float_multi
|
||||
type: float
|
||||
description: Description
|
||||
multi: 'True'
|
||||
value:
|
||||
- text: '0.527'
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue