RunToolz iconRunToolz
Welcome to RunToolz!
YAMLKonfigurationDevOps

YAML: Konfigurationsdateien ohne Unordnung

Warum YAML zum Standard für Config-Dateien wurde und wie du seine Fallstricke vermeidest.

RunToolz Team16. Januar 20263 min read

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.

Möchten Sie es selbst ausprobieren?YAML zu JSON konvertieren

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.