Objectif
Générer la structure standard d’un rôle avec ansible-galaxy init, y migrer les tâches, le handler et le template déjà vus, puis valider que le comportement reste identique une fois le playbook réduit à un simple appel de rôle.
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
⚠️ Les conteneurs de ce lab repartent de zéro à chaque session (aucune configuration précédente n’est conservée, y compris vos éventuelles clés SSH). Les premières étapes ci-dessous refont donc systématiquement tout le bootstrap.
Ce que vous allez réaliser
- Générer une clé SSH et la déployer sur le client
- Localiser l’IP du client et créer l’inventaire
- Générer la structure du rôle
apacheavecansible-galaxy init - Migrer les tâches dans
tasks/main.yml - Migrer le handler dans
handlers/main.yml - Migrer le template dans
templates/ - Définir
apache_portetserver_domainendefaults - Écrire un playbook minimaliste qui appelle le rôle
- Vérifier que le comportement (installation + idempotence) reste identique
- Surcharger
server_domainsans toucher au rôle
Conseils
- Dans un rôle, les chemins vers
templates/sont implicites :src: nordika.conf.j2, sans le préfixetemplates/. - Testez d’abord avec les valeurs par défaut, puis surchargez
server_domainpour confirmer que la personnalisation fonctionne sans toucher au rôle.
🧪 Lab · membre
🧪 Démarrer — 30 minVoir la solutionMasquer la solution
Générer une clé SSH et la déployer sur le client
ssh-keygen -t ed25519 -C "ansible@control-serveur"
ssh root@nrd-web1
# Dans le dossier .ssh, ouvrir le fichier authorized_keys
nano .ssh/authorized_keys
# Coller la clé publique, sauvegarder, quitter
Localiser l’IP du client et créer le dossier de travail
ping nrd-web1
apt update
apt install ansible
mkdir ansible && cd ansible
nano inventaire.yaml
# inventaire.yaml
all:
hosts:
nrd-web1:
ansible_host: <IP>
Vérifiez le contact radio avant d’aller plus loin :
ansible all -i inventaire.yaml -m ping
Générer la structure du rôle
mkdir roles && cd roles
ansible-galaxy init apache
cd ..
Écrire les tâches du rôle
nano roles/apache/tasks/main.yml
# roles/apache/tasks/main.yml
---
- 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: 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
Écrire le handler
nano roles/apache/handlers/main.yml
# roles/apache/handlers/main.yml
---
- name: Redémarrer Apache
ansible.builtin.service:
name: apache2
state: restarted
Créer le template
nano roles/apache/templates/nordika.conf.j2
# roles/apache/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>
Définir les valeurs par défaut
nano roles/apache/defaults/main.yml
# roles/apache/defaults/main.yml
---
apache_port: 80
server_domain: "nordika.local"
Écrire le playbook minimaliste
nano playbook_apache_role.yaml
# playbook_apache_role.yaml
---
- name: Déployer l'infrastructure web de Nordika
hosts: nrd-web1
become: yes
roles:
- apache
Exécuter avec les valeurs par défaut
ansible-playbook playbook_apache_role.yaml -i inventaire.yaml -v
Rejouer pour confirmer l’idempotence
ansible-playbook playbook_apache_role.yaml -i inventaire.yaml -v
changed=0 partout : le rôle se comporte exactement comme prévu.
Surcharger server_domain sans toucher au rôle
# playbook_apache_role.yaml (modifié)
---
- name: Déployer l'infrastructure web de Nordika
hosts: nrd-web1
become: yes
roles:
- role: apache
vars:
server_domain: "test-role.nordika.local"
ansible-playbook playbook_apache_role.yaml -i inventaire.yaml -v
Le template se régénère avec le nouveau domaine (changed sur la tâche template + redémarrage via le handler), sans qu’une seule ligne du rôle apache ait été modifiée.