Ejercicio del Taller - Roles: Haciendo tus playbooks reutilizables

Leer esto en otros idiomas:
uk Inglés, japan Japonés, brazil Portugués de Brasil, france Francés, Español Español.

Tabla de Contenidos

Objetivo

Este ejercicio se basa en los ejercicios anteriores y avanza tus habilidades en Ansible guiándote a través de la creación de un rol que configura Apache (httpd). Tomarás el conocimiento que has aprendido para ahora integrar variables, manejadores y una plantilla para un index.html personalizado. Este rol demuestra cómo encapsular tareas, variables, plantillas y manejadores en una estructura reutilizable para una automatización eficiente.

Guía

Paso 1 - Conceptos Básicos de Roles

Los roles en Ansible organizan tareas de automatización relacionadas y recursos, como variables, plantillas y manejadores, en un directorio estructurado. Este ejercicio se centra en crear un rol de configuración de Apache, enfatizando la reutilización y modularidad.

Paso 2 - Limpieza del Entorno

Basándonos en nuestro trabajo previo con la configuración de Apache, vamos a crear un playbook de Ansible dedicado a limpiar nuestro entorno. Este paso allana el camino para que introduzcamos un nuevo rol de Apache, proporcionando una visión clara de los ajustes realizados. A través de este proceso, obtendremos una comprensión más profunda de la versatilidad y reutilización que ofrecen los Roles de Ansible.

Ejecute el siguiente playbook de Ansible para limpiar el entorno:

---
- name: Cleanup Environment
  hosts: all
  become: true
  vars:
    package_name: httpd
  tasks:
    - name: Remove Apache from web servers
      ansible.builtin.dnf:
        name: ""
        state: absent
      when: inventory_hostname in groups['web']

    - name: Remove firewalld
      ansible.builtin.dnf:
        name: firewalld
        state: absent

    - name: Delete created users
      ansible.builtin.user:
        name: ""
        state: absent
        remove: true  # Use 'remove: true’ to delete home directories
      loop:
        - alice
        - bob
        - carol
        - Roger

    - name: Reset MOTD to an empty message
      ansible.builtin.copy:
        dest: /etc/motd
        content: ''

Paso 3 - Construyendo el Rol de Apache

Desarrollaremos un rol llamado apache para instalar, configurar y gestionar Apache.

  1. Generar Estructura del Rol:

Cree el rol usando ansible-galaxy, especificando el directorio de roles para la salida.

[student@ansible-1 lab_inventory]$ mkdir roles
[student@ansible-1 lab_inventory]$ ansible-galaxy init --offline roles/apache
  1. Definir Variables del Rol:

Poblamos /home/student/lab_inventory/roles/apache/vars/main.yml con variables específicas de Apache:

---
# vars file for roles/apache
apache_package_name: httpd
apache_service_name: httpd
  1. Configurar Tareas del Rol:

Ajustamos /home/student/lab_inventory/roles/apache/tasks/main.yml para incluir tareas para la instalación y gestión del servicio Apache:

---
# tasks file for ansible-files/roles/apache
- name: Install Apache web server
  ansible.builtin.package:
    name: ""
    state: present

- name: Ensure Apache is running and enabled
  ansible.builtin.service:
    name: ""
    state: started
    enabled: true

- name: Install firewalld
  ansible.builtin.dnf:
    name: firewalld
    state: present

- name: Ensure firewalld is running
  ansible.builtin.service:
    name: firewalld
    state: started
    enabled: true

- name: Allow HTTPS traffic on web servers
  ansible.posix.firewalld:
    service: https
    permanent: true
    state: enabled
  when: inventory_hostname in groups['web']
  notify: Reload Firewall
  1. Implementar Manejadores:

En /home/student/lab_inventory/roles/apache/handlers/main.yml, creamos un manejador para reiniciar firewalld si su configuración cambia:

---
# handlers file for ansible-files/roles/apache
- name: Reload Firewall
  ansible.builtin.service:
    name: firewalld
    state: reloaded
  1. Crear y Desplegar Plantilla:

Utilizamos una plantilla Jinja2 para un index.html personalizado. Almacene la plantilla en templates/index.html.j2:

<html>
<head>
<title>Welcome to </title>
</head>
<body>
 <h1>Hello from </h1>
</body>
</html>
  1. Actualizar tasks/main.yml para desplegar esta plantilla index.html:
- name: Deploy custom index.html
  ansible.builtin.template:
    src: index.html.j2
    dest: /var/www/html/index.html

Paso 4 - Integración del Rol en un Playbook

Incruste el rol apache en un playbook llamado deploy_apache.yml dentro de /home/student/lab_inventory para aplicarlo a sus hosts del grupo ‘web’ (node1, node2, node3).

- name: Setup Apache Web Servers
  hosts: web
  become: true
  roles:
    - apache

Paso 5 - Ejecución y Validación del Rol

Lanza tu playbook para configurar Apache en los servidores web designados:

ansible-navigator run deploy_apache.yml -m stdout

Salida:

PLAY [Setup Apache Web Servers] ************************************************

TASK [Gathering Facts] *********************************************************
ok: [node2]
ok: [node1]
ok: [node3]

TASK [apache : Install Apache web server] **************************************
changed: [node1]
changed: [node2]
changed: [node3]

TASK [apache : Ensure Apache is running and enabled] ***************************
changed: [node2]
changed: [node1]
changed: [node3]

TASK [apache : Deploy custom index.html] ***************************************
changed: [node1]
changed: [node2]
changed: [node3]

RUNNING HANDLER [apache : Reload Firewall] *************************************
ok: [node2]
ok: [node1]
ok: [node3]

PLAY RECAP *********************************************************************
node1                      : ok=5    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node2                      : ok=5    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
node3                      : ok=5    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Paso 6 - Verificar que Apache esté Corriendo

Una vez completado el playbook, verifica que httpd esté corriendo en todos los nodos web.

[rhel@control ~]$ ssh node1 "systemctl status httpd"
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2024-01-29 16:49:13 UTC; 3min 46s ago
[rhel@control ~]$ ssh node2 "systemctl status httpd"
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2024-01-29 16:49:13 UTC; 3min 58s ago

Una vez que se haya verificado que httpd está corriendo, comprueba si el servidor web Apache está sirviendo el archivo index.html apropiado:

[student@ansible-1 lab_inventory]$ curl http://node1
<html>
<head>
<title>Welcome to node1</title>
</head>
<body>
 <h1>Hello from node1</h1>
</body>
</html>

Navegación
Ejercicio anterior - Próximo ejercicio

Haz clic aquí para volver al taller de Ansible para Red Hat Enterprise Linux