Wie überprüfe ich meine YAML-Datei über die Befehlszeile?


89

Ich habe Probleme beim Abrufen aus einer YAML-Konfigurationsdatei:

Schwerwiegender Fehler: beim Parsen einer Blockzuordnung; erwartet <Blockende>, aber Blockeintrag gefunden

Obwohl es viele Online-YAML-Validatoren gibt, die ich ausprobiert und geholfen habe, möchte ich meine YAML-Dateien über die Befehlszeile validieren und in meine Pipeline für die kontinuierliche Integration integrieren.

Wie kann ich die Syntax einer YAML-Datei in der Befehlszeile überprüfen?


5
Versuchen Sie:travis lint .travis.yml
Kenorb

4
python -c "from yaml import load, Loader; load(open('.travis.yml'), Loader=Loader)"
Natim

21
Diese Frage sollte nicht geschlossen werden. Formulieren Sie es möglicherweise in "Wie überprüfe ich meine YAML-Datei über die Befehlszeile?". Dies ist eine gültige und nützliche Frage
Hanxue

5
Seconded @hanxue - Dies ist das erste Ergebnis bei der Suche nach dem Thema und sollte eine nützliche Referenz sein, wenn Google uns hier landet.
Brice

5
Ja, diese Frage sollte nicht geschlossen werden. Ich denke nicht, dass die Antworten eine Meinung oder Spam sind.
Joey Novak

Antworten:


145

Bei der grundlegenden Ruby-Installation sollte dies funktionieren:

ruby -ryaml -e "p YAML.load(STDIN.read)" < data.yaml

Python-Version (thx @Murphy):

pip install pyyaml
python -c 'import yaml, sys; print(yaml.safe_load(sys.stdin))' < data.yaml

2
Wenn Sie das puts yam Ende entfernen, erhalten Sie ein standardmäßigeres UNIX-Verhalten: Wenn die Datei gültig ist, wird nichts gedruckt, und wenn sie ungültig ist, werden eine Ausnahme und eine Stapelverfolgung angezeigt.
Bdesham

… Und wenn Sie das entfernen puts y, können Sie das auch loswerden y=.
Bdesham

Danke, das ist definitiv besser und kürzer.
Tombart

1
Und wenn Sie dies wirklich nur als Teil einer CI-Test-Pipeline verwenden, ist dies überhaupt nicht erforderlich puts. Der Rückkehrcode ist einfach, 0wenn er gültig ist, andernfalls ungleich Null, und Sie erhalten eine Ausnahme-Stapelverfolgung. Reduziert das Rauschen am CLI-Ausgang, wenn Sie es überhaupt betrachten.
Jeff Puckett

1
Wenn Sie Folgendes verwenden: ruby -e "require 'yaml';puts YAML.load_file(ARGV[0])"Sie können den Dateinamen nachher übergeben, anstatt das Snippet direkt bearbeiten zu müssen.
pnomolos

22

Wenn Sie eine Perl-Installation auf dem Server haben, auf dem Sie arbeiten, und einige der grundlegenden YAML-Tools enthält, können Sie ...

perl -MYAML -e 'use YAML;YAML::LoadFile("./file.yaml")'

Es sollte beachtet werden, dass dies bei der Interpretation der Datei streng, aber nützlich ist.


3
Kann YAML.pm
Natim

4
/ usr / bin / perl -MCPAN -e 'install YAML'
Ben Mathews

wahrscheinlich ein Problem mit der CPAN-Installation, aber:Can't locate object method "install" via package "YAML" at -e line 1.
Cheruvim

Wenn das oben genannte nicht funktioniert, können Sie immer versuchen: perl -MCPAN -e 'shell'und dann an der Befehlszeileinstall YAML
Cheruvim



1

Wenn Sie keinen Interpreter in Ihrer Umgebung installiert haben, aber dennoch eine Locke haben , können Sie ein Online-Linter-Projekt wie Lint-Trilogy verwenden :

curl -X POST  --data "data=$(cat myfile.yml)" https://www.lint-trilogy.com/lint/yaml/json

Es liefert das Validierungsergebnis inkl. Fehlerbeschreibungen (falls vorhanden) als json oder csv oder, falls ausreichend, als Klartext wahr oder falsch .

Es ist auch als Docker-Datei verfügbar. Wenn Sie also häufig einen REST-basierten Linter benötigen, möglicherweise in einer CI / CD-Pipeline, kann es hilfreich sein, eine eigene Instanz auf Ihrer Site zu hosten.


-9

Oder installieren Sie abwechselnd (kostenlos) Eclipse IDE und dann YEdit yaml editor und sehen Sie Ihr yaml mit Syntaxhervorhebung, Fehlerflags und Gliederungsansichten. Einmalige Einrichtungskosten funktionieren für mich ziemlich gut.


3
OP hat speziell nach CLI-Lösungen gefragt.
Crantok
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.