Cuando trabajamos con Ansible, una de las formas más potentes y cómodas de automatizar tareas es mediante los playbooks. Aunque ya sabemos que podemos ejecutar comandos ad hoc directamente desde la terminal, esta práctica se vuelve poco manejable y nada reutilizable cuando necesitamos repetir o modificar esas acciones. Por eso, los playbooks son la solución ideal: archivos escritos en YAML que describen de forma clara y estructurada las tareas que queremos ejecutar sobre uno o varios hosts.
Para crear un playbook, empezamos con un archivo YAML, por ejemplo, tareas.yml. En este archivo, la estructura básica comienza con tres guiones para indicar que es un documento YAML. Luego definimos un array de objetos, donde cada objeto representa un conjunto de instrucciones para uno o varios hosts. Lo primero que debemos especificar es el grupo de hosts sobre los que queremos actuar. Podemos elegir un host específico, un grupo de hosts, o simplemente usar all para abarcar todos los que tengamos en nuestro inventario.
Después, definimos la clave tasks, que contiene un array con las tareas que queremos ejecutar. Cada tarea es un objeto que debe tener al menos un nombre descriptivo bajo la clave name, para que sepamos qué hace cada paso. A continuación, indicamos el módulo de Ansible que vamos a usar para esa tarea y sus parámetros. Por ejemplo, para instalar un paquete con apt, la tarea podría verse así:
- name: instala bim
apt:
name: bim
state: present
Si la tarea requiere permisos de superusuario, como suele ser el caso al instalar software, podemos añadir la propiedad become: true dentro de la tarea para que se ejecute con privilegios elevados. También es posible definir become: true a nivel del playbook completo, para que todas las tareas se ejecuten como superusuario, evitando repetir esta propiedad en cada tarea.
Además de instalar paquetes, podemos usar otros módulos para administrar servicios. Por ejemplo, el módulo service nos permite detener, iniciar o reiniciar servicios en el host remoto. Una tarea para detener el servicio de nginx podría escribirse así:
- name: detiene nginx
service:
name: nginx
state: stopped
become: true
Y para asegurarnos de que el servicio esté en ejecución, simplemente cambiamos el estado a started:
- name: inicia nginx
service:
name: nginx
state: started
become: true
Una vez que tenemos nuestro playbook listo, lo ejecutamos con el comando ansible-playbook seguido del nombre del archivo. Durante la ejecución, Ansible recopila información del sistema remoto, llamada facts, que puede ser útil para tareas más avanzadas. Si es necesario, nos pedirá la contraseña para acceder con privilegios elevados.
Una ventaja clave de los playbooks es que son idempotentes: si ejecutamos el mismo playbook varias veces, Ansible solo realizará cambios cuando sea necesario. Por ejemplo, si ya tenemos instalado bim, la tarea de instalación se saltará y mostrará un estado ok en lugar de changed. Esto nos permite mantener configuraciones consistentes sin preocuparnos por repetir acciones innecesarias.
Con los playbooks podemos organizar y secuenciar múltiples tareas, facilitando la administración de uno o varios servidores de forma ordenada y reutilizable. Además, podemos ampliar nuestros playbooks con muchos otros módulos disponibles en Ansible o incluso crear los nuestros propios para cubrir necesidades específicas.
En definitiva, dominar la escritura y ejecución de playbooks es fundamental para aprovechar todo el potencial de Ansible en la automatización y gestión de infraestructuras.