Curso Ansible: definición y uso de Roles
Los roles en Ansible son una herramienta poderosa para organizar y reutilizar tareas, variables y otros recursos. Son una forma eficiente de estructurar Playbooks, permitiendo una mejor gestión y escalabilidad de los proyectos de automatización. En esta entrada, exploraremos qué son los roles, cómo se crean, y cómo se utilizan en Ansible.
¿Qué son los Roles en Ansible?
Un rol en Ansible es una colección de tareas, variables, archivos, plantillas y otros recursos organizados de manera estructurada. Los roles permiten encapsular lógica y configuraciones reutilizables, facilitando su aplicación en diferentes Playbooks y proyectos.
Estructura de un Rol
Un rol en Ansible sigue una estructura de directorios específica. Aquí hay un ejemplo de la estructura de un rol básico:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
my_role/ ├── defaults/ │ └── main.yml ├── files/ ├── handlers/ │ └── main.yml ├── meta/ │ └── main.yml ├── tasks/ │ └── main.yml ├── templates/ ├── tests/ │ ├── inventory │ └── test.yml └── vars/ └── main.yml |
- defaults/: Contiene las variables por defecto para el rol.
- files/: Archivos que se pueden transferir a los hosts gestionados.
- handlers/: Definición de handlers que se pueden utilizar dentro del rol.
- meta/: Metadatos del rol, incluyendo dependencias.
- tasks/: Tareas principales del rol.
- templates/: Plantillas que se pueden utilizar en las tareas.
- tests/: Playbooks e inventarios para probar el rol.
- vars/: Variables del rol.
Creación de un Rol
Puedes crear un rol manualmente siguiendo la estructura anterior, o puedes usar el comando ansible-galaxy para generar la estructura básica del rol.
1 |
ansible-galaxy init my_role |
Este comando creará la estructura de directorios necesaria para un rol.
Ejemplo de un Rol
Supongamos que queremos crear un rol llamado webserver para configurar un servidor web. Aquí hay un ejemplo simple de cómo estructurar el rol:
- Definir Variables por Defecto
1 2 |
# roles/webserver/defaults/main.yml http_port: 80 |
- Definir Handlers
1 2 3 4 5 |
# roles/webserver/handlers/main.yml - name: restart apache service: name: apache2 state: restarted |
- Definir Tareas
1 2 3 4 5 6 7 8 9 10 11 12 |
# roles/webserver/tasks/main.yml - name: Instalar Apache apt: name: apache2 state: present - name: Copiar archivo de configuración template: src: httpd.conf.j2 dest: /etc/apache2/sites-available/000-default.conf notify: - restart apache |
- Definir Plantillas
1 2 3 4 5 |
# roles/webserver/templates/httpd.conf.j2 <VirtualHost *:{{ http_port }}> ServerAdmin webmaster@localhost DocumentRoot /var/www/html </VirtualHost> |
Uso de Roles en un Playbook
Una vez que has creado un rol, puedes usarlo en tus Playbooks. Aquí hay un ejemplo de cómo aplicar el rol webserver en un Playbook:
1 2 3 4 5 |
--- - name: Configurar servidores web hosts: webservers roles: - webserver |
Reutilización de Roles
Los roles permiten una gran reutilización. Puedes aplicar el mismo rol a diferentes hosts o grupos de hosts simplemente incluyéndolo en varios Playbooks. También puedes parametrizar los roles utilizando variables para ajustar su comportamiento según el entorno o el caso de uso.
Roles y Dependencias
Los roles pueden tener dependencias de otros roles. Estas dependencias se definen en el archivo meta/main.yml del rol:
1 2 3 |
# roles/webserver/meta/main.yml dependencies: - { role: common, some_variable: some_value } |
Ejemplo Completo
A continuación, se muestra un ejemplo completo de cómo definir y usar un rol en Ansible.
- Estructura del Rol
1 2 3 4 5 6 7 8 9 10 11 |
webserver/ ├── defaults/ │ └── main.yml ├── handlers/ │ └── main.yml ├── tasks/ │ └── main.yml ├── templates/ │ └── httpd.conf.j2 └── meta/ └── main.yml |
- Contenido de los Archivos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# roles/webserver/defaults/main.yml http_port: 80 # roles/webserver/handlers/main.yml - name: restart apache service: name: apache2 state: restarted # roles/webserver/tasks/main.yml - name: Instalar Apache apt: name: apache2 state: present - name: Copiar archivo de configuración template: src: httpd.conf.j2 dest: /etc/apache2/sites-available/000-default.conf notify: - restart apache # roles/webserver/templates/httpd.conf.j2 <VirtualHost *:{{ http_port }}> ServerAdmin webmaster@localhost DocumentRoot /var/www/html </VirtualHost> # roles/webserver/meta/main.yml dependencies: - { role: common } |
- Playbook para Aplicar el Rol
1 2 3 4 5 |
--- - name: Configurar servidores web hosts: webservers roles: - webserver |
ENTRADAS RELACIONADAS CURSO ANSIBLE
- Curso Ansible: Qué es y para qué sirve
- Curso Ansible: Instalación, configuración inicial y ejemplo práctico básico
- Curso Ansible: Puertos de comunicación necesarios
- Curso Ansible: Playbooks conceptos básicos
- Curso Ansible: Manejo de Inventarios
- Curso Ansible: Manejo de Variables
- Curso Ansible: definición y uso de Roles
- Curso Ansible: qué son los Handlers
- Curso Ansible: Condicionales y bucles
- Curso Ansible: Gestión de secretos y credenciales con Ansible Vault
- Curso Ansible: Uso de roles de la comunidad con Ansible Galaxy
- Curso Ansible: Despliegue de aplicaciones en contenedores con Ansible
- Curso Ansible: Integración de Ansible con CI/CD pipelines
- Curso Ansible: Generar ficheros YAML
- Curso Ansible: Integración de Ansible con Terraform para gestionar Proxmox
- Curso Ansible: Provisioners de Ansible en Terraform
OTRAS ENTRADAS RELACIONADAS ANSIBLE
- Ansible: Conceptos básicos
- Ansible: Comandos básicos
- Instalar Ansible en Centos 7
- Ansible: Gestión básica máquinas virtuales Proxmox
- MacOS: Instalar Podman y Ansible
- Docker Swarm: Instalar Ansible AWX
- Ansible: Validar ficheros YAML
- Ansible: Instalar SQL Server 2019 en Linux
- Ansible: Crear página web WordPress
- Ansible: Instalación servidores web
- Ansible: Gestión de máquina Windows
Te ha gustado la entrada SGUENOS EN TWITTER O INVITANOS A UN CAFE?