TP 5 : Déployer une config Apache templatisée avec handler

Objectif

Générer un fichier de configuration Apache à partir d’un template Jinja2, activer le VirtualHost, et vérifier qu’un handler ne redémarre le service que lorsque la configuration change réellement.

Environnement disponible

Vous disposez de :

  • 1 serveur de contrôle avec Ansible installé
  • 1 client Debian : nrd-web1

Informations de connexion

  • Utilisateur : root
  • Mot de passe : formation

Ce que vous allez réaliser

  1. Créer un template Jinja2 pour un VirtualHost Apache
  2. Écrire un playbook qui installe Apache, déploie le template, active le site, et notifie un handler de redémarrage
  3. Exécuter le playbook une première fois et observer le changed + le redémarrage
  4. Rejouer le playbook sans rien modifier : vérifier que le handler n’est pas déclenché
  5. Modifier une variable (le nom de domaine), rejouer, et observer que le handler se déclenche cette fois

Conseils

  • N’oubliez pas a2ensite pour activer le site — un command classique fera l’affaire ici, avec creates pour rester idempotent (on verra creates plus en détail plus tard, mais retenez que ce paramètre permet à une commande de vérifier elle-même si elle a déjà été exécutée).
  • Regardez bien les logs : RUNNING HANDLER n’apparaît que si une tâche notifiante a produit un changed.

🧪 Lab · membre · 15 min

🧪 Lancer le lab
Voir la solutionMasquer la solution

Commencer comme pour les autres TP à identifier le serveur Web et installer Ansible.

Créer le dossier de travail et le template

mkdir -p ansible/templates && cd ansible
nano templates/nordika.conf.j2
# templates/nordika.conf.j2
<VirtualHost *:{{ apache_port }}>
    ServerName {{ server_domain }}
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/{{ server_domain }}-error.log
    CustomLog ${APACHE_LOG_DIR}/{{ server_domain }}-access.log combined
</VirtualHost>

Créer l’inventaire

nano inventaire.yaml
# inventaire.yaml
all:
  hosts:
    nrd-web1:
      ansible_host: <IP>

Écrire le playbook

nano playbook_vhost.yaml
# playbook_vhost.yaml
---
- name: Déployer un VirtualHost templatisé
  hosts: nrd-web1
  become: yes

  vars:
    apache_port: 80
    server_domain: "nordika.local"

  tasks:
    - name: Installer Apache
      ansible.builtin.apt:
        name: apache2
        state: present
        update_cache: yes

    - name: Déployer le VirtualHost depuis le template
      ansible.builtin.template:
        src: templates/nordika.conf.j2
        dest: /etc/apache2/sites-available/nordika.conf
      notify: Redémarrer Apache

    - name: Activer le site
      ansible.builtin.command: a2ensite nordika.conf
      args:
        creates: /etc/apache2/sites-enabled/nordika.conf
      notify: Redémarrer Apache

  handlers:
    - name: Redémarrer Apache
      ansible.builtin.service:
        name: apache2
        state: restarted

Première exécution

ansible-playbook playbook_vhost.yaml -i inventaire.yaml -v

ous devriez voir changed sur l’installation, le template, l’activation, puis RUNNING HANDLER [Redémarrer Apache] à la fin.

Rejouer sans rien modifier

ansible-playbook playbook_vhost.yaml -i inventaire.yaml -v

changed=0 partout, et surtout : aucune ligne RUNNING HANDLER dans les logs. Rien n’a changé, donc rien n’a notifié le handler, donc Apache n’a pas été redémarré inutilement.

Modifier le domaine et rejouer

nano playbook_vhost.yaml
# Changer server_domain en "nordika-v2.local"
ansible-playbook playbook_vhost.yaml -i inventaire.yaml -v

Cette fois, la tâche de template affiche changed (le contenu du fichier a changé), et RUNNING HANDLER [Redémarrer Apache] réapparaît dans les logs : le handler a bien été notifié uniquement parce qu’un changement réel a eu lieu.