5 Fonctionnalités avancées du langage YAML

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 :

Comment Parser du YAML facilement en Python ?
Effectuer du “parsing” (parcourir un fichier en entrée et en analyser son contenu) d’un fichier YAML en Python peut s’avérer intéressant lorsque l’on a des données qui sont entrées par un utilisateur manuellement et que l’on souhaite les extraire ou bien même lorsque ce fichier YAML est utilisé par…

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.