Automatiser les paquets, les services et les pare-feux

AnsibleBeginner
Pratiquer maintenant

Introduction

L'automatisation réelle sous RHEL combine souvent l'installation de paquets, la gestion de services et les règles de pare-feu au sein d'un même playbook convergent.

Dans ce laboratoire, vous allez installer httpd, vous assurer qu'il est activé et en cours d'exécution, autoriser le trafic HTTP via firewalld et démontrer l'idempotence du playbook.

Créer un projet d'automatisation de service RHEL

Dans cette étape, vous allez créer un projet sur un seul hôte pour automatiser l'état des paquets, des services et du pare-feu sur la machine virtuelle 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

Le playbook effectuant des modifications réelles sur le système RHEL local, ce laboratoire utilise un alias d'hôte local. Cela vous permet tout de même de pratiquer les modules Ansible pour les paquets, les services et le pare-feu via un ciblage d'inventaire standard.

Définir l'état souhaité du service Web

Dans cette étape, vous allez stocker l'état souhaité dans des variables. Conserver les noms des paquets, des services et du pare-feu dans des variables rend le playbook plus facile à ajuster. Avant d'exécuter les commandes de cette étape, retournez dans le répertoire du projet Ansible. Cela garantit la stabilité des commandes, même si LabEx exécute chaque étape séparément.

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

Le fait de conserver ces noms dans des variables permet de lire le playbook comme une politique : installer ce paquet, gérer ce service et autoriser ce service firewalld. Si vous automatisez un autre service ultérieurement, la structure des tâches pourra rester identique.

cat inventory/group_vars/web.yml

Rédiger le playbook pour les paquets, les services et le pare-feu

Dans cette étape, vous allez rédiger un playbook avec élévation de privilèges. Il utilise package, service et ansible.posix.firewalld pour faire converger la pile web. Avant d'exécuter les commandes de cette étape, retournez dans le répertoire du projet 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

Les trois tâches font converger l'état du système RHEL. package garantit que le paquet RPM est installé, service assure que l'unité systemd est en cours d'exécution et activée, et ansible.posix.firewalld ouvre le service HTTP de manière immédiate et permanente.

ansible-playbook playbooks/web-stack.yml --syntax-check

Exécuter le playbook de la pile Web

Dans cette étape, vous allez exécuter le playbook. L'installation de paquets peut prendre plus de temps que dans les laboratoires basés uniquement sur des fichiers, car elle utilise le gestionnaire de paquets RHEL.

cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/web-stack.yml | tee reports/web-stack-first.txt

La première exécution peut être plus longue pendant que dnf installe httpd. Lisez le récapitulatif une fois terminé, puis utilisez les outils RHEL ci-dessous pour confirmer l'état réel du système, et pas seulement la sortie du playbook.

rpm -q httpd

rpm -q devrait afficher le nom et la version du paquet httpd installé.

systemctl is-active httpd

Le service devrait indiquer active, ce qui confirme que le service web est actuellement en cours d'exécution.

sudo firewall-cmd --list-services | tr " " "
" | grep -Fx http

Cette commande vérifie les services firewalld actifs et recherche exactement http. L'ouverture du pare-feu est un état distinct de l'installation et du démarrage du service.

Exécuter à nouveau pour confirmer l'idempotence

Dans cette étape, vous allez exécuter le même playbook une seconde fois. Une fois que le paquet, le service et le pare-feu sont correctement configurés, le récapitulatif ne devrait signaler aucun changement.

cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/web-stack.yml | tee reports/web-stack-second.txt

La seconde exécution devrait être plus rapide et ne nécessiter aucune réparation. C'est le test d'idempotence pour le flux de travail combinant paquets, services et pare-feu.

grep -E 'host.*changed=0' reports/web-stack-second.txt

Résumé

Vous avez installé un paquet, géré un service, ouvert le pare-feu, vérifié l'état du système RHEL et prouvé que le playbook converge lors d'une seconde exécution.