Como valido meu arquivo YAML na linha de comando?

88

Estou tendo problemas para extrair de um arquivo de configuração YAML:

Erro fatal: ao analisar um mapeamento de bloco; esperado <block end>, mas foi encontrada entrada de bloco

Embora haja muitos validadores YAML on-line, que experimentei e ajudei, gostaria de validar meus arquivos YAML a partir da linha de comando e integrá-los ao meu pipeline de integração contínua.

Como posso validar a sintaxe de um arquivo YAML na linha de comando?

slideshowp2
fonte
5
Experimente:travis lint .travis.yml
Kenorb
4
python -c "from yaml import load, Loader; load(open('.travis.yml'), Loader=Loader)"
Natim
20
Esta questão não deve ser encerrada. Talvez reformulá-lo para "Como faço para validar meu arquivo YAML da linha de comando". Esta é uma pergunta válida e útil
Hanxue
4
@Hanxue secundado - aparece como o primeiro resultado ao pesquisar o tópico e deve ser uma referência útil quando o Google chegar aqui.
brice
4
Sim, esta questão não deve ser encerrada. Não acho que as respostas sejam opinativas ou spam.
Joey Novak

Respostas:

144

Com a instalação básica do Ruby, isso deve funcionar:

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

Versão Python (thx @Murphy):

pip install pyyaml
python -c 'import yaml, sys; print(yaml.safe_load(sys.stdin))' < data.yaml
Tombart
fonte
2
Se você remover o puts ydo final disso, obterá um comportamento UNIX mais padrão: se o arquivo for válido, nada será impresso e, se for inválido, você verá uma exceção e um rastreamento de pilha.
bdesham
… E se você remover o, puts yvocê também pode se livrar do y=.
bdesham
Obrigado, isso é definitivamente melhor e mais curto.
Tombart
1
E se você realmente estiver usando isso apenas como parte de um pipeline de teste ci, não há necessidade disso puts. O código de retorno é simplesmente 0se for válido, caso contrário, diferente de zero e você obterá um rastreamento de pilha de exceção. Reduz o ruído na saída CLI, mesmo se você estiver olhando para ela.
Jeff Puckett
1
Se você usar o seguinte: ruby -e "require 'yaml';puts YAML.load_file(ARGV[0])"poderá então passar o nome do arquivo depois, em vez de precisar editar o snippet diretamente.
pnomolos
22

Dado que você tem uma instalação perl no servidor em que está trabalhando, e ele tem algumas das ferramentas básicas de YAML, você pode usar ...

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

Deve-se notar que isso será estrito na interpretação do arquivo, mas útil.

CS Marshall
fonte
3
Não é possível localizar YAML.pm
Natim
4
/ usr / bin / perl -MCPAN -e 'instalar YAML'
Ben Mathews
provavelmente um problema com a instalação do CPAN, mas:Can't locate object method "install" via package "YAML" at -e line 1.
Cheruvim
Se o acima não funcionar, você sempre pode tentar: perl -MCPAN -e 'shell'e então na linha de comandoinstall YAML
Cheruvim
8

Você pode usar o yamllint . Está disponível no Homebrew, etc. Pode ser usado para validação de sintaxe e também para linting.

James Hiew
fonte
5

Para corrigir seus .yamlarquivos eu recomendo a ferramenta yamllint. Ele pode ser iniciado facilmente a partir do console local.

O pacote yamllintestá disponível para todos os principais sistemas operacionais.

É instalável a partir das fontes de pacotes do sistema. (por exemplo sudo apt-get install yamllint). Consulte a documentação para um início rápido e instalação.

kinafu
fonte
-9

Ou instale alternativamente (grátis) Eclipse IDE e, em seguida, YEdit yaml editor e veja seu yaml com destaque de sintaxe, sinalizadores de erro e visualizações de estrutura de tópicos. O custo de configuração única funciona muito bem para mim.

Ernie
fonte
2
O OP pediu especificamente soluções CLI.
crantok