Definition
YAML (YAML Ain't Markup Language) est un format de serialisation de donnees concu pour etre lisible par les humains. Il est devenu le standard pour les fichiers de configuration dans l'ecosysteme DevOps et cloud-native.
YAML est un sur-ensemble de JSON : tout fichier JSON valide est aussi un fichier YAML valide.
Syntaxe de base
# Ceci est un commentaire (JSON ne supporte pas les commentaires !)
# Scalaires
nom: Alice Dupont
age: 30
actif: true
email: alice@exemple.com
# Objet imbrique
adresse:
rue: 123 rue de la Paix
ville: Paris
cp: "75001" # Guillemets pour forcer le type string
# Liste
langages:
- Python
- JavaScript
- Go
# Liste inline
tags: [devops, cloud, kubernetes]
# Texte multi-ligne (block scalar)
description: |
Ceci est un texte
sur plusieurs lignes.
Les sauts de ligne sont preserves.
resume: >
Ceci est un texte long
qui sera joint en une
seule ligne.
Ou YAML est utilise
| Outil | Fichier |
|---|---|
| Docker Compose | docker-compose.yml |
| Kubernetes | deployment.yaml, service.yaml |
| GitHub Actions | .github/workflows/*.yml |
| GitLab CI | .gitlab-ci.yml |
| Ansible | playbooks, inventory |
| Helm | Chart.yaml, values.yaml |
| CloudFormation | templates |
Exemple : Docker Compose
version: "3.8"
services:
api:
build: .
ports:
- "3000:3000"
environment:
DATABASE_URL: postgresql://user:pass@db:5432/mydb
depends_on:
- db
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: secret
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
Pieges courants
L'indentation compte (espaces, PAS de tabs !)
# CORRECT (2 espaces)
parent:
enfant: valeur
# ERREUR (tab)
parent:
enfant: valeur
Les valeurs ambigues
# Attention : "yes", "no", "on", "off" sont interpretes comme booleens !
actif: yes # boolean true
code: "yes" # string "yes"
# Les nombres avec leading zeros
version: 010 # octal (8) !
version: "010" # string "010"
YAML vs JSON vs TOML
| YAML | JSON | TOML | |
|---|---|---|---|
| Commentaires | Oui | Non | Oui |
| Lisibilite | Excellente | Bonne | Bonne |
| Complexite | Elevee (ancres, tags) | Faible | Faible |
| Erreurs courantes | Indentation, types | Virgules, guillemets | Peu |
| Usage principal | DevOps, config | API, data exchange | Config (Rust, Go) |