Come convalido il mio file YAML dalla riga di comando?


91

Ho problemi a tirare da un file di configurazione YAML:

Errore irreversibile: durante l'analisi di una mappatura dei blocchi; prevista <fine blocco>, ma è stata trovata una voce di blocco

Sebbene ci siano molti validatori YAML online, che ho provato e ho aiutato, mi piacerebbe convalidare i miei file YAML dalla riga di comando e integrarli nella mia pipeline di integrazione continua.

Come posso convalidare la sintassi di un file YAML sulla riga di comando?


5
Prova:travis lint .travis.yml
kenorb

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

21
Questa domanda non dovrebbe essere chiusa. Forse riformulalo in "Come convalido il mio file YAML dalla riga di comando". Questa è una domanda valida e utile
Hanxue

5
Seconded @hanxue - Questo si presenta come il primo risultato durante la ricerca dell'argomento e dovrebbe essere un riferimento utile quando Google ci atterra qui.
brice

5
Sì, questa domanda non dovrebbe essere chiusa. Non credo che le risposte siano supponenti o spam.
Joey Novak

Risposte:


147

Con l'installazione di base di Ruby questo dovrebbe funzionare:

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

Versione Python (grazie a @Murphy):

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

2
Se rimuovi il puts ydalla fine di questo, ottieni un comportamento UNIX più standard: se il file è valido, non verrà stampato nulla, e se non è valido vedrai un'eccezione e una traccia dello stack.
bdesham

... e se rimuovi il puts y, puoi anche sbarazzarti del file y=.
bdesham

Grazie, è decisamente migliore e più breve.
Tombart

1
E se lo stai davvero usando solo come parte di una pipeline di test CI, non ce n'è affatto bisogno puts. Il codice di ritorno è semplicemente 0se valido, altrimenti diverso da zero e otterrai una traccia dello stack di eccezioni. Riduce il rumore sull'output della CLI anche se lo stai guardando.
Jeff Puckett

1
Se usi quanto segue: ruby -e "require 'yaml';puts YAML.load_file(ARGV[0])"puoi quindi passare il nome del file dopo, invece di dover modificare direttamente lo snippet.
pnomolos

22

Dato che hai un'installazione perl sul server su cui stai lavorando e ha alcuni degli strumenti YAML di base, puoi usare ...

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

Va notato che questo sarà rigoroso nella sua interpretazione del file, ma utile.


3
Impossibile individuare YAML.pm
Natim

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

probabilmente un problema con l'installazione di CPAN ma:Can't locate object method "install" via package "YAML" at -e line 1.
Cheruvim

Se quanto sopra non funziona puoi sempre provare: perl -MCPAN -e 'shell'e poi dalla riga di comando faiinstall YAML
Cheruvim

9

Potresti usare yamllint . È disponibile in Homebrew, ecc. Può essere utilizzato per la convalida della sintassi e per il linting.


6

Per correggere il tuo .yaml file ti consiglio lo strumento yamllint. Può essere avviato facilmente dalla console locale.

Il pacchetto yamllint è disponibile per tutti i principali sistemi operativi.

È installabile dalle sorgenti del pacchetto del sistema. (ad esempio sudo apt-get install yamllint). Vedere la documentazione per l'avvio e l'installazione rapidi.


1

Se non hai un interprete installato nel tuo ambiente ma hai ancora un ricciolo , puoi usare un progetto di linter online come Lint-Trilogy :

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

Fornisce il risultato della convalida incl. descrizioni degli errori (se presenti) come json o csv o, se sufficiente, come testo normale vero o falso .

È disponibile anche come file Docker. Quindi, se hai spesso bisogno di un linter basato su REST, magari in una pipeline CI / CD, potrebbe essere utile ospitare una propria istanza sul tuo sito.


-9

In alternativa, installa l'IDE Eclipse (gratuito) e poi YEdit yaml editor e guarda il tuo yaml con l'evidenziazione della sintassi, i flag di errore e le viste struttura. Il costo di installazione una tantum funziona abbastanza bene per me.


3
OP ha richiesto specificamente soluzioni CLI.
crantok
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.