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?


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

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.


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.


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.


-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.


2
O OP pediu especificamente soluções CLI.
crantok
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.