Introducción
Cuando empieza a trabajar con Ansible, está bien colocar todo en un único archivo grande playbook.yml. Sin embargo, cuando la automatización crece hasta tener cientos de líneas, ese archivo se vuelve difícil de mantener.
La solución son los roles de Ansible.
Los roles son como carpetas de un archivador. En lugar de tener un documento gigante, puede separar el contenido en carpetas lógicas: una carpeta para las tareas del «servidor web», otra para las tareas de la «base de datos», etc.
Los roles son importantes porque, con el tiempo, la automatización se convierte en ingeniería de software. Cuando los playbooks superan unas pocas tareas, la estructura, los nombres y la reutilización adquieren tanta importancia como lograr que la primera ejecución funcione.
En este laboratorio, usted:
- Creará una estructura de Role estandarizada con
ansible-galaxy. - Moverá las tareas a ese Role.
- Ejecutará el Role desde un «Master Playbook» sencillo.
Los roles son importantes porque la automatización escalable necesita una estructura. A medida que crecen las bases de código, la organización se vuelve tan importante como conseguir la primera ejecución correcta.
Inicializar un Role
Primero, cree la estructura de directorios. Puede crear todos los directorios manualmente, pero Ansible incluye una herramienta llamada ansible-galaxy que lo hace por usted.
Esta disposición estándar resulta útil porque proporciona ubicaciones predecibles para las tareas, las variables, los archivos, las plantillas y los handlers de cada role. Cuando la estructura se mantiene coherente, los equipos pueden leer con mayor facilidad la automatización de los demás.
Vaya al directorio del proyecto:
cd ~/project
Cree un directorio para almacenar sus roles:
mkdir roles
Ahora cree un nuevo role llamado myrole. Piense en él como un «paquete» o «módulo» para su automatización.
ansible-galaxy init roles/myrole
Revise lo que se ha creado:
ls -R roles/myrole
Verá varios directorios (tasks, handlers, vars, etc.).
- tasks: Aquí se colocan los pasos reales, como instalar, iniciar y copiar.
- vars: Aquí se colocan las variables.
- files: Aquí se colocan los archivos estáticos, como las imágenes.
Hoy nos centraremos en el directorio tasks.
Definir las tareas del Role
Ahora debe añadir trabajo al role. La lista principal de tareas de un role se encuentra en tasks/main.yml.
Creará una tarea sencilla para instalar el comando tree, una utilidad práctica para visualizar estructuras de directorios.
Abra el archivo de tareas del role:
nano roles/myrole/tasks/main.yml
Añada el siguiente contenido. Observe que aquí no comenzamos con tasks:, porque ya estamos dentro del archivo de tareas.
---
## tasks file for roles/myrole
- name: Ensure tree is installed
apt:
name: tree
state: present
become: yes
Diferencia clave: En un playbook normal existe una sección tasks:. Dentro de un role, el archivo ya es la lista de tareas, por lo que solo debe comenzar a enumerarlas directamente.
Esta separación es una de las razones por las que los roles mejoran la reutilización. El role contiene una parte concreta de la lógica de automatización, mientras que el playbook decide cuándo y dónde incluirla.
Guarde el archivo y salga del editor.
Crear el Master Playbook
Ahora tiene un Role, pero un Role no se ejecuta por sí solo. Necesita un «Master Playbook» para invocarlo.
Cree un archivo llamado site.yml en el directorio principal de su proyecto:
nano ~/project/site.yml
Este playbook será muy breve. Solo indica: «En estos hosts, ejecute este role».
En este punto, el playbook funciona más como un orquestador que como un contenedor de todos los detalles. Este es el cambio de arquitectura que los roles pretenden introducir.
---
- hosts: localhost
connection: local
roles:
- myrole
Cómo entender el código:
roles:: En lugar de una listatasks:, proporcionamos una lista de roles.- myrole: Ansible busca un directorio llamadomyroledentro del directorioroles/y ejecuta lo que se encuentre entasks/main.yml.
Guarde el archivo y salga del editor.
Validar y ejecutar
Antes de ejecutarlo, asegúrese de que no haya errores de escritura. Ansible incluye un comprobador de sintaxis integrado.
Ejecute este comando:
ansible-playbook -i inventory --syntax-check site.yml
Si todo está correcto, solo mostrará playbook: site.yml.
Si hay errores, lea atentamente el mensaje: normalmente señala el número exacto de la línea en la que la indentación es incorrecta.
Ahora ejecute el playbook:
ansible-playbook -i inventory site.yml
Debería ver que se ejecuta la tarea del role: TASK [myrole : Ensure tree is installed] ... changed
Resumen
En este laboratorio ha aprendido la forma «profesional» de estructurar Ansible.
- Inicializó un Role: Usó
ansible-galaxypara crear la estructura de directorios estándar. - Definió tareas: Colocó la lógica en
tasks/main.yml. - Usó el Role: Invocó el role desde un playbook principal
site.ymllimpio y sencillo.
A medida que escriba más automatización, creará roles para todo, por ejemplo, apache, mysql y common, lo que hará que su código sea reutilizable y fácil de leer.


