Molécula - Prueba de Roles Ansibles

Buen dia Ansible fue mencionado repetidamente en Habré, pero no encontré artículos sobre cómo probar sus roles usando la molécula, sin embargo, encuentro este marco extremadamente conveniente y me gustaría compartirlo con la audiencia de Habr.
Pero primero, un poco sobre lo que usé antes.

Anteriormente, para probar los roles ansibles que creo, utilicé vagabundo, conduciendo directamente:

$ vagrant init debian/jessie64 $ vagrant up 

Creando máquinas virtuales, después de lo cual escribí un inventario y un libro de jugadas para lanzar el papel, hasta que un día conocí la molécula.

¬ŅQu√© puede ofrecer la mol√©cula?


  1. Inicialización de rol inicial
  2. Conductor / proveedor
  3. Pruebas de idempotencia
  4. Verificación

Inicialización de rol inicial


Si se especifica un nuevo rol, crea una estructura de muestra para el rol ansible

Conductor / proveedor


Molecule nos permite usar un contenedor Docker o una máquina virtual como conejillo de indias usando Vagrant, esto se determina indicando el controlador durante la inicialización, o en molécula.yml. Porque Si tengo que probar los roles de orquestar contenedores, entonces Vagrant sigue siendo el controlador preferido para mí. Elegir Vagrant como controlador también le permite seleccionar un proveedor.

Los siguientes est√°n disponibles:

  • Libvirt
  • Paralelos
  • VirtualBox (predeterminado)
  • VMware Fusion

A continuación, consideraremos una variante de Vagrant con VirtualBox como proveedor.

Pruebas de idempotencia


De acuerdo con la wiki:
La propiedad de un objeto u operación cuando se aplica la operación al objeto nuevamente da el mismo resultado que cuando es individual.

En relación con los roles ansibles, cuando se reinicia el rol, no se deben realizar cambios.

Verificación


Para asegurarse de que el rol funcionó correctamente, no fallar ninguna de las tareas no es suficiente. Después de todo, debe verificar que los servicios hayan comenzado, que los puertos estén abiertos, etc.

Los siguientes marcos están disponibles para verificación:

  • Goss
  • Serverspec
  • Testinfra (predeterminado)

He sido probado por Goss y Testinfra. Para mí, elegí Testinfra.

Ejemplo de uso:

 $ molecule init --role sample-role 

Después de ejecutar este comando, obtenemos un directorio de roles de muestra con una estructura de roles típica ansible y los archivos yaml necesarios:

 defaults handlers meta molecule.yml // -  molecule playbook.yml //      README.md tasks tests //    vars 

Puede comenzar sin especificar el conmutador --role, en este caso los archivos molécula.yml y playbook.yml se crearán en el directorio actual.

Sucede que debe asegurarse de que el rol funcione en varias distribuciones en este caso, en molecyle.yml, vale la pena especificar los nombres de los cuadros vagabundos (en plataformas):

 vagrant: platforms: - name: jessie64 box: debian/jessie64 - name: centos7 box: centos/7 

Luego, agregue las acciones / variables necesarias, etc. en el papel, después de lo cual probamos en todas las plataformas específicas:

 $ molecule test --platform all 

Después de esta molécula:

  • si ya hay m√°quinas virtuales creadas, se detendr√° y las eliminar√°
  • elevar√° las m√°quinas virtuales necesarias
  • prueba nuestro papel con ansible-lint
  • cumplir con nuestro rol en contenedores reci√©n creados
  • probar√° la idempotencia
  • ejecutar pruebas testinfra
  • eliminar√° las m√°quinas virtuales creadas

Es posible que deba cambiar el comportamiento de la molécula cuando ejecute la prueba, por ejemplo, no pruebe la idempotencia, para esto, agregue lo siguiente a molécula.yml:

 molecule: test: sequence: - destroy - syntax - create - converge - verify - destroy 

También puede llamar a cada uno de los pasos correspondientes por separado utilizando el comando apropiado, por ejemplo:

 $ molecule create --platform all $ molecule syntax $ molecule create $ molecule converge $ molecule verify 

Como una opción, no elimine / cree una nueva máquina virtual antes de cada convergencia.

Puede especificar una plataforma específica y probarla por separado:

 $ molecule create --platform jessie64 $ molecule syntax $ molecule create $ molecule converge $ molecule verify 

Gracias por su atencion!

Source: https://habr.com/ru/post/437216/


All Articles