En este tema, aprenderemos sobre la estructura de un playbook en Ansible. Un playbook es un archivo YAML que define una serie de tareas que Ansible debe ejecutar en los hosts especificados. La correcta estructuración de un playbook es crucial para su legibilidad y mantenimiento.

Conceptos Clave

  1. YAML (YAML Ain't Markup Language): Es el formato en el que se escriben los playbooks. Es un formato de serialización de datos legible para humanos.
  2. Play: Un play es una lista de tareas que se ejecutan en un grupo de hosts.
  3. Task: Una tarea es una acción que Ansible ejecuta en los hosts.
  4. Module: Un módulo es una unidad de trabajo en Ansible, como instalar un paquete o copiar un archivo.
  5. Handlers: Son tareas que se ejecutan cuando son notificadas por otras tareas.
  6. Variables: Permiten almacenar valores que pueden ser reutilizados en el playbook.

Estructura Básica de un Playbook

Un playbook típico de Ansible tiene la siguiente estructura:

---
- name: Nombre del Play
  hosts: nombre_del_grupo_de_hosts
  become: yes/no
  vars:
    variable1: valor1
    variable2: valor2
  tasks:
    - name: Nombre de la Tarea 1
      module_name:
        parametro1: valor1
        parametro2: valor2

    - name: Nombre de la Tarea 2
      module_name:
        parametro1: valor1
        parametro2: valor2

  handlers:
    - name: Nombre del Handler
      module_name:
        parametro1: valor1
        parametro2: valor2

Desglose de la Estructura

  1. Encabezado (---): Indica el inicio de un documento YAML.
  2. Play: Cada play comienza con un guion (-) y contiene:
    • name: Un nombre descriptivo para el play.
    • hosts: El grupo de hosts en los que se ejecutarán las tareas.
    • become: Indica si se debe usar privilegios elevados (sudo).
    • vars: Variables definidas para el play.
    • tasks: Una lista de tareas a ejecutar.
    • handlers: Una lista de handlers que pueden ser notificados por las tareas.

Ejemplo Práctico

Vamos a crear un playbook simple que instala Nginx en un grupo de hosts llamado webservers.

---
- name: Instalar y configurar Nginx
  hosts: webservers
  become: yes
  vars:
    nginx_port: 80
  tasks:
    - name: Instalar Nginx
      apt:
        name: nginx
        state: present
      notify:
        - Reiniciar Nginx

    - name: Configurar Nginx para escuchar en el puerto {{ nginx_port }}
      lineinfile:
        path: /etc/nginx/sites-available/default
        regexp: 'listen\s+80;'
        line: 'listen {{ nginx_port }};'
      notify:
        - Reiniciar Nginx

  handlers:
    - name: Reiniciar Nginx
      service:
        name: nginx
        state: restarted

Explicación del Ejemplo

  1. Play: El play se llama "Instalar y configurar Nginx" y se ejecuta en los hosts del grupo webservers con privilegios elevados.
  2. Variables: Se define una variable nginx_port con el valor 80.
  3. Tareas:
    • Instalar Nginx: Usa el módulo apt para instalar Nginx y notifica al handler Reiniciar Nginx.
    • Configurar Nginx: Usa el módulo lineinfile para modificar el archivo de configuración de Nginx y notifica al handler Reiniciar Nginx.
  4. Handlers: Define un handler llamado Reiniciar Nginx que usa el módulo service para reiniciar el servicio de Nginx.

Ejercicio Práctico

Ejercicio

Crea un playbook que haga lo siguiente:

  1. Instale Apache en un grupo de hosts llamado webservers.
  2. Configure Apache para que escuche en el puerto 8080.
  3. Reinicie Apache si se realiza algún cambio en la configuración.

Solución

---
- name: Instalar y configurar Apache
  hosts: webservers
  become: yes
  vars:
    apache_port: 8080
  tasks:
    - name: Instalar Apache
      apt:
        name: apache2
        state: present
      notify:
        - Reiniciar Apache

    - name: Configurar Apache para escuchar en el puerto {{ apache_port }}
      lineinfile:
        path: /etc/apache2/ports.conf
        regexp: 'Listen 80'
        line: 'Listen {{ apache_port }}'
      notify:
        - Reiniciar Apache

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

Retroalimentación y Consejos

  • Errores Comunes:

    • Indentación Incorrecta: YAML es muy sensible a la indentación. Asegúrate de que todas las líneas estén correctamente indentadas.
    • Variables No Definidas: Si usas una variable en tu playbook, asegúrate de definirla en la sección vars o en un archivo de variables.
    • Módulos Incorrectos: Asegúrate de usar el módulo correcto para la tarea que deseas realizar.
  • Consejos Adicionales:

    • Comentarios: Usa comentarios (#) para explicar partes complejas de tu playbook.
    • Reutilización de Código: Usa roles y plantillas para reutilizar código y mantener tus playbooks organizados.

Conclusión

En esta sección, hemos aprendido sobre la estructura básica de un playbook en Ansible, incluyendo cómo definir plays, tareas, variables y handlers. También hemos visto un ejemplo práctico y realizado un ejercicio para reforzar los conceptos. Con esta base, estarás preparado para escribir playbooks más complejos y eficientes en los siguientes módulos.

© Copyright 2024. Todos los derechos reservados