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?

diaporamap2
la source
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
Tombart
la source
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.

CS Marshall
la source
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.

James Hiew
la source
5

Pour corriger vos .yamlfichiers, je recommande l'outil yamllint. Il peut être lancé facilement depuis la console locale.

Le package yamllintest disponible pour tous les principaux systèmes d'exploitation.

Il peut être installé à partir des sources de paquets du système. (par exemple sudo apt-get install yamllint). Consultez la documentation pour un démarrage et une installation rapides.

kinafu
la source
-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.

Ernie
la source
2
OP a spécifiquement demandé des solutions CLI.
crantok