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.

  1. ¿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.yml

Cada 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.

  1. 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.

ansible-galaxy init nombre_del_rol

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: true

Paso 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.

---
# defaults/main.yml
nginx_port: 80

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.

---
# handlers/main.yml
- name: Reiniciar Nginx
  service:
    name: nginx
    state: restarted

  1. 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:

ansible-galaxy login
ansible-galaxy import tu_usuario nombre_del_rol

Paso 3: Usar Roles desde Ansible Galaxy

Para usar un rol desde Ansible Galaxy, puedes instalarlo utilizando el comando ansible-galaxy install:

ansible-galaxy install tu_usuario.nombre_del_rol

Luego, puedes incluir el rol en tus playbooks:

---
- hosts: webservers
  roles:
    - tu_usuario.nombre_del_rol

Ejercicio Práctico

Ejercicio 1: Crear y Compartir un Rol

  1. Crea un rol llamado apache que instale y configure Apache en un servidor Ubuntu.
  2. Define las tareas necesarias para instalar Apache y asegurarte de que el servicio esté iniciado y habilitado.
  3. Define una variable para el puerto de Apache en defaults/main.yml.
  4. Define un manejador para reiniciar Apache.
  5. Sube el rol a Ansible Galaxy y compártelo.

Solución

  1. Crear la estructura del rol:
ansible-galaxy init apache
  1. 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
  1. Definir la variable en defaults/main.yml:
---
# defaults/main.yml
apache_port: 80
  1. Definir el manejador en handlers/main.yml:
---
# handlers/main.yml
- name: Reiniciar Apache
  service:
    name: apache2
    state: restarted
  1. Editar meta/main.yml y 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: []
ansible-galaxy login
ansible-galaxy import tu_usuario apache

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.

© Copyright 2024. Todos los derechos reservados