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.


