¡No seas tan repetitivo! deja que Ansible se encargue

ansible-header-1024x640

La humanidad creo sistemas computacionales para evitar tareas repetitivas. Lo divertido es que estos trajeron sus propias tareas repetitivas. En este post presentamos Ansible como una herramienta para solucionar la repetitividad en el desarrollo web .

Ejemplo s de tareas repetitivas del siglo XXI son e l mantenimiento de una máquina grande, la actualización de software o incluso limpiar los archivos de tu smartphone. 

Por fortuna, ahora hay máquinas que limpian y arreglan a otras de manera autónoma. Casi todas las actualizaciones de software se instalan por sí mismas y contamos con aplicaciones que borran, cada tanto, los archivos que no se usan en el smartphone .

El desarrollo web está lleno de tareas repetitivas que, sorprendentemente, muchas personas aún hacen manualmente. Al gunas empresas, incluso, tienen personal para hacer lo mismo una y otra vez.

Tareas como actualizar el código en el servidor después de finalizado un sprint , instalar o actualizar paquetes de sistema, configurar servicios como Apache o nginx o incluso borrar instancias inutilizadas, son tareas que pueden ser automatizadas.

 

Automatizar con A sible 

Ansible  es una herramienta de automatización de TI. Esta configura sistemas, implementa software y organiza tareas de TI más avanzadas, como implementaciones continuas o actualizaciones de tiempo de inactividad cero.

¿Cómo usar Ansible?

Para usar Ansible instala Python en el servidor (Ansible es un paquete Python) y una clave SSH para conectarte. Así podrás ejecutar tus propios PlayBooks de Ansible.

Al escribir un PlayBook de Ansible , que se explicará más adelante, se establece el estado deseado del servidor y no un conjunto de tareas para ejecutar cada vez, como un lenguaje informático convencional. 

Considere el siguiente PlayBook tomado de la documentación oficial:

Tareas: 
- nombre: asegúrese de que apache esté en la última versión 
  yum: nombre=httpd estado=último 

- nombre: escriba el archivo de configuración de apache 
  plantilla: src=/srv/httpd.j2 dest=/etc/httpd.conf 
  notificar: 
  - reiniciar apache 

- nombre: asegúrese de que apache se esté reanudando (y habilitételo en el arranque) 
  servicio: nombre=httpd estado=iniciado habilitado=sí 

manipuladores: 
  - nombre: reiniciando apache 
    servicio: nombre=httpd estado=reiniciado

 

En este ejemplo aparecen Tasks y Handlers. 

 

Tasks

Como puedes ver, cada Task tiene un nombre descriptivo para saber cuál es su objetivo.

Hay varios tipos de Tareas para Ansible.

Hay Tasks para los administradores de paquetes como yum o apt; también hay para servicios, archivos, etc.

La primera Tarea del ejemplo, asegúrese de que apache esté en la última versión,  actualiza la versión de Apache a su versión más reciente, pero solo si es necesario. 

Si Apache ya está actualizado, Ansible no ejecuta esta Task ¿por qué lo haría si la Task no haría nada?

Gracias a este comportamiento, Ansible evita el tiempo de espera en ejecuciones de Tasks redundantes. 

La segunda tarea, escriba el archivo de configuración de apache es una plantilla que permite a Ansible copiar un archivo a un destino dentro del servidor.

Tal archivo es una plantilla utilizada por Jinja2 para representar su contenido, por lo que puede ser dinámico. De hecho, si este ya existe con el contenido que el usuario intenta copiar, Ansible no la ejecuta.

Pero aquí aparece un factor adicional, los Handlers. Como puedes ver, esta tarea tiene un argumento de notificación . Este informa a Ansible que el reinicio del controlador de apache debe ser notificado si esto se ejecuta.

La última tarea es asegurar que Apache se esté acabando (y habilitarlo al arrancar) para verificar el estado del servicio.

Si el servicio ya se está acabando, la Task se omite.

manipuladores

Como puede ver, el reinicio del controlador de apache de Apache es muy similar a la tarea de  asegurarse de que apache se está arrancando (y habilitarlo en el arranque) . La única diferencia es que uno verifica que el servicio apache se terminó y el otro reinicia el servicio.

Entonces, ¿por qué uno es una tarea y el otro un handler? Porque siempre debe verificarse que el servicio Apache se acabó, pero no necesita reiniciarse cada vez que algo sucede.

La principal diferencia entre tareas y controladores es que Ansible siempre verifica si las Tareas deben ejecutarse; comprueba el estado descrito por la tarea y lo ejecuta dependiendo de ello.

Por el contrario, Ansible verifica el estado descrito por los handlers solo si se ha notificado a un handler. De lo contrario, el Handler se omite.

Volvamos al ejemplo, el handler restart apache solo se ejecutará si la task  write the apache config file , se ejecuta, el archivo de configuración de Apache cambia y se envía la notificación para el handler. De lo contrario, el handler no se ejecutará; y tiene sentido, sí quiero reiniciar el servicio apache si el archivo de configuración de apache cambia para aplicar las modificaciones, pero no quiero reiniciarlo si el archivo es el mismo después de que la ejecución haya finalizado.

Hay dos consideraciones importantes para los manipuladores. El primero, siempre se ejecutarán al final del proceso, una vez que todas las tareas hayan finalizado. La otra es que cada handler se ejecutará solo una vez, incluso si se ha notificado más de una vez.

 

Conclusión: 

Esta ha sido solo una vista rápida de todo el poder que Ansible tiene para ofrecer. Una de las principales ventajas es que reduce los errores humanos a cero porque, una vez que hayas desarrollado tu playbook, estarás seguro de que el servidor siempre tendrá el estado deseado y no tendrás que preocuparte de olvidar realizar una tarea en él.

La otra ventaja principal es que ansible, gracias a su sistema de inventario, te permite usar el mismo libro de jugadas con diferentes servidores y con diferentes consideraciones de servidor sin esfuerzo adicional.

Junto con el sistema de inventario, ansible también tiene un sistema de roles . Este permite crear conjuntos de tareas que pueden reutilizarse en diferentes playbooks. Incluso tiene una biblioteca llamada Ansible galaxy, donde puedes descargar roles de otras personas y otro contenido de Ansible.

Escribiré sobre los roles de Ansible en otra entrada.

Aquí en Swapps creamos nuestra propia aplicación de integración continua: https://deploycloud.io/, que ahorra mucho tiempo automatizando nuestros desarrollos de servidor.  

Gracias a eso, podemos enfocarnos en lo que realmente importa mientras deploymentcloud maneja todas las tareas repetitivas; ahorrándonos tiempo y dinero.