freedzhost.cloud

Reconstruire vos machines en une commande, et savoir ce que vous avez changé à la main (Ansible)

Niveau IntermédiaireTemps estimé une demi-journéeUn mot inconnu ? Lexique

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.

Dépôtl'état voulu--check --diffliste l'écart, ne touche à rienPortableappliquerServeur2e passage : 0 changement
Le dépôt décrit ce que chaque machine doit être. --check --diff le compare à ce que la machine est vraiment et liste chaque différence, sans rien toucher. Appliquer met la machine en conformité ; le relancer ne change rien la deuxième fois.

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.