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?

Diashowp2
quelle
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
Tombart
quelle
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.

CS Marshall
quelle
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
9

Sie könnten Yamllint verwenden . Es ist in Homebrew usw. verfügbar. Es kann sowohl zur Syntaxvalidierung als auch zum Flusen verwendet werden.

James Hiew
quelle
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.

Doc
quelle
-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.

Ernie
quelle
3
OP hat speziell nach CLI-Lösungen gefragt.
Crantok