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.
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.
Instalar Ansible
Primero, necesita instalar Ansible. El motor de automatización principal es proporcionado por el paquete
ansible-core. Utilice el gestor de paquetesdnfconsudopara instalarlo. La bandera-yresponde automáticamente "sí" a cualquier solicitud de confirmación.sudo dnf install -y ansible-coreDeberí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!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_troubleshootingdentro de su carpeta de proyecto principal y naveguemos hacia él.mkdir -p ~/project/ansible_troubleshooting cd ~/project/ansible_troubleshootingA partir de ahora, todos los comandos en este laboratorio se ejecutarán desde dentro del directorio
~/project/ansible_troubleshooting.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
inventoryy agreguelocalhosta él. La parteansible_connection=localle dice a Ansible que ejecute comandos directamente en el nodo de control (su VM) sin usar SSH.echo "localhost ansible_connection=local" > inventoryPuede verificar el contenido del archivo usando el comando
cat:cat inventorySalida Esperada:
localhost ansible_connection=localConfigurar el Registro de Ansible
Un archivo
ansible.cfgle 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
nanopara crear el archivoansible.cfg.nano ansible.cfgAhora, copie y pegue el siguiente contenido en el editor
nano. Esta configuración le dice a Ansible que use el archivoinventoryen el directorio actual y que escriba toda la salida de registro en un archivo llamadoansible.log.[defaults] inventory = /home/labex/project/ansible_troubleshooting/inventory log_path = /home/labex/project/ansible_troubleshooting/ansible.logPara guardar el archivo en
nano, presioneCtrl+X, luegoYpara confirmar, y finalmenteEnterpara 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.
Crear un Playbook con Errores Intencionados
Primero, creará un nuevo archivo de playbook llamado
webserver.ymlen su directorio de proyecto (~/project/ansible_troubleshooting). Este archivo contiene errores intencionados que corregirá.Use
nanopara crear el archivo:nano webserver.ymlCopie 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.htmlGuarde el archivo y salga de
nanopresionandoCtrl+X, luegoY, yEnter.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.ymlSalida Esperada (Error): Verá un error porque el valor de
package_commentcontiene 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 ^ hereSolución: Para solucionar esto, debe encerrar la cadena entre comillas dobles. Abra el archivo nuevamente con
nano:nano webserver.ymlModifique la línea debajo de
varspara 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.
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.ymlSalida 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 ^ hereEste 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.ymlElimine 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.htmlGuarde y salga del editor.
Verificar el Playbook Corregido
Finalmente, ejecute la verificación de sintaxis una última vez.
ansible-playbook --syntax-check webserver.ymlEsta 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.
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
nanopara crear un archivo llamadoindex.html.j2en su directorio de proyecto (~/project/ansible_troubleshooting). La extensión.j2es una convención común para las plantillas Jinja2.nano index.html.j2Copie 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).Modificar el Playbook para Usar la Plantilla e Introducir Errores
Ahora, modifique su playbook
webserver.ymlpara usar el móduloansible.builtin.template. También introducirá dos nuevos errores: una variable Jinja2 sin comillas y una ruta de plantilla incorrecta.Abra
webserver.ymlconnano:nano webserver.ymlReemplace todo el contenido del archivo con lo siguiente. La directiva
become: truele dice a Ansible que ejecute tareas con privilegios administrativos (usandosudo), 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.htmlGuarde y salga del editor.
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.ymlSalida 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 }} ^ hereSolución: Abra
webserver.ymly encierre la variable Jinja2 entre comillas dobles.nano webserver.ymlModifique 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.
Identificar y Corregir el Error de Ruta de Plantilla
Ahora que la sintaxis es correcta, intente ejecutar el playbook.
ansible-playbook webserver.ymlSalida 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
srcen su playbook apunta aindex.j2, pero el archivo que creó se llamaindex.html.j2.Solución: Abra
webserver.ymluna última vez y corrija el nombre del archivo.nano webserver.ymlModifique el parámetro
srcen la tareaCreate 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.
Ejecutar el Playbook Exitosamente
Ejecute el playbook nuevamente. Ahora debería completar todas las tareas con éxito.
ansible-playbook webserver.ymlSalida 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.
Crear un Playbook para Gestionar un Servicio
Ahora creará un nuevo playbook,
service.yml, diseñado para asegurar que el servicio del servidor webhttpdesté en ejecución. Sin embargo, utilizará intencionadamente un nombre de servicio incorrecto para simular un error común.Use
nanopara crear el archivoservice.ymlen su directorio~/project/ansible_troubleshooting.nano service.ymlCopie 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: trueGuarde el archivo y salga de
nano(Ctrl+X,Y,Enter).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.ymlSalida 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ámetronameen 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=0Encontrar el Nombre Correcto del Servicio
Para corregir el playbook, necesita encontrar el nombre correcto del servicio para el paquete
httpden 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
rpmpara consultar el paquetehttpd:rpm -ql httpd | grep systemdSalida 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.servicele indica que el nombre correcto del servicio eshttpd.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.ymlCambie el
namedel servicio deapache2ahttpd.## ... (resto del archivo) - name: Ensure web server service is started ansible.builtin.service: ## FIX: Correct service name for RHEL name: httpd state: started enabled: trueGuarde y salga del editor. Ahora, ejecute el playbook nuevamente en modo de verificación.
ansible-playbook --check service.ymlSalida Esperada (Éxito en Modo de Verificación): Esta vez, el playbook debería reportar un estado
changed. En modo de verificación,changedsignifica "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 serviciohttpdnecesita 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=0Nota: En este entorno de laboratorio específico basado en contenedores, no se está ejecutando un sistema de inicio
systemdcompleto. Si bien el modo de verificación funciona correctamente, una ejecución normal del móduloansible.builtin.serviceaú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.
Instalar y Preparar
firewalldPrimero, asegúrese de que el paquete
firewalldesté instalado, ya que proporciona el servicio de gestión de firewall en RHEL.sudo dnf install -y firewalldInicie el servicio
firewalld.sudo systemctl start firewalldTambién necesita instalar la colección
ansible.posix, que contiene el módulofirewalldutilizado en este ejercicio.ansible-galaxy collection install ansible.posixNota: 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.
Crear un Playbook con un Error de Firewall
Cree un nuevo playbook llamado
firewall.ymlque intente habilitar el serviciohttp. Sin embargo, utilizará intencionadamente un nombre de servicio incorrecto,web, para provocar un error.nano firewall.ymlCopie 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: enabledGuarde y salga de
nano(Ctrl+X,Y,Enter).Ejecutar el Playbook y Diagnosticar el Fallo
Ejecute el playbook. Fallará porque
firewalldno reconoce un servicio llamadoweb.ansible-playbook firewall.ymlSalida Esperada (Error): El mensaje de error indica claramente que
webno 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=0Encontrar 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-servicesSalida 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 ...Corregir el Playbook y Ejecutar Exitosamente
Edite
firewall.ymly reemplace el nombre de servicio incorrectowebpor el correcto,http.nano firewall.ymlLa 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: enabledGuarde 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.
Simular un Host Inalcanzable
Introduzca intencionadamente un error tipográfico en su archivo
inventoryy 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 inventoryCambie
localhostalocalhosssty elimineansible_connection=local.## ERROR: Intentional typo in hostname, no local connection localhossstGuarde y salga del editor.
Modificar el Playbook para Usar Hosts del Inventario
Primero, necesita modificar el playbook
webserver.ymlpara usar los hosts del inventario en lugar dellocalhostcodificado. Cuando un playbook usahosts: localhost, Ansible lo trata como un caso especial y omite completamente el archivo de inventario.nano webserver.ymlCambie la línea
hostsdelocalhostaall:--- - name: Configure Web Server hosts: all ## Changed from 'localhost' to use inventory hosts become: true ## ... rest of the playbook remains the sameGuarde y salga del editor.
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.ymlSalida 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=0Corregir el Archivo de Inventario
El estado
UNREACHABLEes 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 archivoinventory.nano inventoryCambie
localhossstde nuevo alocalhost.## FIX: Corrected hostname localhost ansible_connection=localGuarde y salga. Volver a ejecutar
ansible-playbook webserver.ymlahora tendrá éxito.Opcional: Restaurar el Playbook Original
Si desea restaurar el playbook para usar
hosts: localhostpara ejercicios futuros, puede cambiarlo de nuevo:nano webserver.ymlCambie la línea
hostsde nuevo alocalhost:--- - name: Configure Web Server hosts: localhost ## Restored to original become: true ## ... rest of the playbookGuarde y salga. Este paso demuestra la diferencia entre usar
localhostcodificado (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.


