← Tous les articles
Ven. 10 juillet 2026 · 3 min de lecture

🧰 Ansible : configurer ses serveurs de façon reproductible

Ansible

📚 Introduction

Provisionner une VM, c’est la moitiĂ© du travail. Une fois la machine créée — par OpenTofu, ou Ă  la main sur Proxmox —, elle est vide : il faut installer les paquets, crĂ©er les utilisateurs, dĂ©poser la config, dĂ©marrer les services. Si on le fait Ă  la main, en SSH, on retombe dans le piĂšge habituel : personne ne se souvient de la sĂ©quence exacte six mois plus tard.

Ansible rĂ©pond Ă  ce besoin : dĂ©crire la configuration d’un serveur dans des fichiers YAML versionnĂ©s, et l’appliquer de façon reproductible. La version community ansible 14.2.0 s’appuie sur ansible-core 2.21 (qui demande Python 3.12+ cĂŽtĂ© contrĂŽleur). C’est un projet open source (GPLv3) portĂ© par Red Hat et une large communautĂ©.

🔎 Pourquoi Ansible est-il « sans agent » ?

C’est sa particularitĂ© la plus utile : Ansible n’installe rien de permanent sur les machines gĂ©rĂ©es. LĂ  oĂč d’autres outils demandent un dĂ©mon qui tourne en continu sur chaque serveur, Ansible se contente de deux choses dĂ©jĂ  prĂ©sentes partout : un accĂšs SSH et un interprĂ©teur Python. Il se connecte, pousse le module nĂ©cessaire, l’exĂ©cute, rĂ©cupĂšre le rĂ©sultat, et repart.

Concrùtement, on installe Ansible sur une seule machine — la tienne, ou un petit contrîleur — et on pilote tout le parc depuis là :

pipx install ansible      # méthode recommandée
# ou
python3 -m pip install --user ansible

🚀 Inventaire et playbook

Deux fichiers suffisent. L’inventaire liste les machines, Ă©ventuellement par groupe :

[web]
web1.homelab.lan
web2.homelab.lan

Le playbook dĂ©crit l’état souhaitĂ©, sous forme de tĂąches qui appellent des modules. Chaque module (ansible.builtin.apt, ansible.builtin.service
) sait vĂ©rifier l’état rĂ©el avant d’agir :

- name: Configurer un serveur web
  hosts: web
  become: true
  tasks:
    - name: Installer Nginx
      ansible.builtin.apt:
        name: nginx
        state: present
        update_cache: true
 
    - name: Démarrer et activer Nginx
      ansible.builtin.service:
        name: nginx
        state: started
        enabled: true
 
    - name: Déposer la page d'accueil
      ansible.builtin.copy:
        src: files/index.html
        dest: /var/www/html/index.html
        mode: '0644'

On vĂ©rifie d’abord que les machines rĂ©pondent, puis on applique :

ansible web -i inventory.ini -m ansible.builtin.ping
ansible-playbook -i inventory.ini site.yml

đŸ§± L’idempotence, la vraie bonne idĂ©e

Le mot fait peur, l’idĂ©e est simple : rejouer un playbook ne casse rien. Chaque module compare l’état actuel Ă  l’état demandĂ© et n’agit que si nĂ©cessaire. Nginx est dĂ©jĂ  installĂ© ? La tĂąche est marquĂ©e ok, rien ne se passe. Le fichier a changĂ© ? La tĂąche est marquĂ©e changed, il est recopiĂ©.

Cette propriĂ©tĂ© change tout par rapport Ă  un script shell classique, oĂč relancer deux fois peut crĂ©er des doublons ou planter. Avec Ansible, le playbook n’est pas une suite d’actions, c’est une description de l’état cible : on le rejoue Ă  volontĂ©, sur une machine neuve comme sur une machine dĂ©jĂ  Ă  moitiĂ© configurĂ©e, et on converge toujours vers le mĂȘme rĂ©sultat.

⚠ Quelques prĂ©cautions

  • Nomme les modules en entier (ansible.builtin.copy plutĂŽt que copy). Le nom pleinement qualifiĂ© (FQCN) Ă©vite les ambiguĂŻtĂ©s le jour oĂč une collection tierce expose un module homonyme.
  • Ne mets pas de secrets en clair dans les playbooks. Ansible fournit ansible-vault pour chiffrer mots de passe et clĂ©s directement dans le dĂ©pĂŽt.
  • Un serveur configurĂ© par Ansible ne se modifie plus Ă  la main. Comme pour l’IaC en gĂ©nĂ©ral, toute retouche manuelle crĂ©e un Ă©cart entre le code et le rĂ©el. La rĂšgle : on repasse toujours par le playbook.
  • Python doit ĂȘtre prĂ©sent sur la cible. C’est le cas par dĂ©faut sur la plupart des distributions Linux, mais Ă  vĂ©rifier sur les images minimales.

🎉 Conclusion

Ansible, c’est la config de tes serveurs traitĂ©e comme du code : versionnĂ©e, relisible, rejouable sans crainte grĂące Ă  l’idempotence, et sans agent Ă  maintenir. Le duo qui marche pour un homelab : OpenTofu crĂ©e la VM, Ansible la configure. Le jour oĂč tu dois remonter une machine, tu ne cherches plus tes notes — tu lances un playbook, et la machine se reconstruit toute seule.

🔗 Liens utiles

/faq

Questions fréquentes

Ansible a-t-il besoin d'un agent sur les serveurs ?

+

Non. Ansible est « sans agent » : il se connecte en SSH et exécute des modules Python déjà présents sur la plupart des distributions Linux. Il n'y a rien à installer ni à maintenir en permanence sur les machines gérées, seulement Python et un accÚs SSH.

Quelle est la différence entre Ansible et OpenTofu ?

+

OpenTofu (ou Terraform) provisionne l'infrastructure : il crĂ©e la VM, le rĂ©seau, le disque. Ansible configure ce qui tourne dessus : paquets, utilisateurs, services, fichiers. Les deux sont complĂ©mentaires — on provisionne avec l'un, on configure avec l'autre.

Qu'est-ce que l'idempotence dans Ansible ?

+

C'est la garantie qu'un playbook peut ĂȘtre rejouĂ© sans danger : chaque module vĂ©rifie l'Ă©tat actuel et n'agit que s'il faut converger vers l'Ă©tat souhaitĂ©. Lancer le playbook une fois ou dix fois donne le mĂȘme rĂ©sultat, sans doublon ni effet de bord.