1. La force du modèle « Agentless » d’Ansible

Contrairement aux gestionnaires de configuration historiques (Puppet, Chef) qui exigeaient l’installation, la mise à jour et la sécurisation d’un logiciel démon (agent) sur chaque machine cible, Ansible fonctionne sans aucun agent :

  • Il utilise exclusivement le protocole standard SSH pour Linux et WinRM pour Windows Server.
  • Sur les machines cibles, seul un interpréteur Python (généralement présent par défaut) est requis.
  • Le nœud de contrôle (Control Node) génère dynamiquement des scripts Python légers, les pousse via SFTP, les exécute sur les serveurs cibles, puis supprime immédiatement les traces.

2. Le principe fondamental d’Idempotence

Une opération Ansible est dite idempotente lorsqu’elle produit exactement le même état final, qu’on l’exécute une seule fois ou cinquante fois de suite, sans altérer le système si l’état désiré est déjà atteint :

Si le paquet nginx est déjà installé dans la version spécifiée, Ansible se contente de signaler ok (vert) sans réinstaller le paquet. S’il était absent, il l’installe et signale changed (jaune).

3. Définition de l’inventaire des serveurs (hosts.yaml)

# Inventaire structuré : inventory.yaml
all:
  children:
    suisse_romande:
      children:
        geneve:
          hosts:
            srv-ge-web01.educasuisse.ch:
              ansible_host: 192.168.10.11
            srv-ge-web02.educasuisse.ch:
              ansible_host: 192.168.10.12
        lausanne:
          hosts:
            srv-vd-db01.educasuisse.ch:
              ansible_host: 192.168.20.15
              ansible_user: adminsec
  vars:
    ansible_user: sysadmin
    ansible_ssh_private_key_file: ~/.ssh/id_ed25519

4. Commandes ad-hoc pour opérations instantanées

Pour exécuter une action ponctuelle sur 50 serveurs en une ligne de commande :

# Tester la connectivité de tous les serveurs du parc
ansible all -i inventory.yaml -m ping

# Redémarrer le service NTP chrony sur tous les serveurs de Genève
ansible geneve -i inventory.yaml -b -m service -a "name=chrony state=restarted"

# Obtenir l'espace disque disponible sur l'ensemble des machines
ansible suisse_romande -i inventory.yaml -a "df -h /"

Option become (-b) : L’option -b indique à Ansible d’élever ses privilèges via sudo sur la cible distante de façon sécurisée et tracée.