5 Fonctionnalités avancées du langage YAML
Le langage YAML est très utilisé, notamment pas des outils tel que Kubernetes, Docker-Compose ou encore Ansible du fait de sa lisibilité très claire, de sa simplicité ainsi que de sa flexibilité. Regardons les quelques fonctionnalités avancées de ce langage.
1.Les ancres
Les ancres permettent de réutiliser des blocs précédents afin de créer des sortes de "templates". Cela permet de ne pas dupliquer des lignes. Pour les utiliser, il suffit de créer une ancre en utilisant le caractère "&" suivi d'un nom unique, puis de référencer cette ancre en utilisant le caractère "*" suivi du nom de l'ancre avec "<<" pour préciser qu'il s'agit d'une ancre. Voici un exemple:
# Création d'une ancre
ancre: &nom_de_l_ancre
clé: valeur
autre_clé: autre_valeur
# Utilisation de l'ancre
objet:
<<: *nom_de_l_ancre
2. Les inclusions
Les inclusions permettent d'inclure un autre fichier YAML (de l'appeler en quelques sortes). Vous pourrez donc vous retrouver avec une structure composée de plusieurs fichiers YAML avec des tailles plus petites plutôt qu'un seul gros fichier. Pour les utiliser, il suffit de créer une référence à un autre fichier YAML en utilisant l'attribut !include
Par exemple :
# Inclusion du fichier YAML
!include repertoire1/fichier1.yaml
# Récupération d'une clé contenue dans le fichier inclus
clé: valeur
3. Les directives
Il est possible de déclarer des directives pour fixer la version de YAML dans notre fichier par exemple. Les directives sont définies en utilisant %
pour définir une directive et ---
pour séparer la directive du document YAML.
Utilité : Un parser peut refuser de traiter un fichier d’une version majeure supérieure à celle qu'il prend en charge. Par exemple, un parser avec une version 1.1
de YAML doit refuser de parser un fichier YAML en version 2.0
et tomber en erreur, mais uniquement émettre un warning
pour les versions mineures inférieures ( 1.0
dans notre exemple).
Exemple de directive de version :
%YAML 1.3
---
clé: valeur
Pour plus d'informations sur le parsing du YAML, n'hésitez pas à lire cet article :
4. Les tags
Il faut savoir que le langage YAML est typé. Par défaut, il n'est pas nécessaire de préciser le type d'une donnée mais dans certains cas, il peut être pratique de le préciser (notamment pour filtrer un type de données lors du parsing).
Voici un exemple où l'on précise le type de données avec le tag !!timestamp
:
date: !!timestamp '1970-01-01 00:00:00+00:00'
Il existe de nombreux tags YAML, en voici quelques exemples :
!!str
pour une chaîne de caractères.!!int
pour un nombre entier.!!bool
pour un booléen.!!seq
pour une liste.
Il est aussi possible de créer son propre tag YAML en utilisant la syntaxe suivante :
ma-clé: !montag 123
Par exemple, Ansible a crée son propre tag YAML représenté !vault
afin de créer un secret pour Ansible Vault.
5. Le multi lignes
Il existe plusieurs manières d'effectuer du multi lignes en langage YAML, je vais en présenter une partie moins connue !
Le YAML est souvent amené à être parsé, il est donc important de contrôler la façon dont le texte est affiché.
La balise YAML |-
indique que le bloc doit être plié en style strip
.
Cela signifie que les sauts de ligne et les espaces (whitespaces) en début de ligne sont supprimés dans le texte plié. Par exemple, si vous avez un bloc comme celui-ci :
key: |-
- This is a
list item
- This is another
list item
Vous aurez ceci comme résultat :
- This is a list item
- This is another list item
On peut voir que les sauts de ligne et les espaces en début de ligne ont été supprimés.
La balise YAML |+
indique que le bloc de texte qui suit doit être plié en style keep
. Cela signifie que les sauts de ligne et les espaces en début de ligne sont conservés dans le texte plié. Par exemple, si vous avez un bloc comme celui-ci :
key: |+
- This is a
list item
- This is another
list item
Vous aurez ceci comme résultat :
- This is a
list item
- This is another
list item
On peut voir que les sauts de ligne et les espaces en début de ligne ont été conservés.