YAML 101
🚧
- Dire pas trop pour stocker de la données, plutot conf
1 Qu’est-ce que YAML ?
YAML est un acronyme récursif signifiant : YAML Ain’t Markup Language permet de stocker de la donnée structurée.
C’est un format facile à lire et à écrire pour les humain. Il n’y a pas de balises, sa syntaxe est basée sur l’indentation.
Il est souvent utilisé pour la configuration des fichiers, le stockage de données, et les échanges de données entre langages de programmation.
2 Pourquoi utiliser YAML ?
- Lisibilité
- YAML est conçu pour être lisible par l’homme. La syntaxe est simple et directe, sans beaucoup de ponctuations.
- Les indentations permettent une structure claire et hiérarchisée, semblable à celle des langages de programmation comme Python.
- Flexibilité
- YAML supporte des structures de données complexes comme les listes imbriquées et les dictionnaires.
- Il permet des alias et des ancres pour éviter la duplication de données, ce qui peut être utile pour des fichiers de configuration réutilisables.
- Compatibilité avec les autres formats
- YAML peut facilement être converti en JSON, et vice versa
- Usage dans DevOps
- YAML est largement utilisé dans les outils de gestion de configuration, les pipelines CI/CD, et les orchestrateurs de conteneurs
3 Syntaxe
Voici quelques exemples de syntaxe avec son équivalent json.
3.1 Les types de base (Attributs)
Tout commence par l’assignation de valeurs à des clés.
yaml
person:
name: Alice # str
city: "Amiens" # str
age: 30 # int
height: 1.75 # float
student: false # bool
birth_date: 1994-05-15 # datejson
{
"person": {
"name": "Alice",
"age": 30,
"height": 1.75,
"student": false,
"birth_date": "1994-05-15"
}
}3.2 Liste de valeurs
Une structure de données peut contenir une séquence d’éléments. En YAML, nous avons deux façons de déclarer une liste : le mode “bloc” (plus lisible) ou le mode “flux” (plus compact, identique au JSON).
yaml
hobbies:
- chess
- hiking
- landart
--- # ou
hobbies: ["chess", "hiking", "landart"]json
{
"hobbies": [
"chess",
"hiking",
"landart"
]
}On peut également imbriquer des dictionnaires à l’intérieur de listes, ce qui est très courant pour représenter des tables de données ou des objets complexes.
yaml
servers:
- name: server1
ip: 192.168.1.1
- name: server2
ip: 192.168.1.2
- {name: "server3", ip: 192.168.1.3}json
{
"servers": [
{"name": "server1", "ip": "192.168.1.1"},
{"name": "server2", "ip": "192.168.1.2"},
{"name": "server3", "ip": "192.168.1.3"}
]
}3.3 Ancre et alias
L’un des grands avantages de YAML sur JSON est sa capacité à gérer la redondance. Si une donnée est répétée plusieurs fois, on peut définir une ancre (&) pour la nommer, et un alias (*) pour l’appeler.
yaml
parent: &pere Bob
child:
- name: Eva
papa: *pere
- name: Laury
papa: *perejson
{
"parent": "Bob",
"child": [
{"name": "Eva", "parent": "Bob"},
{"name": "Laury", "parent": "Bob"}
]
}3.4 Héritage
L’opérateur << permet de créer un template de base et de ne modifier que les paramètres spécifiques pour chaque instance.
yaml
default: &default_settings
timeout: 30
retries: 5
server1:
<<: *default_settings
name: server1
server2:
<<: *default_settings
name: server2
retries: 3json
{
"default": {
"timeout": 30,
"retries": 5
},
"server1": {
"timeout": 30,
"retries": 5,
"name": "server1"
},
"server2": {
"timeout": 30,
"retries": 3,
"name": "server2"
}
}3.5 Texte multi-lignes
Quand il s’agit de stocker de longs blocs de texte (descriptions, requêtes SQL, scripts, poèmes), YAML propose deux opérateurs très utiles pour gérer les retours à la ligne de manière explicite.
- Le pipe
|: préserve les retours à la ligne. - Le chevron
>: transforme les retours à la ligne en espaces (pour faire un seul gros bloc).
yaml
# En conservant les retours à la ligne
fable: |
Maître Corbeau, sur un arbre perché,
Tenait en son bec un fromage.
Maître Renard, par l'odeur alléché,
Lui tint à peu près ce langage :
"Hé ! bonjour, Monsieur du Corbeau.
Que vous êtes joli ! que vous me semblez beau !
Sans mentir, si votre ramage
Se rapporte à votre plumage,
Vous êtes le Phénix des hôtes de ces bois."
À ces mots le Corbeau ne se sent pas de joie ;
Et pour montrer sa belle voix,
Il ouvre un large bec, laisse tomber sa proie.
Le Renard s'en saisit, et dit : "Mon bon Monsieur,
Apprenez que tout flatteur
Vit aux dépens de celui qui l'écoute :
Cette leçon vaut bien un fromage, sans doute."
Le Corbeau honteux et confus
Jura, mais un peu tard, qu'on ne l'y prendrait plus.
# En supprimant les retours à la ligne
choixpeau: >
Les nouveaux élèves de Poudlard sont répartis en quatre maisons : Gryffondor
pour les courageux, Poufsouffle pour les travailleurs, Serdaigle pour les
intelligents, Serpentard pour les ambitieux. Le Choixpeau magique, qui
s'occupe de la répartition, hésite sur la meilleure maison pour Harry.
Comme Harry a entendu dire que les mages noirs venaient tous de Serpentard,
il demande à aller ailleurs, et le Choixpeau l'envoie à Gryffondor, avec
Ron et Hermione. Albus Dumbledore, le directeur, prévient les élèves qu’ils
ne doivent pas aller dans la Forêt interdite, ni dans le couloir du deuxième
étage.