Automatizar paquetes, servicios y firewalls

AnsibleBeginner
Practicar Ahora

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.