𧰠Ansible : configurer ses serveurs de façon reproductible
đ 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.lanLe 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.copyplutĂŽt quecopy). 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-vaultpour 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.