Tutoriales

Evite errores en los libros de jugadas de Ansible con ansible-lint

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/playbooksatropelló 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.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba