Comment valider mon fichier YAML à partir de la ligne de commande?


88

Je rencontre des problèmes pour extraire un fichier de configuration YAML:

Erreur fatale: lors de l'analyse d'un mappage de bloc; attendu <fin de bloc>, mais entrée de bloc trouvée

Bien qu'il existe de nombreux validateurs YAML en ligne, que j'ai essayés et que j'ai aidés, j'aimerais valider mes fichiers YAML à partir de la ligne de commande et les intégrer dans mon pipeline d'intégration continue.

Comment puis-je valider la syntaxe d'un fichier YAML sur la ligne de commande?


5
Essayez:travis lint .travis.yml
kenorb

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

20
Cette question ne doit pas être close. Peut-être reformulez-le en "Comment valider mon fichier YAML à partir de la ligne de commande". C'est une question valide et utile
Hanxue

4
Seconded @hanxue - Ceci apparaît comme le premier résultat lors de la recherche du sujet et devrait être une référence utile lorsque Google nous amènera ici.
brice

4
Ouais, cette question ne devrait pas être fermée. Je ne pense pas que les réponses soient des opinions ou du spam.
Joey Novak

Réponses:


144

Avec l'installation de base de Ruby, cela devrait fonctionner:

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

Version Python (merci @Murphy):

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

2
Si vous supprimez le puts yde la fin, vous obtenez un comportement UNIX plus standard: si le fichier est valide, rien ne sera imprimé, et s'il n'est pas valide, vous verrez une exception et une trace de pile.
bdesham le

… Et si vous supprimez le, puts yvous pouvez également vous débarrasser du y=.
bdesham

Merci, c'est certainement mieux et plus court.
Tombart

1
Et si vous ne l'utilisez que dans le cadre d'un pipeline de test ci, vous n'en avez pas du tout besoin puts. Le code de retour est simplement 0valide, sinon nul et vous obtiendrez une trace de pile d'exceptions. Réduit le bruit sur la sortie CLI si vous la regardez même.
Jeff Puckett

1
Si vous utilisez ce qui suit: ruby -e "require 'yaml';puts YAML.load_file(ARGV[0])"vous pouvez ensuite transmettre le nom de fichier après, au lieu de devoir modifier directement l'extrait de code.
pnomolos

22

Étant donné que vous avez une installation perl sur le serveur sur lequel vous travaillez, et qu'il dispose de certains des outils de base de YAML, vous pouvez utiliser ...

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

Il convient de noter que ce sera strict dans son interprétation du fichier, mais utile.


3
Impossible de localiser YAML.pm
Natim

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

probablement un problème avec l'installation de CPAN mais:Can't locate object method "install" via package "YAML" at -e line 1.
Cheruvim

Si ce qui précède ne fonctionne pas, vous pouvez toujours essayer: perl -MCPAN -e 'shell'puis à la ligne de commande faireinstall YAML
Cheruvim

8

Vous pouvez utiliser yamllint . Il est disponible dans Homebrew, etc. Il peut être utilisé pour la validation de la syntaxe ainsi que pour le linting.



-9

Ou bien installé (gratuit) Eclipse IDE, puis l'éditeur YEdit yaml et voyez votre yaml avec la coloration syntaxique, les indicateurs d'erreur et les vues de contour. Le coût d'installation unique fonctionne plutôt bien pour moi.


2
OP a spécifiquement demandé des solutions CLI.
crantok
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.