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
- Créer un template Jinja2 pour un VirtualHost Apache
- Écrire un playbook qui installe Apache, déploie le template, active le site, et notifie un handler de redémarrage
- Exécuter le playbook une première fois et observer le
changed+ le redémarrage - Rejouer le playbook sans rien modifier : vérifier que le handler n’est pas déclenché
- Modifier une variable (le nom de domaine), rejouer, et observer que le handler se déclenche cette fois
Conseils
- N’oubliez pas
a2ensitepour activer le site — uncommandclassique fera l’affaire ici, aveccreatespour rester idempotent (on verracreatesplus 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 HANDLERn’apparaît que si une tâche notifiante a produit unchanged.
🧪 Lab · membre · 15 min
🧪 Lancer le labVoir 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.