Ansible : installation et prise en main

Intermédiaire 6 min de lecture 30 août 2026

Configurer un serveur Ă  la main, puis le suivant, puis le suivant, en espĂ©rant avoir fait exactement les mĂȘmes commandes Ă  chaque fois — c’est la dĂ©finition mĂȘme du travail qui finit par vous exploser au visage un vendredi soir. Ansible automatise ce travail de façon reproductible, sans rien installer sur les machines gĂ©rĂ©es. Ce tutoriel couvre l’installation, l’inventaire, les commandes ad-hoc, l’Ă©criture de playbooks et les roles.

Le principe : agentless, en SSH, idempotent

Contrairement Ă  des outils comme Puppet ou Chef qui nĂ©cessitent d’installer un agent sur chaque machine gĂ©rĂ©e, Ansible fonctionne en mode agentless : il se connecte simplement en SSH (ou WinRM pour Windows) depuis un « nƓud de contrĂŽle » vers les machines cibles, exĂ©cute des modules Python temporaires, puis nettoie derriĂšre lui. Rien Ă  installer ni Ă  maintenir sur les serveurs gĂ©rĂ©s, Ă  part un client SSH et Python — dĂ©jĂ  prĂ©sents sur l’immense majoritĂ© des systĂšmes Linux.

DeuxiĂšme principe fondamental : l’idempotence. Un playbook Ansible bien Ă©crit peut ĂȘtre exĂ©cutĂ© cent fois de suite sans effet de bord : s’il constate qu’un paquet est dĂ©jĂ  installĂ© ou qu’un fichier a dĂ©jĂ  le bon contenu, il ne fait rien et le signale comme tel (« ok », pas « changed »). C’est ce qui permet de rejouer sereinement une configuration sans craindre de casser quelque chose qui fonctionne dĂ©jĂ .

Architecture agentless d’Ansible : un nƓud de contrĂŽle se connecte en SSH vers les machines gĂ©rĂ©es NƓud de contrĂŽle ansible + playbooks + inventaire SSH web01 web02 db01 Aucun agent Ă  installer Python + SSH suffisent
Le nƓud de contrĂŽle pousse la configuration en SSH ; les machines gĂ©rĂ©es n’ont besoin d’aucun agent permanent.

Installation

Plusieurs mĂ©thodes officielles existent ; pipx est aujourd’hui la mĂ©thode recommandĂ©e par la documentation Ansible pour installer l’outil dans un environnement isolĂ©, sans polluer le Python systĂšme :

# Avec pipx (recommandé)
sudo apt install pipx        # ou : python3 -m pip install --user pipx
pipx ensurepath
pipx install --include-deps ansible

# Alternative : gestionnaire de paquets de la distribution
sudo apt install ansible     # Debian/Ubuntu
sudo dnf install ansible     # Fedora/RHEL

# Vérification
ansible --version

Notez la distinction entre ansible-core (le moteur minimal) et le paquet ansible complet, qui embarque en plus une large collection de modules communautaires — le paquet complet est le plus simple pour dĂ©marrer.

PrĂ©parer l’accĂšs SSH

  1. GĂ©nĂ©rez une paire de clĂ©s SSH dĂ©diĂ©e si vous n’en avez pas dĂ©jĂ  une : ssh-keygen -t ed25519.
  2. Copiez la clé publique sur chaque machine à gérer : ssh-copy-id utilisateur@serveur.
  3. VĂ©rifiez que vous pouvez vous connecter sans mot de passe avant d’aller plus loin — Ansible dĂ©pend entiĂšrement de cet accĂšs SSH fonctionnel.

L’inventaire : dĂ©clarer vos machines

L’inventaire liste les machines gĂ©rĂ©es, organisĂ©es en groupes. Format INI simple (inventory.ini) :

[web]
web01.example.local
web02.example.local

[db]
db01.example.local

[production:children]
web
db

Un format YAML Ă©quivalent est Ă©galement possible et souvent prĂ©fĂ©rĂ© dans les projets plus structurĂ©s. Pour des infrastructures dynamiques (cloud, conteneurs), Ansible propose des inventaires dynamiques qui interrogent une API (AWS, Proxmox, etc.) au lieu d’un fichier statique.

Commandes ad-hoc : tester avant d’automatiser

Avant d’Ă©crire un playbook complet, une commande ad-hoc permet de vĂ©rifier rapidement une action ponctuelle :

# Tester la connectivité
ansible all -i inventory.ini -m ping

# Exécuter une commande shell sur un groupe
ansible web -i inventory.ini -m command -a "uptime"

# Installer un paquet (nécessite les droits élevés)
ansible web -i inventory.ini -m apt -a "name=curl state=present" --become

Le module ping ne fait pas un ping rĂ©seau classique : il vĂ©rifie que Python est disponible sur la cible et que la connexion SSH + les identifiants fonctionnent — un premier test indispensable aprĂšs toute nouvelle installation.

Écrire un premier playbook

Un playbook est un fichier YAML qui dĂ©crit un Ă©tat dĂ©sirĂ©, exĂ©cutĂ© dans l’ordre, tĂąche par tĂąche :

---
- name: Installer et démarrer Nginx
  hosts: web
  become: true
  tasks:
    - name: Installer le paquet nginx
      ansible.builtin.apt:
        name: nginx
        state: present
        update_cache: true

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

    - name: Déployer la page d'accueil
      ansible.builtin.template:
        src: templates/index.html.j2
        dest: /var/www/html/index.html
      notify: Recharger Nginx

  handlers:
    - name: Recharger Nginx
      ansible.builtin.service:
        name: nginx
        state: reloaded

ExĂ©cution : ansible-playbook -i inventory.ini site.yml. Relancez-le une seconde fois : les tĂąches dĂ©jĂ  satisfaites remontent en ok plutĂŽt qu’en changed — c’est l’idempotence en action, la preuve que le playbook ne casse rien Ă  la relance.

Le handler illustre un autre concept clé : une action déclenchée uniquement si une tùche précédente a réellement changé quelque chose (ici, recharger Nginx seulement si la page a été modifiée), plutÎt que de la relancer systématiquement à chaque exécution.

Organiser en roles

DĂšs qu’un playbook grossit, les roles permettent de dĂ©couper la configuration en blocs rĂ©utilisables (un role « nginx », un role « postgresql », un role « durcissement-securite » ) :

ansible-galaxy init roles/nginx

Cette commande gĂ©nĂšre l’arborescence standard (tasks/, handlers/, templates/, defaults/, vars/
) que vous remplissez ensuite, puis rĂ©fĂ©rencez depuis un playbook :

---
- name: Configurer les serveurs web
  hosts: web
  become: true
  roles:
    - nginx

Protéger les secrets avec ansible-vault

Un mot de passe de base de donnĂ©es ou une clĂ© API n’a rien Ă  faire en clair dans un playbook versionnĂ© sur Git. ansible-vault chiffre le contenu sensible :

# Créer un fichier chiffré
ansible-vault create group_vars/db/vault.yml

# Éditer un fichier existant
ansible-vault edit group_vars/db/vault.yml

# Exécuter un playbook qui référence des variables chiffrées
ansible-playbook site.yml --ask-vault-pass

Bonnes pratiques

  • Versionnez vos playbooks dans Git, mais jamais le mot de passe vault en clair — utilisez un fichier de mot de passe hors dĂ©pĂŽt ou un gestionnaire de secrets externe.
  • Testez d’abord en mode --check (simulation Ă  blanc) sur un environnement non critique avant d’exĂ©cuter un nouveau playbook en production.
  • Utilisez des tags (--tags) pour n’exĂ©cuter qu’une partie ciblĂ©e d’un long playbook pendant le dĂ©veloppement, sans tout rejouer.
  • Documentez vos roles (README, valeurs par dĂ©faut commentĂ©es dans defaults/main.yml) — un role sans documentation redevient une boĂźte noire dĂšs que quelqu’un d’autre (ou vous, six mois plus tard) doit le rĂ©utiliser.

Une fois cette base maĂźtrisĂ©e en ligne de commande, l’Ă©tape naturelle suivante pour une Ă©quipe est de piloter ces mĂȘmes playbooks depuis une interface web centralisĂ©e avec RBAC, planification et journalisation — c’est exactement le rĂŽle d’AWX, couvert dans le tutoriel suivant.