DevOpsFacile
AccueilParcours de formationCertificationsModulesCheat SheetÀ Propos
DevOpsFacile

Une plateforme d'apprentissage complète pour maîtriser les pratiques DevOps modernes, du débutant à l'expert.

contact@devopsfacile.fr

Formation

  • Parcours de formation
  • Modules

Informations

  • À Propos
  • Conditions d'utilisation
  • Confidentialité
  • Mentions légales

© 2026 DevOps Facile. Tous droits réservés.

Fait avec pour la communauté DevOps

ModulesAnsible - Débutant : automatiser la configuration de tes serveurs

Module

Découvrez Ansible : inventaires, playbooks et modules pour automatiser la configuration de serveurs sans écrire une ligne de code complexe.

  • 1h30
  • Débutant
  • 6 exercices
Voir les exercices

Formation 100 % Linux

Tous les modules nécessitent un environnement Linux. Si vous êtes sur Windows, installez d'abord WSL (Windows Subsystem for Linux) avant de continuer.

Ansible - Débutant : automatiser la configuration de tes serveurs

🎯 Objectifs

  • Comprendre pourquoi Ansible existe et quel problème il résout
  • Installer Ansible et vérifier l'installation
  • Créer un inventaire de machines
  • Écrire et exécuter un premier playbook
  • Utiliser les modules Ansible les plus courants

📋 Prérequis

  • Linux Débutant - ligne de commande, fichiers, SSH
  • Un terminal avec Python 3 installé
  • Accès SSH à au moins une machine (locale ou distante)

🤔 Pourquoi Ansible ?

Imagine que tu dois configurer 10 serveurs identiques : installer Nginx, créer un utilisateur, copier un fichier de configuration. Tu pourrais te connecter manuellement à chacun et taper les mêmes commandes. Ça prend du temps et tu risques de faire une erreur sur l'un d'eux.

Le problème : configurer plusieurs serveurs à la main, c'est long, répétitif et source d'erreurs.

La solution Ansible : tu écris ta recette une seule fois, et Ansible l'applique sur autant de machines que tu veux, de façon identique.

💡 Ansible traduit des instructions lisibles en français (ou anglais) en commandes SSH. Pas besoin d'apprendre un nouveau langage de programmation.


🍳 Ansible, c'est quoi exactement ?

L'analogie : Ansible, c'est comme une recette de cuisine.

  • Tu listes tes ingrédients (les serveurs à configurer) → c'est l'inventaire.
  • Tu décris les étapes à suivre → c'est le playbook.
  • Chaque étape fait appel à un ustensile de cuisine spécialisé → c'est un module.

La cuisine se fait à distance : tu donnes la recette depuis ton ordinateur, et Ansible la suit sur chaque serveur via SSH. Aucun agent n'est installé sur les serveurs cibles - c'est l'un des grands avantages d'Ansible.


🏗️ Architecture Ansible

Ton ordinateur (Control Node)
       │
       │  SSH
       ▼
  Serveur 1 (Managed Node)
  Serveur 2 (Managed Node)
  Serveur 3 (Managed Node)
TermeDéfinition
Control nodeTa machine depuis laquelle tu lances Ansible
Managed nodeLes serveurs que tu veux configurer
InventaireLa liste de tes managed nodes
PlaybookLe fichier YAML qui décrit les tâches à exécuter
TaskUne action unique (installer un paquet, copier un fichier...)
ModuleL'outil Ansible qui exécute une tâche précise
PlayUn groupe de tâches appliqué à un groupe de serveurs

🔧 Installation

Linux (Ubuntu/Debian)

Référence officielle : docs.ansible.com/installation_guide

bash
# Mettre à jour les paquets
sudo apt update

# Installer Ansible
sudo apt install ansible -y

# Vérifier l'installation
ansible --version

macOS

bash
# Avec Homebrew
brew install ansible

# Vérifier
ansible --version

Vérification

bash
ansible --version
# ansible [core 2.16.x]
#   python version = 3.x.x
#   jinja version = 3.x.x

✅ Si tu vois la version d'Ansible et de Python, tu es prêt.


📋 L'Inventaire

Qu'est-ce que c'est ?

L'inventaire est un fichier qui liste tes serveurs. Sans inventaire, Ansible ne sait pas où aller.

Format INI (le plus simple)

ini
# inventaire.ini

# Un serveur seul
serveur1 ansible_host=192.168.1.10

# Un groupe de serveurs
[webservers]
web1 ansible_host=192.168.1.11
web2 ansible_host=192.168.1.12

[databases]
db1 ansible_host=192.168.1.20

Variables dans l'inventaire

Tu peux ajouter des variables directement dans le fichier :

ini
[webservers]
web1 ansible_host=192.168.1.11 ansible_user=ubuntu ansible_port=22
web2 ansible_host=192.168.1.12 ansible_user=ubuntu ansible_port=22

[webservers:vars]
ansible_user=ubuntu
ansible_ssh_private_key_file=~/.ssh/id_ed25519
VariableRôle
ansible_hostAdresse IP ou nom DNS du serveur
ansible_userUtilisateur SSH
ansible_portPort SSH (défaut : 22)
ansible_ssh_private_key_fileClé SSH privée à utiliser

Tester la connectivité

bash
# Ping sur tous les serveurs de l'inventaire
ansible all -i inventaire.ini -m ping

# Ping sur un groupe
ansible webservers -i inventaire.ini -m ping

💡 Le module ping Ansible ne fait pas un vrai ping réseau - il vérifie que la connexion SSH fonctionne et que Python est disponible sur la cible.


📖 Le Playbook

Structure de base

Un playbook est un fichier YAML. Il contient un ou plusieurs plays, chaque play s'applique à un groupe de serveurs et contient des tasks.

yaml
---
# premier-playbook.yml

- name: Configurer les serveurs web          # Nom du play
  hosts: webservers                           # Groupe de serveurs cibles
  become: true                                # Utiliser sudo pour les tâches

  tasks:
    - name: Installer Nginx                   # Nom de la tâche
      ansible.builtin.apt:                    # Module utilisé
        name: nginx                           # Paramètre du module
        state: present                        # État désiré

    - name: Démarrer et activer Nginx
      ansible.builtin.service:
        name: nginx
        state: started
        enabled: true

Lancer un playbook

bash
# Syntaxe de base
ansible-playbook -i inventaire.ini premier-playbook.yml

# Tester sans appliquer (dry-run)
ansible-playbook -i inventaire.ini premier-playbook.yml --check

# Mode verbeux (utile pour déboguer)
ansible-playbook -i inventaire.ini premier-playbook.yml -v
OptionDescription
-iFichier d'inventaire
--checkSimulation sans changement réel
-v / -vv / -vvvAugmenter la verbosité
--limit web1Restreindre l'exécution à un hôte
--tags deployExécuter uniquement les tâches taguées

📦 Les Modules Essentiels

ansible.builtin.apt - Gestion des paquets (Debian/Ubuntu)

yaml
- name: Installer plusieurs paquets
  ansible.builtin.apt:
    name:
      - nginx
      - curl
      - vim
    state: present
    update_cache: true       # Équivalent de apt update

- name: Supprimer un paquet
  ansible.builtin.apt:
    name: apache2
    state: absent

ansible.builtin.copy - Copier des fichiers

yaml
- name: Copier la configuration Nginx
  ansible.builtin.copy:
    src: files/nginx.conf     # Sur ton control node
    dest: /etc/nginx/nginx.conf  # Sur le serveur cible
    owner: root
    group: root
    mode: '0644'

ansible.builtin.file - Gérer fichiers et répertoires

yaml
- name: Créer un répertoire
  ansible.builtin.file:
    path: /var/www/monapp
    state: directory
    owner: www-data
    mode: '0755'

- name: Créer un lien symbolique
  ansible.builtin.file:
    src: /etc/nginx/sites-available/monapp
    dest: /etc/nginx/sites-enabled/monapp
    state: link

ansible.builtin.service - Gérer les services

yaml
- name: Démarrer Nginx
  ansible.builtin.service:
    name: nginx
    state: started     # started, stopped, restarted, reloaded
    enabled: true      # Démarrer au boot

ansible.builtin.command et ansible.builtin.shell

yaml
- name: Exécuter une commande simple
  ansible.builtin.command: whoami

- name: Exécuter une commande avec pipe (nécessite shell)
  ansible.builtin.shell: "cat /etc/os-release | grep NAME"

⚠️ Préfère toujours les modules spécialisés (apt, copy, file...) à command ou shell. Les modules sont idempotents : les relancer plusieurs fois donne le même résultat. shell et command ne le sont pas forcément.

ansible.builtin.debug - Afficher des informations

yaml
- name: Afficher un message
  ansible.builtin.debug:
    msg: "L'installation est terminée sur {{ inventory_hostname }}"

🔄 L'idempotence : un concept clé

C'est quoi ? Un playbook idempotent peut être lancé 10 fois de suite - il ne modifie la machine que si quelque chose doit changer.

L'analogie : c'est comme allumer la lumière dans une pièce déjà éclairée. Rien ne change. Ansible fonctionne pareil : si Nginx est déjà installé, il ne le réinstalle pas.

Pourquoi c'est important ? Tu peux relancer ton playbook après une panne, une modification partielle, ou pour vérifier l'état du système. C'est sûr.


⚠️ Erreurs Courantes

ErreurCauseSolution
UNREACHABLE! => {"msg": "Failed to connect"}SSH inaccessibleVérifier l'IP, le port, la clé SSH
fatal: [host]: FAILED! sudo: a password is requiredbecome: true sans mot de passeConfigurer le sudoers sans mot de passe ou utiliser --ask-become-pass
ERROR! Syntax Error while loading YAMLIndentation incorrecteVérifier les espaces (YAML est strict)
MODULE FAILUREModule introuvableVérifier le nom du module et sa syntaxe
Changed=0 toujoursPlaybook déjà appliquéC'est normal - c'est l'idempotence

📊 Récapitulatif

ConceptRôleFichier
InventaireListe des serveurs ciblesinventaire.ini
PlaybookRecette des tâches à exécuterplaybook.yml
PlayGroupe de tâches pour un groupe de serveursDans le playbook
TaskUne action uniqueDans le play
ModuleL'outil qui exécute la tâcheansible.builtin.apt, etc.

📚 Ressources

  • Documentation officielle Ansible
  • Index des modules Ansible
  • Ansible sur GitHub

🚀 Prochaines étapes

Tu sais écrire un inventaire et un playbook de base. Passons au niveau supérieur :

  1. Ansible Intermédiaire : variables, templates et rôles - Organise et réutilise ton code Ansible

Exercices Pratiques

6 exercices pour mettre en pratique

01

01 - Installer Ansible et vérifier l'installation

20 minutesDébutant
02

02 - Créer son premier inventaire Ansible

25 minutesDébutant
03

03 - Écrire et exécuter son premier playbook

35 minutesDébutant
04

04 - Déployer Nginx avec un playbook Ansible

40 minutesDébutant
05

05 - Utiliser les modules essentiels Ansible

35 minutesDébutant
06

06 - Projet : déployer une stack web complète

50 minutesDébutant
Retour aux modules

Sur cette page

  • 🎯 Objectifs
  • 📋 Prérequis
  • 🤔 Pourquoi Ansible ?
  • 🍳 Ansible, c'est quoi exactement ?
  • 🏗️ Architecture Ansible
  • 🔧 Installation
  • Linux (Ubuntu/Debian)
  • macOS
  • Vérification
  • 📋 L'Inventaire
  • Qu'est-ce que c'est ?
  • Format INI (le plus simple)
  • Variables dans l'inventaire
  • Tester la connectivité
  • 📖 Le Playbook
  • Structure de base
  • Lancer un playbook
  • 📦 Les Modules Essentiels
  • ansible.builtin.apt - Gestion des paquets (Debian/Ubuntu)
  • ansible.builtin.copy - Copier des fichiers
  • ansible.builtin.file - Gérer fichiers et répertoires
  • ansible.builtin.service - Gérer les services
  • ansible.builtin.command et ansible.builtin.shell
  • ansible.builtin.debug - Afficher des informations
  • 🔄 L'idempotence : un concept clé
  • ⚠️ Erreurs Courantes
  • 📊 Récapitulatif
  • 📚 Ressources
  • 🚀 Prochaines étapes