
Reconstruire vos machines en une commande, et savoir ce que vous avez changé à la main (Ansible)
Après quelques mois, chaque machine porte des changements faits à la main dont personne ne se souvient : un paquet ici, un fichier de réglages là, un service modifié sur place. Ansible décrit ce qu'une machine doit être, dans de simples fichiers que vous gardez dans Git, et la met en conformité. Sa commande la plus utile ne change rien : elle vous dit ce qui diffère.
Un peu d'histoire
Ansible a été créé en 2012 par Michael DeHaan, avec une idée qui le distinguait : aucun agent à installer sur les machines, seulement SSH et une description lisible de l'état voulu en YAML. Red Hat l'a racheté en 2015. Lancé deux fois, un bon playbook ne change rien la seconde fois : cette propriété, l'idempotence, est ce qui rend une machine reconstructible.
1. Installer
pipx install --include-deps ansible
ansible --version
Ansible n'a besoin que de SSH sur les machines qu'il gère : rien à y installer.
2. Un inventaire et un premier test
# inventory.ini
[workstations]
laptop ansible_host=192.0.2.20
server ansible_host=192.0.2.30
ansible -i inventory.ini all -m ping
3. Un premier playbook
# site.yml
- hosts: workstations
become: true
tasks:
- name: Les outils que je veux toujours
ansible.builtin.package:
name: [git, htop, rsync]
state: present
- name: Mes réglages du shell
ansible.builtin.template:
src: bashrc.j2
dest: /home/{{ ansible_user }}/.bashrc
mode: '0644'
ansible-playbook -i inventory.ini site.yml --ask-become-pass
Lancez-le deux fois : le second passage doit afficher 0 changed. C'est l'idempotence, et c'est ce qui permet de le relancer à tout moment sans risque.
4. La commande que vous utiliserez le plus
ansible-playbook -i inventory.ini site.yml --check --diff
Elle compare la description aux machines et affiche chaque différence, sans rien toucher. Elle répond à la question à laquelle personne d'autre ne sait répondre : « qu'est-ce que j'ai changé à la main ? »
Pièges du débutant
YAML s'indente avec des espaces, deux par niveau, jamais de tabulation. Mettez les droits de fichier entre guillemets : mode: '0644', sinon le nombre peut être lu en octal ou en décimal selon la version.
Certaines distributions annoncent le nom de leur parente : CachyOS apparaît comme Archlinux dans ansible_facts.distribution. Affichez les faits une fois (ansible laptop -m setup) avant d'écrire des conditions.
Ansible configure des machines qui existent ; les créer (VM, réseaux) est le travail d'OpenTofu, le fork open source de Terraform. N'étirez pas un outil pour faire le travail de l'autre.
Si vous installez Ansible par un gestionnaire de versions, vérifiez après chaque mise à jour de ce gestionnaire que les commandes tournent encore : un changement de format de configuration nous a laissé des versions installées et aucune commande qui marche, derrière un avertissement qui était en fait une panne.
Sources
Utile ? Dites-nous ce qu'il faut mesurer ensuite.