yq ist ein Kommandozeilen-Werkzeug zum Lesen und Verändern von YAML-Dateien. Die verbreitetste Implementierung stammt von Mike Farah (Go, mikefarah/yq) und verwendet eine an jq angelehnte Ausdruckssprache — wer jq kennt, findet sich sofort zurecht. Zusätzlich zu YAML verarbeitet yq auch JSON, XML, INI, TOML, CSV und Properties-Dateien.

Grundlagen

yq eval '.spec.replicas' deploy.yaml   # Wert lesen
yq eval '.' datei.yaml                 # YAML hübsch ausgeben / validieren
yq eval '.a.b = 2' -i datei.yaml       # Wert setzen (-i: in-place)
yq eval 'del(.metadata.uid)' -i pod.yaml  # Feld entfernen

Der Ausdruck .spec.replicas greift verschachtelt in die YAML-Struktur. Ohne -i schreibt yq das Ergebnis auf die Standardausgabe, die Datei bleibt unverändert.

Mehrere Dokumente und Merges

yq eval-all 'select(di == 0)' multi.yaml    # erstes Dokument eines Multi-Doc
yq eval-all 'select(di == 0) * select(di == 1)' a.yaml b.yaml  # Dokumente mergen
yq eval '.a' file1.yaml file2.yaml           # je Datei auswerten

Mit eval-all verarbeitet yq mehrere Dokumente gleichzeitig; di ist der Dokument-Index. Damit lassen sich Helm-Werte, Kubernetes-Manifeste oder CI-Konfigurationen zusammenführen.

Praxis-Tipps

  • Für Kubernetes-Manifeste kann yq direkt mit kubectl kombiniert werden: kubectl get deploy -o yaml | yq eval '.spec'.
  • Es gibt eine zweite, ältere Python-Implementierung (kislyuk/yq), die jq-Syntax direkt nutzt und YAML über jq verarbeitet — die Kommandos unterscheiden sich leicht.
  • YAML selbst ist im Glossar unter YAML erklärt, der Überblick über Datenformate unter YAML, TOML und JSON.

Verwandte Werkzeuge: Neben jq für JSON passen kubectl und Terraform, deren Konfigurationen ebenfalls YAML-basiert sind, in dieselbe Werkzeugkiste.