TP 3 : Écrire et exécuter votre premier playbook

Objectif

Écrire un playbook complet de A à Z (et non plus une commande ad-hoc), l’exécuter, observer son résultat, puis le rejouer pour valider l’idempotence.

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. Configurer l’accès SSH par clé (comme dans le lab découverte)
  2. Créer l’inventaire
  3. Écrire un playbook qui installe Apache, démarre le service, et vérifie que le port 80 répond
  4. Exécuter le playbook en mode --check --diff d’abord
  5. Exécuter le playbook pour de vrai
  6. Le rejouer une seconde fois pour observer l’idempotence

Conseils

  • Utilisez les noms complets des modules (ansible.builtin.xxx), c’est le bon réflexe à prendre dès ce premier playbook.
  • Le module uri permet de vérifier qu’une URL répond correctement — pratique pour valider qu’Apache tourne réellement, pas juste que le service est “démarré” côté systemd.
  • Regardez bien le PLAY RECAP à chaque exécution : changed doit tomber à 0 à la deuxième tentative.

🧪 Lab · membre

🧪 Démarrer — 30 min
Voir 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 .ssh/authorized_keys, coller la clé publique
nano .ssh/authorized_keys

Créer le dossier de travail et l’inventaire

mkdir ansible && cd ansible
nano inventaire.yaml
# inventaire.yaml
all:
  hosts:
    nrd-web1:
      ansible_host: <IP>

Écrire le playbook

nano playbook_apache.yaml
# playbook_apache.yaml
---
- name: Installer et démarrer Apache sur nrd-web1
  hosts: nrd-web1
  become: yes

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

    - name: Démarrer et activer Apache
      ansible.builtin.service:
        name: apache2
        state: started
        enabled: yes

    - name: Vérifier que le serveur web répond
      ansible.builtin.uri:
        url: http://localhost
        status_code: 200

Exécuter en mode simulation d’abord

ansible-playbook playbook_apache.yaml -i inventaire.yaml --check --diff

Exécuter pour de vrai

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

Vous devriez voir changed sur les tâches d’installation et de démarrage, et ok sur la vérification du port 80.

Rejouer le playbook une seconde fois

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

Cette fois, le PLAY RECAP doit afficher changed=0 : Apache était déjà installé et démarré, Ansible n’a rien eu besoin de refaire. Idempotence confirmée.