YAML est le format de configuration incontournable pour Docker, Kubernetes et les pipelines CI/CD. Malgré sa syntaxe lisible, il est étonnamment facile de se tromper.
Où YAML est utilisé
- Docker Compose
- Manifestes Kubernetes
- GitHub Actions / GitLab CI
- Playbooks Ansible
- Fichiers de configuration
Règles de syntaxe de base
Indentation
YAML utilise des espaces (jamais de tabulations) :
# ✅ Correct (2-space indentation)
server:
host: localhost
port: 8080
database:
name: myapp
pool: 10
# ❌ Wrong (tab characters or inconsistent spaces)
server:
host: localhost # Tab character - INVALID!
port: 8080 # 3 spaces - inconsistent!Paires clé-valeur
Séparées par deux-points et espace :
# ✅ Correct
name: John Doe
port: 8080
# ❌ Wrong - missing space after colon
name:John DoeChaînes multi-lignes
YAML offre deux styles de scalaires bloc :
# | (literal block) - preserves newlines
description: |
This is line one.
This is line two.
Each newline is preserved.
# > (folded block) - folds newlines to spaces
description: >
This is a long paragraph
that will be joined into
a single line.Types de données
| Type | Syntaxe | Exemple |
|---|---|---|
| String | plain, "quoted", 'quoted' | name: John |
| Integer | 42, 0xFF, 0o77 | port: 8080 |
| Float | 3.14, .inf, .nan | pi: 3.14159 |
| Boolean | true/false | debug: true |
| Null | null, ~, (empty) | value: null |
| Date | YYYY-MM-DD | date: 2026-02-10 |
Le "problème norvégien"
En YAML 1.1, `NO` est interprété comme `false`. Mettez les codes pays entre guillemets :
# ❌ YAML 1.1 interprets these as booleans!
country: NO # → false
answer: yes # → true
switch: on # → true
# ✅ Fix: quote the values
country: "NO" # → string "NO"
answer: "yes" # → string "yes"
switch: "on" # → string "on"Collections
# List (sequence)
fruits:
- apple
- banana
- cherry
# Nested map
database:
host: localhost
port: 5432
credentials:
user: admin
password: secret
# Inline / Flow style
fruits: [apple, banana, cherry]
point: {x: 10, y: 20}Top 10 des erreurs YAML
| # | Erreur | Cause | Solution |
|---|---|---|---|
| 1 | Erreur de tabulation | Tabulations pour l'indentation | Remplacer par des espaces |
| 2 | Indentation incohérente | Mélange 2 et 4 espaces | Utiliser une indentation cohérente |
| 3 | Espace manquant après deux-points | `key:value` | Ajouter un espace après `:` |
| 4 | Caractères spéciaux non quotés | Valeurs avec : ou # sans guillemets | Mettre entre guillemets |
| 5 | Coercition booléenne | yes/no interprétés comme booléens | Mettre entre guillemets |
| 6 | Chaînes avec deux-points | URLs cassées au 2e deux-points | Quoter la valeur entière |
| 7 | Clés dupliquées | Même clé deux fois | Supprimer les doublons |
| 8 | Espaces en fin de ligne | Espaces invisibles | Configurer l'éditeur |
| 9 | Indentation de liste erronée | Items non alignés | Aligner les `-` |
| 10 | Séparateur de document manquant | Documents multiples sans `---` | Ajouter `---` |
YAML vs JSON vs TOML
| Fonctionnalité | YAML | JSON | TOML |
|---|---|---|---|
| Comments | # support | None | # support |
| Multi-line strings | | and > | \\n only | """ triple quotes |
| Data types | Rich (dates, etc.) | Basic (6 types) | Rich (dates, etc.) |
| Readability | High | Medium | High |
| Machine parsing | Complex | Simple | Medium |
| Best for | Config files | APIs, data exchange | App config |
Bonnes pratiques
- Utiliser un linter YAML en CI/CD
- Afficher les espaces dans l'éditeur
- Utiliser 2 espaces
- Quoter les chaînes ambiguës
- Utiliser la validation de schéma
- Garder les fichiers petits
FAQ
Peut-on utiliser des tabulations en YAML ?
Non. YAML interdit strictement les tabulations pour l'indentation.
Différence entre guillemets simples et doubles ?
Simples : chaîne littérale. Doubles : séquences d'échappement autorisées.
Comment représenter null ?
Utilisez `null`, `~`, ou laissez la valeur vide.
Pourquoi YAML traite "NO" comme false ?
YAML 1.1 traite yes/no comme booléens. YAML 1.2 ne reconnaît que true/false.