
Cuando los desarrolladores escriben código, pueden usar un entorno de desarrollo integrado (IDE) o un buen editor de texto para detectar errores de sintaxis mientras escriben. Asimismo, muchos editores de texto brindan patrones especiales y resaltado de sintaxis para lenguajes de marcado populares como YAML que pueden ayudarlo a encontrar errores rápidamente.
Los codificadores también tienen compiladores o tiempos de ejecución que pueden detectar errores lógicos, resaltado de sintaxis impredecible en editores de texto. Los lenguajes de marcado por lo general no tienen compiladores, y aunque a menudo hay fallas en el procesador cuando intenta analizar el archivo incorrecto, generalmente no es cuando desea descubrir que ha cometido un error.Una especie de pelo corto Diseñado para detectar errores en los datos antes de procesar el archivo. Esto evita que usted (o su flujo de trabajo automatizado) cometa errores en etapas críticas de la operación.
Esta ansible-lint
command es un linter diseñado para libros de jugadas de Ansible.
Instalar en pc
La forma más fácil de instalar ansible-lint
Con pip
:
$ python3 -m pip install --user ansible-lint
Confirmar instalación:
$ ansible-lint --version
ansible-lint x.y.z using ansible X.Y.Z
Ansible-pelusa
Como el nombre sugiere, ansible-lint
es un filtro YAML específico para los playbooks de Ansible. Esto significa que cuando aplica pelusa a un libro de jugadas, no solo observa la sintaxis de marcado, sino también cómo usa los módulos de Ansible. Por ejemplo, tome este libro de jugadas simple que crea un conjunto de directorios en el host:
---
- hosts: localhost
tasks:
- name: Create directories
ansible.builtin.file:
path: "{{ item }}" # this is wrong
state: directory # this is wrong
with_items:
- '~/Foo'
- '~/Bar
- '~/Baz
Guardar este libro de jugadas como standard_dirs.yaml
en la estructura del directorio ~/Ansible/playbooks
atropelló ansible-lint
Pedido:
$ cd ~/Ansible
$ ansible-lint
ERROR! conflicting action statements: ansible.builtin.file, path
The error appears to be in '/home/tux/Ansible/playbooks/standard_dirs.yaml': line 4, column 7, but may be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
tasks:
- name: Create directories
^ here
Finished with 1 failure(s), 0 warning(s) on 2 files.
El linter identifica un error a partir de la primera línea de la primera (y única) tarea. Esto le indica por dónde empezar a buscar. En este caso, es obvio comenzar a buscar desde allí, ya que solo hay una misión, pero esto puede ser una pista valiosa en un guión complejo. Como identifiqué el error con los comentarios, puede corregir el error de sangría. Si no conoce el motivo de estos errores, lea mi artículo YAML para Ansible.
[ Learn how to create, scale, and manage automation by registering for the Ansible basics: Automation technical overview course, available on demand. ]
---
- hosts: localhost
tasks:
- name: Create directories
ansible.builtin.file:
path: "{{ item }}"
state: directory
with_items:
- '~/Foo'
- '~/Bar
- '~/Baz
Ahora vuelva a ejecutar el comando:
$ cd ~/Ansible
$ ansible-lint
WARNING Listing 2 violation(s) that are fatal
risky-file-permissions: File permissions unset or incorrect
playbooks/standard_dirs.yaml:4 Task/Handler: Create directories
yaml: no new line character at the end of file (new-line-at-end-of-file)
playbooks/standard_dirs.yaml:12
Esta vez, no hay error, sino una advertencia fatal de dos reglas separadas.Esta risky-file-permissions
El módulo me advierte que los permisos de archivo no están especificados en la tarea para crear la carpeta.Esta yaml
regla, habilitada porque también tengo yamllint
Instalado en mi sistema, advirtiendo que no hay nueva línea al final del archivo.
Solucione el primer error especificando permisos de archivo y el segundo error agregando una nueva línea al final de YAML:
---
- hosts: localhost
tasks:
- name: Create directories
ansible.builtin.file:
path: "{{ item }}"
state: directory
mode: '775'
with_items:
- '~/Foo'
- '~/Bar
- '~/Baz
intentar otra vez:
$ ansible-lint
$
Sin salida significa que no hay errores.
Sube temprano, aumenta seguido
Si está escribiendo código o marcado en un lenguaje con linter, lint tiene sentido.Hay linters específicos de YAML, pero ansible-lint
Vaya un paso más allá y compruebe usted mismo sus tareas de Ansible. Esta es una forma efectiva de protegerse de errores durante la ejecución y posiblemente horas de depuración.