En este tema, aprenderemos cómo integrar roles en nuestros playbooks de Ansible. Los roles son una forma de organizar y reutilizar tareas, variables, archivos y plantillas en Ansible. Al usar roles, podemos estructurar nuestros playbooks de manera más modular y mantenible.

Objetivos de Aprendizaje

  • Comprender la estructura básica de un rol.
  • Aprender a incluir roles en un playbook.
  • Configurar variables específicas para roles.
  • Ejecutar un playbook que utiliza roles.

Estructura Básica de un Rol

Antes de usar roles en un playbook, es importante entender la estructura básica de un rol. Un rol en Ansible tiene una estructura de directorios específica:

roles/
  └── nombre_del_rol/
      ├── tasks/
      │   └── main.yml
      ├── handlers/
      │   └── main.yml
      ├── templates/
      ├── files/
      ├── vars/
      │   └── main.yml
      ├── defaults/
      │   └── main.yml
      ├── meta/
      │   └── main.yml
  • tasks/main.yml: Contiene las tareas que se ejecutarán.
  • handlers/main.yml: Define los manejadores que se pueden notificar.
  • templates/: Almacena plantillas Jinja2.
  • files/: Almacena archivos que se pueden copiar.
  • vars/main.yml: Define variables específicas del rol.
  • defaults/main.yml: Define valores predeterminados para las variables.
  • meta/main.yml: Contiene metadatos sobre el rol, como dependencias.

Incluir Roles en un Playbook

Para usar un rol en un playbook, simplemente lo incluimos en la sección roles del playbook. Aquí hay un ejemplo de un playbook que utiliza un rol llamado webserver:

---
- name: Configurar Servidor Web
  hosts: web
  roles:
    - webserver

En este ejemplo, el rol webserver se aplicará a todos los hosts en el grupo web.

Configurar Variables Específicas para Roles

Podemos definir variables específicas para roles en el playbook. Estas variables pueden ser utilizadas dentro del rol para personalizar su comportamiento. Aquí hay un ejemplo:

---
- name: Configurar Servidor Web
  hosts: web
  roles:
    - role: webserver
      vars:
        http_port: 80
        max_clients: 200

En este caso, estamos pasando las variables http_port y max_clients al rol webserver.

Ejemplo Práctico

Vamos a crear un ejemplo práctico donde configuramos un servidor web utilizando un rol. Primero, creamos la estructura del rol webserver:

roles/
  └── webserver/
      ├── tasks/
      │   └── main.yml
      ├── templates/
      │   └── httpd.conf.j2
      ├── vars/
      │   └── main.yml

Contenido de 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

- name: Habilitar sitio
  command: a2ensite 000-default

- name: Reiniciar Apache
  service:
    name: apache2
    state: restarted

Contenido de templates/httpd.conf.j2

<VirtualHost *:{{ http_port }}>
    DocumentRoot /var/www/html
    <Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Contenido de vars/main.yml

---
http_port: 80

Playbook Principal

---
- name: Configurar Servidor Web
  hosts: web
  roles:
    - role: webserver
      vars:
        http_port: 8080

Ejecución del Playbook

Para ejecutar el playbook, utilizamos el siguiente comando:

ansible-playbook -i inventario.ini playbook.yml

Donde inventario.ini es el archivo de inventario que define los hosts del grupo web.

Resumen

En esta sección, hemos aprendido cómo usar roles en playbooks de Ansible. Hemos cubierto la estructura básica de un rol, cómo incluir roles en un playbook, cómo configurar variables específicas para roles y hemos visto un ejemplo práctico de un playbook que utiliza un rol para configurar un servidor web. Los roles nos permiten organizar y reutilizar nuestro código de manera eficiente, haciendo que nuestros playbooks sean más modulares y mantenibles.

En el próximo módulo, profundizaremos en técnicas avanzadas de playbooks, incluyendo el uso de manejadores, plantillas y Ansible Vault.

© Copyright 2024. Todos los derechos reservados