2022-11-10 22:58:24 +01:00
|
|
|
# La bibliothèque Rougail
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
Rougail est une bibliothèque qui permet de charger simplement des dictionnaires et de générer des templates.
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
Dans les exemples suivant, nous utiliserons une configuration particulière de Rougail.
|
|
|
|
Vous retrouverez toutes les options pour [personnaliser les répertoires utilisés](config.md).
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
Le script contiendra donc les éléments de configuration suivant :
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
```python
|
|
|
|
from rougail import RougailConfig
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
RougailConfig['dictionaries_dir'] = ['dict']
|
|
|
|
RougailConfig['templates_dir'] = ['tmpl']
|
|
|
|
RougailConfig['tmp_dir'] = 'tmp'
|
|
|
|
RougailConfig['destinations_dir'] = 'dest'
|
|
|
|
RougailConfig['functions_file'] = 'funcs/functions.py'
|
2021-02-14 10:12:42 +01:00
|
|
|
```
|
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
Penser a créer les répertoires :
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
```bash
|
2022-11-11 15:59:26 +01:00
|
|
|
$ mkdir dest dict tmp tmpl extras
|
2021-02-14 10:12:42 +01:00
|
|
|
```
|
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
## Convertisons un dictionnaire
|
|
|
|
|
|
|
|
Un dictionnaire est un ensemble d'instruction qui vont permettre de créer des variables.
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
Commençons par créer un [dictionnaire](../dictionary/rougail.md) simple.
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
Voici un premier dictionnaire dict/00-base.yml :
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2022-11-11 15:59:26 +01:00
|
|
|
```yml
|
2022-11-10 22:58:24 +01:00
|
|
|
version: '0.10'
|
|
|
|
variables:
|
|
|
|
- variable:
|
|
|
|
- name: my_variable
|
|
|
|
value:
|
|
|
|
- text: my_value
|
2021-02-14 10:12:42 +01:00
|
|
|
```
|
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
Puis, créons les objets [Tiramisu](https://framagit.org/tiramisu/tiramisu) :
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2021-02-14 18:03:15 +01:00
|
|
|
```python
|
2022-11-10 22:58:24 +01:00
|
|
|
from rougail import Rougail, RougailConfig
|
|
|
|
from asyncio import run
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
async def main():
|
|
|
|
RougailConfig['dictionaries_dir'] = ['dict']
|
|
|
|
rougail = Rougail()
|
|
|
|
config = await rougail.get_config()
|
|
|
|
print(await config.value.dict())
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
run(main())
|
2021-02-14 10:12:42 +01:00
|
|
|
```
|
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
Exécution le script :
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2022-11-11 15:59:26 +01:00
|
|
|
```sh
|
2022-11-10 22:58:24 +01:00
|
|
|
$ python3 script.py
|
|
|
|
{'rougail.my_variable': 'my_value'}
|
2021-02-14 10:12:42 +01:00
|
|
|
```
|
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
## Convertisons un dictionnaire extra
|
|
|
|
|
|
|
|
L'espace de nommage par défaut des variables et familles est "rougail". Il est possible de définir d'autres espaces de nom.
|
|
|
|
Ces espaces de nom additionnels s'appelle des "[extras](../dictionary/extra.md)".
|
|
|
|
|
|
|
|
Les espaces de nom additionnels se définissent lors de la configuration.
|
|
|
|
|
|
|
|
Par exemple, voici comment ajouter une espace de nom "example" :
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
```python
|
|
|
|
RougailConfig['extra_dictionaries']['example'] = ['extras/']
|
2021-02-14 10:12:42 +01:00
|
|
|
```
|
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
Ensuite créons un dictionnaire extra extras/00-base.yml :
|
|
|
|
|
2022-11-11 15:59:26 +01:00
|
|
|
```yml
|
2022-11-10 22:58:24 +01:00
|
|
|
version: '0.10'
|
|
|
|
variables:
|
|
|
|
- variable:
|
|
|
|
- name: my_variable_extra
|
|
|
|
value:
|
|
|
|
- text: my_value_extra
|
2021-02-14 10:12:42 +01:00
|
|
|
```
|
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
Construisons les objets Tiramisu :
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2021-02-14 18:03:15 +01:00
|
|
|
```python
|
2022-11-10 22:58:24 +01:00
|
|
|
from rougail import Rougail, RougailConfig
|
|
|
|
from asyncio import run
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
async def main():
|
|
|
|
RougailConfig['dictionaries_dir'] = ['dict']
|
|
|
|
RougailConfig['extra_dictionaries']['example'] = ['extras/']
|
|
|
|
rougail = Rougail()
|
|
|
|
config = await rougail.get_config()
|
|
|
|
print(await config.value.dict())
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
run(main())
|
2021-02-14 10:12:42 +01:00
|
|
|
```
|
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
Exécution le script :
|
2021-02-14 18:03:15 +01:00
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
```python
|
|
|
|
$ python3 script.py
|
|
|
|
{'rougail.my_variable': 'my_value', 'example.my_variable_extra': 'my_value_extra'}
|
2021-02-14 18:03:15 +01:00
|
|
|
```
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
## Templatisons un fichier
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
Un template est un fichier dans laquelle on va remplacer les valeurs attendus par le nom des variables.
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
Premièrement déclarons dans un dictionnaire complémentaire notre template dict/00-template.yml :
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2022-11-11 15:59:26 +01:00
|
|
|
```yml
|
2022-11-10 22:58:24 +01:00
|
|
|
version: '0.10'
|
|
|
|
services:
|
|
|
|
- service:
|
|
|
|
- name: test
|
|
|
|
file:
|
|
|
|
- text: /etc/example.conf
|
2021-02-14 10:12:42 +01:00
|
|
|
```
|
|
|
|
|
2022-11-11 15:20:07 +01:00
|
|
|
Et un template tmpl/example.conf (par défaut il est généré via une configuration particulière de [Cheetah](https://cheetahtemplate.org/) :
|
2021-02-14 10:12:42 +01:00
|
|
|
|
|
|
|
```
|
2022-11-10 22:58:24 +01:00
|
|
|
The value: %%my_variable
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
The extra value: %%example.my_variable_extra
|
2021-02-14 10:12:42 +01:00
|
|
|
```
|
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
Générons le template :
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
```python
|
|
|
|
from rougail import Rougail, RougailConfig
|
|
|
|
from asyncio import run
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
async def main():
|
|
|
|
RougailConfig['dictionaries_dir'] = ['dict']
|
|
|
|
RougailConfig['templates_dir'] = ['tmpl']
|
|
|
|
RougailConfig['tmp_dir'] = 'tmp'
|
|
|
|
RougailConfig['destinations_dir'] = 'dest'
|
|
|
|
RougailConfig['extra_dictionaries']['example'] = ['extras/']
|
|
|
|
RougailConfig['functions_file'] = 'funcs/functions.py'
|
|
|
|
rougail = Rougail()
|
|
|
|
config = await rougail.get_config()
|
|
|
|
await rougail.template()
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
run(main())
|
2021-02-14 10:12:42 +01:00
|
|
|
```
|
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
Le fichier dest/etc/example.conf est maintenant créé avec le contenu attendu suivant :
|
2021-02-14 10:12:42 +01:00
|
|
|
|
|
|
|
```
|
|
|
|
The value: my_value
|
|
|
|
|
|
|
|
The extra value: my_value_extra
|
|
|
|
```
|
|
|
|
|
|
|
|
## Créons une fonction personnalisé
|
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
Nous créons un dictionnaire complémentaire pour ajouter un calcul à la variable "my_variable" dans dict/00-fill.yml :
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
```yml
|
|
|
|
version: '0.10'
|
|
|
|
constraints:
|
|
|
|
- fill:
|
|
|
|
- name: return_no
|
|
|
|
target:
|
|
|
|
- text: my_variable
|
2021-02-14 10:12:42 +01:00
|
|
|
```
|
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
Puis créons la fonction "return_no" dans functions.py :
|
2021-02-14 10:12:42 +01:00
|
|
|
|
2021-02-14 18:03:15 +01:00
|
|
|
```python
|
2021-02-14 10:12:42 +01:00
|
|
|
def return_no():
|
|
|
|
return 'no'
|
|
|
|
```
|
|
|
|
|
2022-11-10 22:58:24 +01:00
|
|
|
Après avoir reconverti les dictionnaires et regénérer le template nous avons donc le contenu du fichier dest/etc/example.conf :
|
2021-02-14 10:12:42 +01:00
|
|
|
|
|
|
|
```
|
|
|
|
The value: no
|
|
|
|
|
|
|
|
The extra value: my_value_extra
|
|
|
|
```
|
|
|
|
|
2021-02-14 18:03:15 +01:00
|
|
|
La valeur de la variable "my_variable" est bien calculé à partir de la fonction "return_no".
|
2022-11-11 15:59:26 +01:00
|
|
|
|
|
|
|
|
|
|
|
#FIXME systemd
|