Introducción
La automatización real en RHEL suele combinar la instalación de paquetes, la gestión de servicios y las reglas de firewall en un único playbook convergente.
En este laboratorio, instalará httpd, se asegurará de que esté habilitado y en ejecución, permitirá el tráfico HTTP a través de firewalld y comprobará que el playbook sea idempotente.
Crear un proyecto de automatización de servicios en RHEL
En este paso, creará un proyecto de un solo host para automatizar el estado de los paquetes, servicios y el firewall en la máquina virtual RHEL 10.
cd /home/labex/project
mkdir -p rhce-ansible/{inventory,playbooks,reports}
cd rhce-ansible
cat > ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory/hosts
host_key_checking = False
retry_files_enabled = False
EOF
cat > inventory/hosts <<'EOF'
[web]
host ansible_connection=local
EOF
El playbook realizará cambios reales en el sistema RHEL local, por lo que este laboratorio utiliza un alias de host local. Esto le permite practicar con los módulos de paquetes, servicios y firewall de Ansible mediante el direccionamiento de inventario estándar.
Definir el estado deseado del servicio web
En este paso, almacenará el estado deseado en variables. Mantener los nombres de los paquetes, servicios y firewalls en variables facilita el ajuste del playbook. Antes de ejecutar los comandos en este paso, regrese al directorio del proyecto de Ansible. Esto mantiene la estabilidad de los comandos incluso cuando LabEx ejecuta cada paso por separado.
cd /home/labex/project/rhce-ansible
mkdir -p inventory/group_vars
cat > inventory/group_vars/web.yml <<'EOF'
web_package: httpd
web_service: httpd
firewall_service: http
EOF
Mantener estos nombres en variables hace que el playbook se lea como una política: instalar este paquete, gestionar este servicio y permitir este servicio de firewalld. Si más adelante automatiza un servicio diferente, la estructura de las tareas puede permanecer igual.
cat inventory/group_vars/web.yml
Escribir el playbook para paquetes, servicios y firewall
En este paso, escribirá un playbook con escalada de privilegios. Utiliza package, service y ansible.posix.firewalld para converger la pila web.
Antes de ejecutar los comandos en este paso, regrese al directorio del proyecto de Ansible.
cd /home/labex/project/rhce-ansible
cat > playbooks/web-stack.yml <<'EOF'
---
- name: Configure a basic web stack
hosts: web
become: true
gather_facts: false
tasks:
- name: Install web package
ansible.builtin.package:
name: "{{ web_package }}"
state: present
- name: Ensure web service is enabled and running
ansible.builtin.service:
name: "{{ web_service }}"
state: started
enabled: true
- name: Allow web traffic through the firewall
ansible.posix.firewalld:
service: "{{ firewall_service }}"
permanent: true
immediate: true
state: enabled
EOF
Las tres tareas convergen el estado relacionado en RHEL. package asegura que el RPM esté instalado, service asegura que la unidad de systemd esté en ejecución y habilitada, y ansible.posix.firewalld abre el servicio HTTP tanto de forma inmediata como persistente.
ansible-playbook playbooks/web-stack.yml --syntax-check
Ejecutar el playbook de la pila web
En este paso, ejecutará el playbook. La instalación de paquetes puede tardar más que en los laboratorios basados solo en archivos, ya que utiliza el gestor de paquetes de RHEL.
cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/web-stack.yml | tee reports/web-stack-first.txt
La primera ejecución puede tardar más mientras dnf instala httpd. Lea el resumen una vez que termine y luego utilice las herramientas de RHEL a continuación para confirmar el estado real del sistema, no solo la salida del playbook.
rpm -q httpd
rpm -q debería imprimir el nombre y la versión del paquete httpd instalado.
systemctl is-active httpd
El servicio debería informar active, lo que confirma que el servicio web se está ejecutando en este momento.
sudo firewall-cmd --list-services | tr " " "
" | grep -Fx http
Esto verifica los servicios activos de firewalld y busca exactamente http. Abrir el firewall es un estado independiente de la instalación y el inicio del servicio.
Ejecutar de nuevo para confirmar la idempotencia
En este paso, ejecutará el mismo playbook nuevamente. Una vez que el paquete, el servicio y el firewall ya sean correctos, el resumen debería informar que no hubo cambios.
cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/web-stack.yml | tee reports/web-stack-second.txt
La segunda ejecución debería ser más rápida y no debería necesitar reparar nada. Esta es la comprobación de idempotencia para el flujo de trabajo combinado de paquetes, servicios y firewall.
grep -E 'host.*changed=0' reports/web-stack-second.txt
Resumen
Ha instalado un paquete, gestionado un servicio, abierto el firewall, verificado el estado del sistema RHEL y demostrado que el playbook converge en una segunda ejecución.


