Solución de problemas de Playbooks y Hosts de Ansible en RHEL

AnsibleBeginner
Practicar Ahora

Introducción

En este laboratorio, aprenderá a solucionar problemas comunes que se encuentran al trabajar con Ansible en Red Hat Enterprise Linux. Obtendrá experiencia práctica en la identificación y resolución de una variedad de problemas, desde la configuración inicial del entorno hasta errores comunes de playbooks y problemas de conectividad de hosts administrados. Los ejercicios cubren la corrección de sintaxis YAML, la corrección de errores de plantillas Jinja2 y el diagnóstico de problemas en sistemas remotos.

Comenzará preparando un entorno RHEL y configurando Ansible para un registro (logging) efectivo. Luego, se sumergirá en escenarios prácticos de solución de problemas, utilizando el modo de verificación (check mode) de Ansible para diagnosticar problemas relacionados con servicios y corrigiendo configuraciones de firewall para resolver la inalcanzabilidad de hosts. Al final de este laboratorio, estará equipado con un conjunto integral de habilidades para mantener flujos de trabajo de automatización de Ansible robustos.

Este es un Guided Lab, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 93%. Ha recibido una tasa de reseñas positivas del 100% por parte de los estudiantes.

Preparar el Entorno RHEL y Configurar el Registro de Ansible

En este paso, preparará su entorno Red Hat Enterprise Linux para la automatización con Ansible. Esto implica instalar el software necesario, crear un directorio de proyecto dedicado y configurar un archivo de configuración básico para controlar el comportamiento de Ansible y habilitar el registro. Una configuración adecuada es el primer paso hacia una automatización y solución de problemas efectivas.

  1. Instalar Ansible

    Primero, necesita instalar Ansible. El motor de automatización principal es proporcionado por el paquete ansible-core. Utilice el gestor de paquetes dnf con sudo para instalarlo. La bandera -y responde automáticamente "sí" a cualquier solicitud de confirmación.

    sudo dnf install -y ansible-core

    Debería ver una salida que indica que el paquete se está instalando junto con sus dependencias.

    Last metadata expiration check: ...
    Dependencies resolved.
    ================================================================================
     Package             Architecture   Version                Repository      Size
    ================================================================================
    Installing:
     ansible-core        x86_64         <version>              <repo>          2.8 M
    ...
    Transaction Summary
    ================================================================================
    Install  XX Packages
    
    Total download size: XX M
    Installed size: XX M
    ...
    Complete!
  2. Crear un Directorio de Proyecto

    Es una buena práctica organizar sus proyectos de Ansible en directorios dedicados. Esto mantiene sus playbooks, inventario y archivos de configuración ordenadamente separados. Creemos un directorio llamado ansible_troubleshooting dentro de su carpeta de proyecto principal y naveguemos hacia él.

    mkdir -p ~/project/ansible_troubleshooting
    cd ~/project/ansible_troubleshooting

    A partir de ahora, todos los comandos en este laboratorio se ejecutarán desde dentro del directorio ~/project/ansible_troubleshooting.

  3. Crear un Archivo de Inventario de Ansible

    Un inventario es un archivo que enumera los hosts (o nodos) que Ansible administrará. Dado que está trabajando en una única VM de LabEx, configurará Ansible para administrar la máquina local.

    Cree un archivo llamado inventory y agregue localhost a él. La parte ansible_connection=local le dice a Ansible que ejecute comandos directamente en el nodo de control (su VM) sin usar SSH.

    echo "localhost ansible_connection=local" > inventory

    Puede verificar el contenido del archivo usando el comando cat:

    cat inventory

    Salida Esperada:

    localhost ansible_connection=local
  4. Configurar el Registro de Ansible

    Un archivo ansible.cfg le permite personalizar el comportamiento de Ansible para un proyecto específico. Cuando se coloca en el directorio del proyecto, su configuración anula los valores predeterminados a nivel del sistema. Aquí, creará este archivo para especificar la ubicación de su inventario y habilitar el registro. El registro es crucial para la solución de problemas, ya que registra información detallada sobre cada ejecución de playbook.

    Use el editor nano para crear el archivo ansible.cfg.

    nano ansible.cfg

    Ahora, copie y pegue el siguiente contenido en el editor nano. Esta configuración le dice a Ansible que use el archivo inventory en el directorio actual y que escriba toda la salida de registro en un archivo llamado ansible.log.

    [defaults]
    inventory = /home/labex/project/ansible_troubleshooting/inventory
    log_path = /home/labex/project/ansible_troubleshooting/ansible.log

    Para guardar el archivo en nano, presione Ctrl+X, luego Y para confirmar, y finalmente Enter para escribir el archivo.

    Su entorno ahora está completamente preparado. Tiene Ansible instalado y un directorio de proyecto configurado con un inventario local y el registro habilitado, listo para los siguientes pasos.

Corregir Errores de Sintaxis y Sangría YAML en un Playbook

En este paso, aprenderá a diagnosticar y corregir dos de los tipos de errores más comunes en los playbooks de Ansible: errores de sintaxis YAML y sangría incorrecta. YAML, el lenguaje utilizado para escribir playbooks, es muy estricto con su estructura. Un solo espacio mal colocado o un carácter especial sin comillas puede impedir que un playbook se ejecute. Utilizará el comando ansible-playbook --syntax-check, una herramienta esencial para validar sus playbooks antes de la ejecución.

  1. Crear un Playbook con Errores Intencionados

    Primero, creará un nuevo archivo de playbook llamado webserver.yml en su directorio de proyecto (~/project/ansible_troubleshooting). Este archivo contiene errores intencionados que corregirá.

    Use nano para crear el archivo:

    nano webserver.yml

    Copie y pegue el siguiente contenido en el editor. Observe los dos errores deliberados: una cadena sin comillas que contiene dos puntos y una sangría incorrecta para la segunda tarea.

    ---
    - name: Configure Web Server
      hosts: localhost
      vars:
        ## ERROR 1: Unquoted colon in string
        package_comment: This is a package: httpd
      tasks:
        - name: Install httpd package
          ansible.builtin.dnf:
            name: httpd
            state: present
    
        ## ERROR 2: Incorrect indentation
          - name: Create a test index page
            ansible.builtin.copy:
              content: "<h1>Welcome to Ansible</h1>"
              dest: /var/www/html/index.html

    Guarde el archivo y salga de nano presionando Ctrl+X, luego Y, y Enter.

  2. Identificar y Corregir el Error de Sintaxis YAML (Dos Puntos sin Comillas)

    Ahora, ejecute una verificación de sintaxis en el playbook que acaba de crear. Este comando analizará el archivo e informará cualquier problema de sintaxis sin ejecutar realmente las tareas.

    ansible-playbook --syntax-check webserver.yml

    Salida Esperada (Error): Verá un error porque el valor de package_comment contiene dos puntos (:) pero no está entre comillas. YAML interpreta los dos puntos como un separador clave-valor, lo que genera un error de sintaxis.

    ERROR! We were unable to read either as JSON nor YAML, these are the errors we found:
    - Syntax Error while loading YAML.
      did not find expected ':'
    
    The error appears to be in '/home/labex/project/ansible_troubleshooting/webserver.yml': line 6, column 41, but may be elsewhere in the file depending on the exact syntax problem.
    
    The offending line appears to be:
    
      vars:
        package_comment: This is a package: httpd
                                            ^ here

    Solución: Para solucionar esto, debe encerrar la cadena entre comillas dobles. Abra el archivo nuevamente con nano:

    nano webserver.yml

    Modifique la línea debajo de vars para agregar comillas:

    ## ... (resto del archivo)
    vars:
      ## FIX: Add quotes around the string with a colon
      package_comment: "This is a package: httpd"
    ## ... (resto del archivo)

    Guarde y salga del editor.

  3. Identificar y Corregir el Error de Sangría YAML

    Con el primer error corregido, ejecute la verificación de sintaxis nuevamente.

    ansible-playbook --syntax-check webserver.yml

    Salida Esperada (Error): Esta vez, Ansible informará un error diferente relacionado con la estructura del playbook.

    ERROR! A malformed block was encountered.
    
    The error appears to be in '/home/labex/project/ansible_troubleshooting/webserver.yml': line 13, column 11, but may be elsewhere in the file depending on the exact syntax problem.
    
    The offending line appears to be:
    
    
          ## ERROR 2: Incorrect indentation
          - name: Create a test index page
            ^ here

    Este error ocurre porque YAML utiliza la sangría para definir la estructura. Todos los elementos de una lista (en este caso, las tareas, que son elementos de lista que comienzan con -) deben tener el mismo nivel de sangría. La segunda tarea, Create a test index page, está demasiado sangrada.

    Solución: Abra el archivo una vez más para corregir la sangría.

    nano webserver.yml

    Elimine los espacios adicionales antes de la segunda tarea para que su guion (-) se alinee perfectamente con el guion de la primera tarea.

    ## ... (resto del archivo)
    tasks:
      - name: Install httpd package
        ansible.builtin.dnf:
          name: httpd
          state: present
    
      ## FIX: Correct the indentation to align with the previous task
      - name: Create a test index page
        ansible.builtin.copy:
          content: "<h1>Welcome to Ansible</h1>"
          dest: /var/www/html/index.html

    Guarde y salga del editor.

  4. Verificar el Playbook Corregido

    Finalmente, ejecute la verificación de sintaxis una última vez.

    ansible-playbook --syntax-check webserver.yml

    Esta vez, el comando debería completarse sin errores, y verá el nombre del playbook impreso, lo que confirma que la sintaxis ahora es correcta.

    Salida Esperada (Éxito):

    playbook: webserver.yml

Resolver Errores de Comillas y Rutas de Plantillas Jinja2

En este paso, abordará errores relacionados con Jinja2, el potente motor de plantillas de Ansible. Aprenderá por qué las expresiones Jinja2 a menudo necesitan ser entrecomilladas y cómo depurar problemas cuando un playbook no puede encontrar un archivo de plantilla especificado. Estos son errores comunes en tiempo de ejecución que ocurren después de que un playbook ya ha pasado una verificación de sintaxis.

  1. Crear un Archivo de Plantilla Jinja2

    Primero, necesita un archivo de plantilla. A diferencia de un archivo estático, una plantilla puede contener variables que Ansible reemplazará con valores reales durante la ejecución del playbook. Creará una plantilla HTML simple.

    Use nano para crear un archivo llamado index.html.j2 en su directorio de proyecto (~/project/ansible_troubleshooting). La extensión .j2 es una convención común para las plantillas Jinja2.

    nano index.html.j2

    Copie y pegue el siguiente contenido HTML en el editor. Observe el marcador de posición {{ welcome_message }}, que es una variable Jinja2.

    <h1>{{ welcome_message }}</h1>
    <p>This page was deployed by Ansible.</p>

    Guarde el archivo y salga de nano (Ctrl+X, Y, Enter).

  2. Modificar el Playbook para Usar la Plantilla e Introducir Errores

    Ahora, modifique su playbook webserver.yml para usar el módulo ansible.builtin.template. También introducirá dos nuevos errores: una variable Jinja2 sin comillas y una ruta de plantilla incorrecta.

    Abra webserver.yml con nano:

    nano webserver.yml

    Reemplace todo el contenido del archivo con lo siguiente. La directiva become: true le dice a Ansible que ejecute tareas con privilegios administrativos (usando sudo), lo cual es necesario para instalar software y escribir archivos en directorios del sistema como /var/www/html.

    ---
    - name: Configure Web Server
      hosts: localhost
      become: true
      vars:
        package_name: httpd
        welcome_message: "Welcome to Ansible with Jinja2"
      tasks:
        - name: Install httpd package
          ansible.builtin.dnf:
            ## ERROR 1: Unquoted Jinja2 variable
            name: { { package_name } }
            state: present
    
        - name: Create a test index page from template
          ansible.builtin.template:
            ## ERROR 2: Incorrect template source path
            src: index.j2
            dest: /var/www/html/index.html

    Guarde y salga del editor.

  3. Identificar y Corregir el Error de Comillas Jinja2

    Aunque este es un problema de Jinja2, puede manifestarse como un error de sintaxis YAML. Ejecute el verificador de sintaxis para ver cómo lo interpreta Ansible.

    ansible-playbook --syntax-check webserver.yml

    Salida Esperada (Error): Obtendrá un error de sintaxis porque un valor YAML que comienza con {{ se trata como una construcción especial y debe entrecomillarse para ser interpretado como una cadena.

    ERROR! A malformed block was encountered.
    
    The error appears to be in '/home/labex/project/ansible_troubleshooting/webserver.yml': line 11, column 19, but may be elsewhere in the file depending on the exact syntax problem.
    
    The offending line appears to be:
    
              ## ERROR 1: Unquoted Jinja2 variable
              name: {{ package_name }}
                      ^ here

    Solución: Abra webserver.yml y encierre la variable Jinja2 entre comillas dobles.

    nano webserver.yml

    Modifique la tarea Install httpd package:

    ## ... (resto del archivo)
    tasks:
      - name: Install httpd package
        ansible.builtin.dnf:
          ## FIX: Quote the Jinja2 expression
          name: "{{ package_name }}"
          state: present
    ## ... (resto del archivo)

    Guarde y salga. La verificación de sintaxis ahora debería pasar.

  4. Identificar y Corregir el Error de Ruta de Plantilla

    Ahora que la sintaxis es correcta, intente ejecutar el playbook.

    ansible-playbook webserver.yml

    Salida Esperada (Error): El playbook fallará, pero esta vez es un error en tiempo de ejecución, no un error de sintaxis. El mensaje de error indica claramente que no se pudo encontrar el archivo de origen index.j2.

    TASK [Create a test index page from template] **********************************
    fatal: [localhost]: FAILED! => {"changed": false, "msg": "Could not find or access '/home/labex/project/ansible_troubleshooting/index.j2' on the Ansible Controller."}

    Esto sucede porque el parámetro src en su playbook apunta a index.j2, pero el archivo que creó se llama index.html.j2.

    Solución: Abra webserver.yml una última vez y corrija el nombre del archivo.

    nano webserver.yml

    Modifique el parámetro src en la tarea Create a test index page from template:

    ## ... (resto del archivo)
    - name: Create a test index page from template
      ansible.builtin.template:
        ## FIX: Correct template source filename
        src: index.html.j2
        dest: /var/www/html/index.html
    ## ... (resto del archivo)

    Guarde y salga del editor.

  5. Ejecutar el Playbook Exitosamente

    Ejecute el playbook nuevamente. Ahora debería completar todas las tareas con éxito.

    ansible-playbook webserver.yml

    Salida Esperada (Éxito):

    PLAY [Configure Web Server] ****************************************************
    
    TASK [Gathering Facts] *********************************************************
    ok: [localhost]
    
    TASK [Install httpd package] ***************************************************
    changed: [localhost]
    
    TASK [Create a test index page from template] **********************************
    changed: [localhost]
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Usar Modo de Verificación para Solucionar Errores de Servicio en Hosts Gestionados

En este paso, aprenderá a usar una de las características de solución de problemas más potentes de Ansible: el Modo de Verificación (Check Mode). El modo de verificación (activado con la bandera --check) le permite ejecutar un playbook para ver qué cambios se harían, sin modificar realmente nada en el sistema. Esto es increíblemente útil para probar de forma segura los playbooks y diagnosticar problemas, como nombres de servicios incorrectos, antes de que causen problemas reales.

  1. Crear un Playbook para Gestionar un Servicio

    Ahora creará un nuevo playbook, service.yml, diseñado para asegurar que el servicio del servidor web httpd esté en ejecución. Sin embargo, utilizará intencionadamente un nombre de servicio incorrecto para simular un error común.

    Use nano para crear el archivo service.yml en su directorio ~/project/ansible_troubleshooting.

    nano service.yml

    Copie y pegue el siguiente contenido. Tenga en cuenta que el nombre del servicio está configurado como apache2, que es un nombre común para el servidor web Apache en otras distribuciones de Linux, pero es incorrecto para RHEL.

    ---
    - name: Manage Web Server Service
      hosts: localhost
      become: true
      tasks:
        - name: Ensure web server service is started
          ansible.builtin.service:
            ## ERROR: Incorrect service name for RHEL
            name: apache2
            state: started
            enabled: true

    Guarde el archivo y salga de nano (Ctrl+X, Y, Enter).

  2. Usar el Modo de Verificación para Identificar el Error del Servicio

    En lugar de ejecutar el playbook normalmente, ejecútelo en modo de verificación. Esto evitará que Ansible realice cambios, pero le permitirá verificar el estado del sistema e informar qué haría.

    ansible-playbook --check service.yml

    Salida Esperada (Error): El playbook fallará. El mensaje de error indicará claramente que no pudo encontrar un servicio llamado apache2. Esto le dice inmediatamente que el parámetro name en su playbook es incorrecto.

    TASK [Ensure web server service is started] ************************************
    fatal: [localhost]: FAILED! => {"changed": false, "msg": "Could not find the requested service 'apache2': host"}
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0
  3. Encontrar el Nombre Correcto del Servicio

    Para corregir el playbook, necesita encontrar el nombre correcto del servicio para el paquete httpd en RHEL. Una forma fiable de hacerlo es listar los archivos instalados por el paquete y buscar el archivo de unidad del servicio, que normalmente reside en /usr/lib/systemd/system/.

    Use el comando rpm para consultar el paquete httpd:

    rpm -ql httpd | grep systemd

    Salida Esperada: Este comando listará los archivos relacionados con systemd, incluido el archivo de servicio.

    /usr/lib/systemd/system/httpd.service
    /usr/lib/systemd/system/httpd@.service
    ...

    La salida httpd.service le indica que el nombre correcto del servicio es httpd.

  4. Corregir el Playbook y Volver a Ejecutar en Modo de Verificación

    Ahora que conoce el nombre correcto del servicio, edite el archivo service.yml.

    nano service.yml

    Cambie el name del servicio de apache2 a httpd.

    ## ... (resto del archivo)
    - name: Ensure web server service is started
      ansible.builtin.service:
        ## FIX: Correct service name for RHEL
        name: httpd
        state: started
        enabled: true

    Guarde y salga del editor. Ahora, ejecute el playbook nuevamente en modo de verificación.

    ansible-playbook --check service.yml

    Salida Esperada (Éxito en Modo de Verificación): Esta vez, el playbook debería reportar un estado changed. En modo de verificación, changed significa "se habría realizado un cambio si esta fuera una ejecución real". Indica que la lógica de su playbook es ahora correcta y Ansible ha identificado que el servicio httpd necesita iniciarse.

    TASK [Ensure web server service is started] ************************************
    changed: [localhost]
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

    Nota: En este entorno de laboratorio específico basado en contenedores, no se está ejecutando un sistema de inicio systemd completo. Si bien el modo de verificación funciona correctamente, una ejecución normal del módulo ansible.builtin.service aún podría encontrar problemas. La lección clave aquí es usar el modo de verificación para validar la lógica de su playbook frente a la configuración del sistema.

Corregir Configuración de Firewall y Problemas de Inaccesibilidad del Host

En este paso final, abordará dos problemas críticos en tiempo de ejecución: fallos causados por configuraciones incorrectas del sistema, como el firewall, y problemas de conectividad resultantes de errores en su archivo de inventario de Ansible. Dominar estos le ayudará a resolver algunos de los obstáculos más comunes en la automatización.

Parte 1: Corregir la Configuración del Firewall

Una tarea común en la configuración de servidores es abrir puertos en el firewall. Un playbook puede fallar fácilmente si hace referencia a un servicio de firewall que no existe en el sistema de destino.

  1. Instalar y Preparar firewalld

    Primero, asegúrese de que el paquete firewalld esté instalado, ya que proporciona el servicio de gestión de firewall en RHEL.

    sudo dnf install -y firewalld

    Inicie el servicio firewalld.

    sudo systemctl start firewalld

    También necesita instalar la colección ansible.posix, que contiene el módulo firewalld utilizado en este ejercicio.

    ansible-galaxy collection install ansible.posix

    Nota: Es posible que vea una advertencia sobre la compatibilidad de la versión de Ansible, pero la colección seguirá funcionando correctamente para este ejercicio.

  2. Crear un Playbook con un Error de Firewall

    Cree un nuevo playbook llamado firewall.yml que intente habilitar el servicio http. Sin embargo, utilizará intencionadamente un nombre de servicio incorrecto, web, para provocar un error.

    nano firewall.yml

    Copie y pegue el siguiente contenido en el editor:

    ---
    - name: Configure System Firewall
      hosts: localhost
      become: true
      tasks:
        - name: Allow web traffic through firewall
          ansible.posix.firewalld:
            ## ERROR: 'web' is not a standard firewalld service
            service: web
            permanent: true
            state: enabled

    Guarde y salga de nano (Ctrl+X, Y, Enter).

  3. Ejecutar el Playbook y Diagnosticar el Fallo

    Ejecute el playbook. Fallará porque firewalld no reconoce un servicio llamado web.

    ansible-playbook firewall.yml

    Salida Esperada (Error): El mensaje de error indica claramente que web no es un servicio compatible, lo que le dirige directamente al problema.

    TASK [Allow web traffic through firewall] **************************************
    fatal: [localhost]: FAILED! => {"changed": false, "msg": "web is not a supported service. This is what I have."}
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0
  4. Encontrar el Nombre Correcto del Servicio de Firewall

    Para encontrar la lista de nombres de servicio válidos y predefinidos, puede usar la herramienta de línea de comandos firewall-cmd.

    firewall-cmd --get-services

    Salida Esperada: Verá una larga lista de servicios disponibles. Busque en la lista para encontrar el correcto para el tráfico web, que es http.

    RH-Satellite-6 ... ftp http https imaps ipp ipp-client ...
  5. Corregir el Playbook y Ejecutar Exitosamente

    Edite firewall.yml y reemplace el nombre de servicio incorrecto web por el correcto, http.

    nano firewall.yml

    La tarea corregida debería verse así:

    ## ... (resto del archivo)
    - name: Allow web traffic through firewall
      ansible.posix.firewalld:
        ## FIX: Use the correct firewalld service name
        service: http
        permanent: true
        state: enabled

    Guarde y salga. Ahora, ejecute el playbook nuevamente. Debería completarse con éxito.

    ansible-playbook firewall.yml

Parte 2: Solución de Problemas de Inalcanzabilidad de Hosts

Un error de "unreachable" (inalcanzable) significa que Ansible no puede conectarse a un host listado en su inventario. Esto a menudo es causado por un simple error tipográfico en el nombre del host.

  1. Simular un Host Inalcanzable

    Introduzca intencionadamente un error tipográfico en su archivo inventory y elimine la configuración de conexión local. Esto obligará a Ansible a intentar una conexión de red real al nombre de host mal escrito.

    nano inventory

    Cambie localhost a localhossst y elimine ansible_connection=local.

    ## ERROR: Intentional typo in hostname, no local connection
    localhossst

    Guarde y salga del editor.

  2. Modificar el Playbook para Usar Hosts del Inventario

    Primero, necesita modificar el playbook webserver.yml para usar los hosts del inventario en lugar del localhost codificado. Cuando un playbook usa hosts: localhost, Ansible lo trata como un caso especial y omite completamente el archivo de inventario.

    nano webserver.yml

    Cambie la línea hosts de localhost a all:

    ---
    - name: Configure Web Server
      hosts: all ## Changed from 'localhost' to use inventory hosts
      become: true
      ## ... rest of the playbook remains the same

    Guarde y salga del editor.

  3. Ejecutar el Playbook para Provocar el Error

    Ahora intente ejecutar el playbook modificado. Fallará porque el inventario contiene el error tipográfico localhossst.

    ansible-playbook webserver.yml

    Salida Esperada (Error): Ansible fallará e informará que el host está UNREACHABLE. El mensaje de error indica que el nombre del host no pudo ser resuelto.

    PLAY [Configure Web Server] ****************************************************
    
    TASK [Gathering Facts] **********************************************************
    fatal: [localhossst]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname localhossst: Name or service not known", "unreachable": true}
    
    PLAY RECAP *********************************************************************
    localhossst                : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0
  4. Corregir el Archivo de Inventario

    El estado UNREACHABLE es su indicación para verificar los nombres de host y la conectividad de red. En este caso, la solución es corregir el error tipográfico en el archivo inventory.

    nano inventory

    Cambie localhossst de nuevo a localhost.

    ## FIX: Corrected hostname
    localhost ansible_connection=local

    Guarde y salga. Volver a ejecutar ansible-playbook webserver.yml ahora tendrá éxito.

  5. Opcional: Restaurar el Playbook Original

    Si desea restaurar el playbook para usar hosts: localhost para ejercicios futuros, puede cambiarlo de nuevo:

    nano webserver.yml

    Cambie la línea hosts de nuevo a localhost:

    ---
    - name: Configure Web Server
      hosts: localhost ## Restored to original
      become: true
      ## ... rest of the playbook

    Guarde y salga. Este paso demuestra la diferencia entre usar localhost codificado (que omite el inventario) y usar hosts definidos en el inventario.

Resumen

En este laboratorio, preparó un entorno Red Hat Enterprise Linux para Ansible instalando ansible-core y configurando el registro, y luego procedió a solucionar una variedad de problemas comunes. Aprendió a diagnosticar y resolver errores dentro de los playbooks, como corregir sintaxis YAML incorrecta, indentación, comillas Jinja2 y rutas de plantillas inválidas. Estas habilidades son fundamentales para escribir código de automatización válido y confiable.

Además, abordó problemas relacionados con el entorno del host gestionado. Utilizó el modo de verificación de Ansible para realizar de forma segura una ejecución de prueba e identificar posibles fallos de servicio en un nodo de destino sin realizar cambios reales. El laboratorio concluyó abordando problemas de conectividad, donde corrigió las configuraciones del firewall para resolver la inalcanzabilidad del host, proporcionando un enfoque integral para la depuración desde el nodo de control hasta el host gestionado.