En este tema, aprenderás cómo crear roles en Ansible y cómo compartirlos utilizando Ansible Galaxy. Los roles son una forma de organizar y reutilizar tareas en Ansible, lo que facilita la gestión de configuraciones complejas. Compartir roles en Ansible Galaxy permite a otros usuarios beneficiarse de tu trabajo y contribuye a la comunidad de Ansible.
- ¿Qué es un Rol en Ansible?
Un rol en Ansible es una colección de tareas, archivos, plantillas, variables y manejadores que se pueden reutilizar y compartir. Los roles ayudan a mantener el código organizado y modular, lo que facilita su mantenimiento y reutilización.
Estructura de un Rol
La estructura típica de un rol en Ansible es la siguiente:
roles/
└── nombre_del_rol/
├── defaults/
│ └── main.yml
├── files/
├── handlers/
│ └── main.yml
├── meta/
│ └── main.yml
├── tasks/
│ └── main.yml
├── templates/
├── tests/
│ ├── inventory
│ └── test.yml
└── vars/
└── main.ymlCada directorio tiene un propósito específico:
- defaults/: Contiene las variables por defecto del rol.
- files/: Contiene archivos que se pueden copiar a los hosts gestionados.
- handlers/: Contiene manejadores que se pueden notificar desde las tareas.
- meta/: Contiene metadatos sobre el rol, como dependencias.
- tasks/: Contiene las tareas que se ejecutarán.
- templates/: Contiene plantillas que se pueden renderizar y copiar a los hosts gestionados.
- tests/: Contiene archivos para probar el rol.
- vars/: Contiene variables que se pueden utilizar en el rol.
- Creando un Rol
Paso 1: Crear la Estructura del Rol
Puedes crear la estructura de un rol manualmente o utilizando el comando ansible-galaxy init. Este comando crea la estructura básica del rol automáticamente.
Paso 2: Definir Tareas
Edita el archivo tasks/main.yml para definir las tareas que el rol ejecutará. Aquí tienes un ejemplo de un rol que instala y configura Nginx:
---
# tasks/main.yml
- name: Instalar Nginx
apt:
name: nginx
state: present
- name: Iniciar y habilitar Nginx
service:
name: nginx
state: started
enabled: truePaso 3: Definir Variables
Si tu rol necesita variables, puedes definirlas en defaults/main.yml o vars/main.yml. Las variables en defaults/main.yml tienen menor precedencia que las de vars/main.yml.
Paso 4: Definir Manejadores
Si necesitas manejadores, defínelos en handlers/main.yml. Los manejadores son tareas que se ejecutan cuando son notificadas por otras tareas.
- Compartiendo Roles en Ansible Galaxy
Paso 1: Crear una Cuenta en Ansible Galaxy
Para compartir roles en Ansible Galaxy, primero necesitas una cuenta. Puedes registrarte en Ansible Galaxy.
Paso 2: Subir el Rol a Ansible Galaxy
Antes de subir el rol, asegúrate de que el archivo meta/main.yml contiene la información necesaria, como el nombre del rol, la descripción y las dependencias.
---
# meta/main.yml
galaxy_info:
author: tu_nombre
description: Rol para instalar y configurar Nginx
company: tu_empresa
license: MIT
min_ansible_version: 2.9
platforms:
- name: Ubuntu
versions:
- bionic
- focal
categories:
- web
- nginx
dependencies: []Luego, utiliza el comando ansible-galaxy para subir el rol:
Paso 3: Usar Roles desde Ansible Galaxy
Para usar un rol desde Ansible Galaxy, puedes instalarlo utilizando el comando ansible-galaxy install:
Luego, puedes incluir el rol en tus playbooks:
Ejercicio Práctico
Ejercicio 1: Crear y Compartir un Rol
- Crea un rol llamado
apacheque instale y configure Apache en un servidor Ubuntu. - Define las tareas necesarias para instalar Apache y asegurarte de que el servicio esté iniciado y habilitado.
- Define una variable para el puerto de Apache en
defaults/main.yml. - Define un manejador para reiniciar Apache.
- Sube el rol a Ansible Galaxy y compártelo.
Solución
- Crear la estructura del rol:
- Definir las tareas en
tasks/main.yml:
---
# tasks/main.yml
- name: Instalar Apache
apt:
name: apache2
state: present
- name: Iniciar y habilitar Apache
service:
name: apache2
state: started
enabled: true- Definir la variable en
defaults/main.yml:
- Definir el manejador en
handlers/main.yml:
- Editar
meta/main.ymly subir el rol a Ansible Galaxy:
---
# meta/main.yml
galaxy_info:
author: tu_nombre
description: Rol para instalar y configurar Apache
company: tu_empresa
license: MIT
min_ansible_version: 2.9
platforms:
- name: Ubuntu
versions:
- bionic
- focal
categories:
- web
- apache
dependencies: []Conclusión
En esta sección, has aprendido cómo crear roles en Ansible y cómo compartirlos utilizando Ansible Galaxy. Los roles son una herramienta poderosa para organizar y reutilizar tareas, y compartirlos en Ansible Galaxy permite a otros beneficiarse de tu trabajo. Ahora estás listo para crear y compartir tus propios roles, contribuyendo a la comunidad de Ansible y mejorando la eficiencia de tus proyectos.
Ansible: De Principiante a Avanzado
Módulo 1: Introducción a Ansible
Módulo 2: Conceptos Básicos de Ansible
Módulo 3: Playbooks
- Introducción a los Playbooks
- Escribiendo tu Primer Playbook
- Estructura del Playbook
- Variables y Hechos
- Condicionales y Bucles
Módulo 4: Roles
Módulo 5: Técnicas Avanzadas de Playbook
Módulo 6: Ansible Galaxy
Módulo 7: Ansible Tower
- Introducción a Ansible Tower
- Instalando Ansible Tower
- Usando Ansible Tower
- Gestionando Proyectos e Inventarios
Módulo 8: Ansible para DevOps
Módulo 9: Mejores Prácticas de Ansible
- Organización del Código
- Mejores Prácticas de Seguridad
- Ajuste de Rendimiento
- Pruebas de Código Ansible
