Ferramentas Validação de Arquivos YAML

Validação de arquivos YAML

YAML é um acrônimo que significa “YAML Ain’t Markup Language” numa tradução livre seria “YAML não é uma linguagem de marcação”, na prática ele é um modelo de serialização de dados que facilita a visualização, organização de informações.

Atualmente muitas ferramentas utilizam arquivos no formato YAML para guardar configurações, como é o caso do Kubernetes e na criação de scripts de automação como é o caso do Ansible.

O YAML possui uma sintaxe bem simples, e com ela pode-se criar listas, dicionários, conforme o exemplo a seguir:

---
apiVersion: v1
kind: Pod
metadata:
name: rss-site
labels:
app: web
spec:
containers:
- name: front-end
image: nginx
ports:
- containerPort: 80
- name: rss-reader
image: nickchase/rss-php-nginx:v1
ports:
- containerPort: 88
#EOF

Alguns exemplos mais elaborados de utilização do YAML podem ser encontrados nesse link.

No dia a dia

A sintaxe do YAML é simplifica, mas no dia a dia a gente comete erros de formatação ou muitas vezes estamos precisando achar um erro de formatação resultando de um CTRL+C, CTRL+V, para situações como essa eu recomendo três maneiras de resolver esse problema, são elas:

Solução 01

Se você é “roots” mesmo e estiver em um SHELL remoto editando um arquivo direto no servidor ou mesmo validando configurações para depois fazer um commit recomendo usar um validador de linha de comando no terminal, eu usei uma solução caseira como essa:

 1#! /usr/bin/python3.6
 2
 3import yaml
 4import sys
 5
 6if ( len(sys.argv) == 0 ) : 
 7  print ("SORRY!! No file receivid.")
 8  sys.exit(1)
 9
10
11with open((sys.argv[1]), 'r') as stream:
12 try:
13  yaml.safe_load(stream)
14  print("[OK] - File (%s) validated with success! " % sys.argv[1])
15 except yaml.YAMLError as exc:
16  print("[Error] - File (%s) not valid !" % sys.argv[1])
17  print(exc)
18
19#EOF

Referência: Infra-as-code-YAML-Lint.py

Mode de usar


leo@infraascode$ ./yamllint.py yaml_example.yml
[OK] - File (yaml_example.yml) validate with success!

leo@infraascode$ ./yamllint.py yaml_example_not_ok.yml
[Error] - File (yaml_example_not_ok.yml) validated with error!
while parsing a block mapping
 in "yaml_example_not_ok.yml", line 2, column 1 
expected <block end>, but found '<block mapping start>' 
 in "yaml_example_not_ok.yml", line 6, column 2

Referência: Infra-as-code-YAML-Lint.py

Solução 02

Se você estiver editando arquivos localmente do conforto do seu laptop, recomendo a utilização de uma IDE como o PyChram. Uma IDE?!!! Siiimmm!!Por que não, estamos 2020, ele tem suporte para várias linguagens de programação e modelos de arquivos de templates além do validador interno para arquivos YAML. Ele também faz o realce de cores de fundo e fontes para deixar seu código todo colorido, valida graficamente erros em arquivos YAML.

Image: PyCharm - Infra as Code

Solução 03

Por fim, se você quer fazer uma validação rápida ou já quer escrever um pequeno trecho no formato certo, recomendo utilizar o YAML-LINT.

Validação bem sucedida!

Image: YAML-LINT com sucesso - Infra as Code

Validação com erro!

Image: YAML-LINT com erro - Infra as Code

Conclusão

A sintaxe de um arquivo YAML foi feita para ser fácil para nós humanos, por experiência própria, quando a gente cria os arquivos, com poucas linhas é simples e bem fácil fazer uma validação, mas, em algum momento nessa vida de sysadmin vamos nos deparar com um arquivos com mais de mil linhas e ai meu jovem vai ficar difícil não utilizar nenhuma ferramenta para esse trabalho.

Abraços!

Vida longa e próspera a todos!!

DICA RÁPIDA DE LIVRO

Estou lendo atualmente o livro Effective DevOps: Building a Culture of Collaboration, Affinity, and Tooling at Scale

Referências

  1. Dica de livro Effective DevOps: Building a Culture of Collaboration, Affinity, and Tooling at Scale
  2. https://yaml.org/refcard.html
  3. PyChram
  4. YAML-LINT
  5. https://github.com/leoml/blog-infraascode/blob/master/posts/validacao-arquivos-yaml/yamllint.py


Eu adoraria ouvir suas outras histórias e situações semelhantes ao que acabei de escrever neste post, você pode me encontrar em @infraascode_br ou linkedin.com/in/leonardoml/ .

Te convido a ver os outros posts do blog Infra-as-Code garanto que tem coisas legais lá!!


--- --- IMPORTANTE --- ---
As opiniões aqui expressas são pessoais e de responsabilidade única e exclusiva do autor, elas não refletem necessariamente a posição das empresas que eu trabalho(ei) e/ou presto(ei) serviço.