¿Cómo valido mi archivo YAML desde la línea de comandos?

88

Tengo problemas para extraer de un archivo de configuración YAML:

Error fatal: al analizar un mapeo de bloques; <block end> ​​esperado, pero se encontró una entrada de bloque

Si bien hay muchos validadores YAML en línea, que he probado y he ayudado, me gustaría validar mis archivos YAML desde la línea de comandos e integrarlos en mi canal de integración continua.

¿Cómo puedo validar la sintaxis de un archivo YAML en la línea de comando?

diapositivasp2
fuente
5
Prueba:travis lint .travis.yml
kenorb
4
python -c "from yaml import load, Loader; load(open('.travis.yml'), Loader=Loader)"
Natim
20
Esta pregunta no debe cerrarse. Quizás vuelva a redactarlo como "¿Cómo valido mi archivo YAML desde la línea de comandos?". Esta es una pregunta válida y útil
Hanxue
4
Seconded @hanxue: aparece como el primer resultado al buscar el tema y debería ser una referencia útil cuando Google nos aterrice aquí.
brice
4
Sí, esta pregunta no debería cerrarse. No creo que las respuestas tengan opiniones o sean spam.
Joey Novak

Respuestas:

144

Con la instalación básica de Ruby, esto debería funcionar:

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

Versión de Python (gracias @Murphy):

pip install pyyaml
python -c 'import yaml, sys; print(yaml.safe_load(sys.stdin))' < data.yaml
Tombart
fuente
2
Si elimina el puts ydel final de esto, obtendrá un comportamiento UNIX más estándar: si el archivo es válido, no se imprimirá nada, y si no es válido, verá una excepción y un seguimiento de la pila.
bdesham
… Y si quita el puts y, también puede deshacerse del y=.
bdesham
Gracias, definitivamente es mejor y más corto.
Tombart
1
Y si realmente solo está usando esto como parte de una tubería de prueba de ci, entonces no es necesario puts. El código de retorno es simplemente 0si es válido, de lo contrario, no es cero y obtendrá un seguimiento de pila de excepción. Reduce el ruido en la salida CLI incluso si lo está mirando.
Jeff Puckett
1
Si usa lo siguiente: ruby -e "require 'yaml';puts YAML.load_file(ARGV[0])"puede pasar el nombre del archivo después, en lugar de tener que editar el fragmento directamente.
pnomolos
22

Dado que tiene una instalación de perl en el servidor en el que está trabajando, y tiene algunas de las herramientas básicas de YAML, puede usar ...

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

Cabe señalar que esto será estricto en su interpretación del archivo, pero útil.

CS Marshall
fuente
3
No puedo localizar YAML.pm
Natim
4
/ usr / bin / perl -MCPAN -e 'instalar YAML'
Ben Mathews
probablemente un problema con la instalación de CPAN pero:Can't locate object method "install" via package "YAML" at -e line 1.
Cheruvim
Si lo anterior no funciona, siempre puede intentarlo: perl -MCPAN -e 'shell'y luego, en la línea de comandos, hacerloinstall YAML
Cheruvim
8

Podrías usar yamllint . Está disponible en Homebrew, etc. Se puede utilizar para la validación de sintaxis así como para linchar.

James Hiew
fuente
-9

O instale alternativamente (gratis) Eclipse IDE y luego YEdit yaml editor y vea su yaml con resaltado de sintaxis, indicadores de error y vistas de esquema. El costo de configuración único funciona bastante bien para mí.

Ernie
fuente
2
OP solicitó específicamente soluciones CLI.
crantok