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
kubectlkombiniert 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.