Taller 2: Ansible - Playbook con roles
¿Qué vas a aprender en este taller?
- El concepto de Rol.
- El uso de roles en los playbooks para realizar tareas en nodos concretos.
- El uso de handlers para gestionar los servicios que instalamos.
- Vas a seguir utilizando variables para realizar playbooks lo más generales posible.
- Seguimos aprendiendo otros módulos de ansible.
- La posibilidad de reutilizar roles para futuros playbooks.
¿Qué tienes que hacer?
En este taller vamos a trabajar con dos servidores. Cada uno va a jugar un papel: uno será el servidor web y el otro será el servidor de base datos.
Tal como hemos definido las tareas en el taller anterior, no puedo indicar que tareas hay que realizar para nodos distintos que estén agrupados en distintos grupos. Para solucionarlo vamos a usar los roles, que nos permiten organizar las tareas para ejecutarlas en todos los nodos, o en un grupo de nodos en concreto. Además los roles me dan la posibilidad de reutilización de código. Si hago un rol para instalar un servidor web apache, ese rol lo puedo a volver a usar en otro proyecto en que tenga que hacer la misma operación.
Realiza los siguientes pasos:
- Crear dos máquinas virtuales (con las características indicadas en el taller anterior).
- Vamos a trabajar con el directorio Taller2 del repositorio.
- Rellena el inventario de forma adecuada para definir los dos equipos que vamos a configurar. Debes indicar los nombres de tus máquinas y los parámetros de acceso.
- Prueba de conectividad. Ejecuta el comando
ansible -m ping all
para asegurarte que puedes conectar con las máquinas. - Vamos a estudiar la nueva definición del playbook, en el fichero
site.yaml
:- El campo
hosts
: es el nombre del grupo o máquina en la que se van a ejecutar las tareas del rol. - El campo
roles/role
es el nombre del rol que se va a ejecutar. Este nombre debe coincidir con el nombre del directorio que encontramos dentro del directorioroles
.
Modifica el fichero
site.yaml
para conseguir que se ejecuten los roles como se indica a continuación:- El rol
commons
(tareas comunes a todos los nodos) para todos los nodos (grupoall
). - El rol
apache2
(instalación y configuración de apache2) para todos los nodos del gruposervidores_web
. - El rol
mariadb
(instalación y configuración de mariadb) para todos los nodos del gruposervidores_bd
.
- El campo
-
Los roles se van a definir en el directorio
roles
. Se creará un directorio para cada rol, que se llamará igual al nombre del rol utilizado en el ficherosite.yaml
y contendrá las tareas, ficheros, templates, manejadores,… necesarios para llevar a cabo este rol.Por lo tanto dentro de la carpeta del rol, podremos tener algunas de estas carpetas:
tasks
: Contiene el yaml con las tareas.files
: Contiene los ficheros que vamos a copiar a los nodos con el módulocopy
.templates
: Contiene las plantillas que vamos a copiar a los nodos con el módulotemplate
.handlers
: Contiene los manejadores, qué son las tareas para gestionar los servicios que se han instalado.- …
-
El rol
commons
se ejecuta en todos los nodos. Sólo tiene la carpetatasks
donde encontramos el ficheromain.yaml
con las tareas que se van a ejecutar. Modifica la tarea que está definida para que se actualice el sistema de todas las máquinas. -
El rol
apache2
instala apache2 y copia algunos ficheros al servidor. Uno de los ficheros que copia es un fichero de configuración de apache2, por lo tanto debemos reiniciar apache2 cada vez que copiamos ese fichero.En ocasiones es necesario sólo ejecutar unas tareas si ocurre algo. Por ejemplo, si cambiamos el fichero de configuración de un servicio, habrá que ejecutar una tarea para reiniciar el servicio. Este compartimento se consigue usando los handlers (manejadores).
Para cambiar la configuración de un servicio, tenemos dos alternativas:
- Copiar el fichero de configuración con el módulo
copy
, aunque en las mayoría de las ocasiones tendremos el fichero de configuración parametrizado, por lo que usaremos un template y el módulo template. - Usar el módulo
lineinfile
que nos permite hacer modificaciones en un fichero remoto.
En la tarea Copiar fichero de configuración y reiniciar el servicio hemos copiado al servidor web un fichero de configuración y tenemos que indicar que queremos reiniciar el servicio, para ello usamos el parámetro
notify
. Si se ejecuta una tarea con el parámetronotify
, se ejecutará la tarea indicada, también llamado handler (normalmente reinicio del servicio) al finalizar la ejecución de todas las tareas del playbook.Debes poner en el parámetro
notify
el nombre de la tarea que se encuentra en el ficheromain.yaml
del directoriohandlers
, que será el encargado de reiniciar el servicio. - Copiar el fichero de configuración con el módulo
-
El rol
mariadb
instala el servidor de base de datos mariadb, crea una base de datos y un usuario y modifica la configuración del servicio. Vamos a utilizar algunos nuevos módulos: mysql_db para crear una base de datos, mysql_user para gestionar usuarios de la base de datos y lineinfile para modificar líneas en ficheros de texto.Otra cosa que puedes aprender, es como realizamos los bucles en ansible. Usamos el parámetro
with_items:
y la variable que cambia en cada iteración se llamaitem
.- Modifica las variables
cambia_nombre_variable
por la variables correctas. ¿En qué fichero tienes que buscar el nombre de la variables correctas?. - Debes poner en el parámetro
notify
el nombre de la tarea que se encuentra en el ficheromain.yaml
del directoriohandlers
, que será el encargado de reiniciar el servicio.
- Modifica las variables
-
Ejecuta el playbook:
ansible-playbook site.yaml
- Si tienes errores, repasa las modificaciones que has realizado para corregirlos.
- Cuando funcione la ejecución de la receta, cambia una de las tareas que notifican un reinicio para comprobar que se produce de nuevo el reinicio del servicio.
- Comprobación del funcionamiento: Accede desde el navegador web y comprueba los ficheros que hemos subido al servidor. Accede a la base de datos.
¿Qué tienes que entregar?
- Entrega una captura de pantalla donde se vea que se ha finalizado la ejecución del playbook.
- Captura de pantalla donde se vea el acceso desde el navegador al servidor web, y se vea el contenido del fichero
index.html
. - Captura de pantalla donde se vea el acceso a la base de datos.
- Realiza un cambio en la receta que necesite ejecutar el reinicio del servicio. Ejecuta de nuevo el playbook y comprueba que se ha ejecutado el handler correspondiente.
- Entrega la URL de tu repositorio con el que estás trabajando.