YAML: Konfigurationsdateien ohne Unordnung
Warum YAML zum Standard für Config-Dateien wurde und wie du seine Fallstricke vermeidest.
Jedes Kubernetes-Manifest. Jeder GitHub Actions Workflow. Jede Docker Compose-Datei.
YAML ist überall für Konfiguration. Es ist lesbar, es ist flexibel und es hat einige überraschende Eigenheiten.
Warum YAML?
JSON ist strikt: doppelte Anführungszeichen, keine Kommentare, keine nachgestellten Kommas.
YAML ist verzeihend: minimale Syntax, Kommentare erlaubt, menschenlesbar.
# YAML-Konfiguration
database:
host: localhost
port: 5432
name: myapp
{
"database": {
"host": "localhost",
"port": 5432,
"name": "myapp"
}
}
Dieselben Daten, weniger Rauschen in YAML.
Die Grundlagen
Schlüssel-Wert-Paare:
name: John
age: 30
Verschachtelte Strukturen (verwende Leerzeichen, keine Tabs):
person:
name: John
age: 30
Listen:
colors:
- red
- green
- blue
Inline-Listen und -Objekte:
colors: [red, green, blue]
person: {name: John, age: 30}
Das Norwegen-Problem
country: NO
Was ist NO? Ein Boolean false. YAML interpretiert NO, Yes, on, off und andere als Booleans.
Norwegens Ländercode wird zu false. Deine Konfiguration bricht auf mysteriöse Weise.
Lösung: Zitiere Strings, die als Booleans interpretiert werden könnten.
country: "NO"
Das mehrzeilige String-Problem
description: This is a long
description that continues
Sind das zwei Zeilen oder eine mit „that continues" eingerückt? Hängt vom YAML-Parser ab.
Explizit mehrzeilig:
# Literal (behält Zeilenumbrüche)
description: |
Line one
Line two
# Gefaltet (verbindet Zeilen)
description: >
This is one long
line when parsed
Einrückung ist signifikant
Zwei Leerzeichen. Keine Tabs. Kein Leerzeichen. Keine drei.
# Richtig
parent:
child: value
# Falsch - Tab-Zeichen
parent:
child: value
Tabs und Leerzeichen zu mischen bricht YAML stillschweigend. Konfiguriere deinen Editor, Leerzeichen zu verwenden.
Zahlen-Interpretation
version: 1.10
Ist das der String „1.10" oder die Zahl 1,1? Die meisten Parser interpretieren es als 1,1.
Fließkomma-Mathematik schlägt wieder zu. Zitiere Versionsnummern.
version: "1.10"
Anker und Aliase
YAML kann wiederholten Inhalt referenzieren:
defaults: &defaults
timeout: 30
retries: 3
production:
<<: *defaults
timeout: 60
Mächtig zur Reduzierung von Duplikation. Verwirrend, wenn übertrieben.
YAML validieren
YAMLs Flexibilität bedeutet, viele Dinge, die gültig aussehen, sind es nicht.
- Verwende einen Linter in deinem Editor
- Validiere gegen ein Schema, wenn möglich
- Konvertiere zu JSON, um zu sehen, was der Parser tatsächlich interpretiert hat
Wenn deine Config nicht funktioniert, prüfe, was der Parser sieht, nicht was du geschrieben hast.
YAML vs. JSON vs. TOML
YAML: Menschenlesbar, viele Features, eigenartige Grenzfälle.
JSON: Strikt, einfach, weithin unterstützt, ausführlich.
TOML: Explizit, weniger Überraschungen, gewinnt an Popularität für Configs.
Für Maschine-zu-Maschine-Daten ist JSON sicherer. Für menschenbearbeitete Configs funktioniert YAML, wenn du die Fallstricke kennst.
YAML priorisiert Lesbarkeit über Striktheit. Dieser Kompromiss schafft Grenzfälle. Zitiere Strings, die wie Booleans oder Zahlen aussehen, verwende explizite mehrzeilige Syntax und validiere vor Deployment.