ICM / how-to-do / Cómo hacer tus propios roles de Ansible: Parte 2
Cómo hacer tus propios roles de Ansible: Parte 2
6 noviembre 2021 | Miguel Díaz
En la anterior entrada habíamos dado un vistazo a las características más básicas de Ansible, así como su instalación, y el uso de playbooks en un sistema con un nodo de control y una sola máquina manejada. En esta entrada, el objetivo es escalar las capacidades de los playbooks, y para ello usaremos la siguiente herramienta que nos proporciona Ansible: los roles.
Creación y estructura de los roles de Ansible
Para crear nuestro primer rol de Ansible, nos dirigimos a la máquina de control y ejecutamos el siguiente comando:
Para este ejemplo, seguiremos usando la idea de crear un servidor web Apache. Al completarse tal ejecución, tendremos la siguiente estructura de archivos generada:
De forma generalizada, las carpetas tienen estas funciones:
Creación roles Ansible servidor web
Ahora vamos a aplicar varias de las posibles partes de un rol, para generar uno que configure un servidor web apache. Esta vez con más detalle, y aprovechando las opciones que nos proporciona Ansible, vamos a crear uno de los roles.
Para verificar que la sintaxis de los archivos que tengan formato YAML sea correcta, podemos usar la herramienta YAMLlint, que es un paquete instalable en un Linux.
El uso del software es el siguiente, solo hay que indicar que archivo queremos comprobar y si hay algún error nos lo muestra:
Variables/defaults:
Editamos el archivo roles/apache/vars/main.yml para que tenga este contenido:
Lo que hemos indicado aquí son los datos que usaremos para generar el vhost, así como los paquetes para instalar y los mods de apache a usar. En el archivo correspondiente en defaults podríamos poner las mismas variables con los datos en blanco, dejando un esqueleto de la configuración que se pueda usar en otros casos.
Files/templates:
Primero, en la carpeta de files vamos a generar un certificado SSL auto firmado, con el siguiente comando:
Rellenamos con cualquier dato, ya que se trata de un certificado de ejemplo:
Ahora pasamos a la carpeta de templates, dónde indicaremos la configuración del vhost de apache que usaremos. Utilizaremos dos archivos: uno para la configuración http y otro para la versión https.
Archivo vhost
Archivo ssl-vhost
Finalmente, crearemos un simple archivo index.html que sirva para comprobar que hemos cargado el site correcto.
Tasks/handlers:
La siguiente parte del rol es crear las tareas que se ejecutarán, este archivo irá en /roles/apache/tasks/main.yml
Aquí hacemos varias tareas usando diferentes módulos. La funcionalidad resumida de cada una seria esta:
Install packages: Instala los paquetes de linux que aparecen en la variable install_packages
Enable apache mods: Activa los módulos de apache en la variable apache_mods. Lo equivalente a usar el comando a2enmod.
Create cert folder: Crea el directorio donde se guardarán los certificados
Create site folder: Crea el directorio donde se almacenará el site.
Apply templates: Copia los archivos en templates evaluándolos primero. De esta forma, tenemos los archivos de configuración con los datos que aparecen en las variables.
Copy files: Copia los archivos, en este caso los certificados.
Enable vhost: Activa el vhost http. No existe un módulo oficial de ansible para hacerlo, así que podemos obtener el mismo resultado lanzando el comando a2ensite en la máquina.
Enable ssl-vhost: Mismo proceso que el anterior, pero para el vhost con ssl.
Disable default Apache site: Aquí también se lanza el comando, pero en este caso para desactivar el sitio por defecto de apache, lo ejecutaremos con el comando a2dissite.
Por otra parte, tenemos el archivo de los handlers, que son tareas que se ejecutarán en caso de que se produzcan cambios en el playbook principal. El archivo correspondiente en /roles/apache/handlers/main.yml.
En este caso, tenemos un único handler, que se encarga de hacer un reload del servicio apache. Para las tareas relacionadas directamente con apache, es necesario instalar un paquete adicional de ansible, ejecutando el siguiente comando:
Comprobación del rol / roles Ansible
Creamos un pequeño archivo apacherole.yml que nos permita lanzar el role de apache en la máquina que deseamos:
Ahora podemos ejecutar el rol sobre la máquina con este comando: ansible-playbook apacherole.yml
Lanzamos el playbook y, en cuestión de segundos, obtenemos el resultado:
Ahora podemos comprobar la funcionalidad del rol, si accedemos por navegador a la máquina donde se ha instalado apache deben aparecer los sites creados, tanto por http, como https:
Y al visualizar el certificado que carga por https, vemos que es el que hemos generado nosotros:
Conclusión
En este artículo, hemos desarrollado un rol simple de Ansible, dónde se han probado varias de sus funciones. El resultado es tener un único comando, que después de adecuar la configuración de variables, nos genera un sitio web de apache en cuestión de segundos. Esto es mucho más eficiente que hacer las tareas de forma manual, especialmente cuando hay que repetir el mismo proceso para diferentes máquinas.
Y hay que decir que esto es un uso básico de Ansible. Aprovechando todas las características que nos ofrece y con experiencia en su uso, se pueden automatizar un gran rango de tareas, tanto de configuración como de mantenimiento. Si algo que se puede hacer a través de Ansible supone un trabajo repetitivo, puede valer la pena tomarse el tiempo para crear los roles que hagan lo equivalente más eficientemente