Ansible gather_facts : auditer un parc Linux et fiabiliser l’inventaire

ANSIBLE · AUDIT LINUX · INVENTAIRE PRODUCTION

Beaucoup d’équipes activent ansible gather_facts puis laissent ces données dormir dans les logs du playbook. Bien exploités, les facts servent pourtant à fiabiliser un parc Linux, préparer un audit, repérer les écarts de configuration avant incident et construire un inventaire réellement exploitable par une équipe infra ou DevOps.

Illustration d'un audit de parc Linux avec Ansible gather_facts
Illustration : exploitation d’Ansible gather_facts pour auditer un parc Linux et fiabiliser l’inventaire.

Réponse rapide : à quoi sert Ansible gather_facts ?

Ansible gather_facts collecte automatiquement des informations sur les hôtes Linux avant l’exécution d’un playbook : OS, noyau, réseau, mémoire, CPU, stockage et virtualisation. En production, l’intérêt n’est pas de “voir des facts”, mais de transformer ces données en inventaire fiable pour décider où déployer, quoi corriger et quels serveurs présentent un risque ou une dérive de configuration.

Pourquoi gather_facts compte en production

Dans une petite infrastructure, on peut encore croire connaître chaque serveur. Dans un parc réel, cette certitude disparaît vite : VM oubliées, distributions hétérogènes, noyaux non patchés, interfaces réseau renommées, partitions presque pleines, rôles applicatifs mal documentés. Les fichiers d’inventaire Ansible indiquent souvent le nom des machines, mais rarement leur état réel.

C’est là que gather_facts devient intéressant. Il ne remplace pas une supervision ni une CMDB complète, mais il donne une photographie technique homogène au moment où l’automatisation s’exécute. Pour une équipe DevOps ou infogérance, ces informations permettent de décider avant d’agir : appliquer une tâche uniquement sur Debian 13, exclure les serveurs avec trop peu de RAM, cibler les machines virtuelles, ou vérifier qu’un parc respecte une base de conformité.

Sur linux-man.fr, le sujet complète naturellement des pratiques d’automatisation plus larges comme la structure d’un playbook Ansible en production et l’industrialisation d’une infrastructure Linux avec Ansible.

💡

Le bon angle

Ne vois pas gather_facts comme une option Ansible isolée. Vois-le comme une source de données d’exploitation pour décider, filtrer et documenter.

Diagnostic : quelles données récupérer avec Ansible facts

Les facts Ansible sont stockés dans la variable ansible_facts. On y trouve beaucoup de données, mais tout n’a pas la même valeur opérationnelle. En contexte professionnel, les informations les plus utiles sont généralement celles qui répondent à une question précise : “quels serveurs sont encore en Debian 11 ?”, “quels hôtes exposent plusieurs interfaces ?”, “quels systèmes ont moins de 4 Go de RAM ?”, “quels nœuds tournent en virtualisation KVM ?”.

Pour inspecter les facts d’un hôte sans exécuter tout un playbook, le module setup reste le point de départ :

ansible all -m ansible.builtin.setup

Sur un parc complet, le résultat brut est trop volumineux. Il vaut mieux filtrer :

ansible all -m ansible.builtin.setup -a 'filter=ansible_distribution*'
ansible all -m ansible.builtin.setup -a 'filter=ansible_default_ipv4'
ansible all -m ansible.builtin.setup -a 'filter=ansible_memtotal_mb'

Ces filtres transforment une collecte massive en diagnostic ciblé. Pour un audit initial, je recommande de commencer par cinq familles : OS, kernel, réseau, ressources, stockage. Cela suffit à détecter la plupart des écarts avant de lancer des automatisations plus sensibles.

Pourquoi les inventaires Ansible deviennent peu fiables

Le problème vient rarement d’Ansible lui-même. Il vient surtout d’un mauvais usage des informations disponibles. Beaucoup d’équipes maintiennent un fichier inventory statique, puis oublient de le confronter à la réalité. Le nom d’un groupe indique “debian”, mais un hôte a été migré. Une variable annonce “prod”, mais la machine n’est plus exposée. Une adresse IP change, mais le fichier reste inchangé.

Autre cause fréquente : désactiver gather_facts partout pour gagner quelques secondes, sans stratégie alternative. C’est parfois légitime sur des playbooks très courts, mais dangereux quand les tâches dépendent du système cible. Enfin, l’absence de cache rend la collecte répétitive et lente, surtout sur des parcs distribués ou des hôtes accessibles via VPN.

⚠️

Erreur classique

Mettre gather_facts: false par défaut peut accélérer un playbook, mais cela supprime aussi les garde-fous basés sur l’état réel du serveur.

Solutions : utiliser gather_facts comme base d’audit Linux

La première solution consiste à structurer un playbook d’audit minimal. Il collecte les facts, extrait les informations utiles, puis produit une sortie lisible. Exemple simple :

---
- name: Audit de base du parc Linux
  hosts: all
  gather_facts: true
  tasks:
    - name: Afficher les informations système clés
      ansible.builtin.debug:
        msg:
          host: "{{ inventory_hostname }}"
          distribution: "{{ ansible_facts.distribution }} {{ ansible_facts.distribution_version }}"
          kernel: "{{ ansible_facts.kernel }}"
          ip: "{{ ansible_facts.default_ipv4.address | default('n/a') }}"
          ram_mb: "{{ ansible_facts.memtotal_mb }}"
          vcpu: "{{ ansible_facts.processor_vcpus | default('n/a') }}"

Ensuite, on peut ajouter des contrôles conditionnels. Par exemple, détecter les serveurs Debian trop anciens :

- name: Signaler les Debian anciennes
  ansible.builtin.debug:
    msg: "{{ inventory_hostname }} doit être planifié pour migration"
  when:
    - ansible_facts.distribution == 'Debian'
    - ansible_facts.distribution_major_version | int < 12

Pour produire un fichier exploitable par une équipe ou une CMDB, on peut déléguer l’écriture au contrôleur Ansible :

- name: Générer une ligne CSV d'inventaire
  ansible.builtin.lineinfile:
    path: ./inventaire-linux.csv
    create: true
    line: "{{ inventory_hostname }},{{ ansible_facts.distribution }},{{ ansible_facts.distribution_version }},{{ ansible_facts.default_ipv4.address | default('n/a') }},{{ ansible_facts.memtotal_mb }}"
  delegate_to: localhost

Ce n’est pas une CMDB parfaite, mais c’est un excellent point de départ : rapide, versionnable, compréhensible, et surtout basé sur des données collectées au moment de l’exécution.

Bonne pratique

Sépare les playbooks d’audit des playbooks de changement. Un audit basé sur ansible_facts doit pouvoir tourner sans modifier les serveurs.

Prévention : performance, cache et sécurité des facts

Sur un parc important, la collecte des facts peut ralentir les exécutions. La réponse n’est pas forcément de tout désactiver, mais de maîtriser ce qui est collecté et quand. Ansible permet d’utiliser un cache de facts afin d’éviter de redemander les mêmes informations à chaque run. Exemple dans ansible.cfg :

[defaults]
gathering = smart
fact_caching = jsonfile
fact_caching_connection = .ansible_facts_cache
fact_caching_timeout = 3600

Le mode smart utilise le cache quand il est disponible et encore valide. C’est utile pour les tableaux d’inventaire, les contrôles de conformité non critiques ou les rapports réguliers. Pour une opération sensible, comme un patch kernel ou une migration, il faut au contraire forcer une collecte fraîche.

Attention également à la confidentialité. Les facts peuvent révéler des adresses IP internes, noms d’hôtes, chemins, informations de virtualisation ou détails matériels. Le cache doit rester sur le contrôleur d’administration, avec des droits restrictifs, et ne doit pas être publié dans un dépôt Git sans nettoyage.

Checklist de mise en œuvre

✅ Déployer gather_facts proprement

Définir les questions d’audit avant de collecter tous les facts.
Tester setup sur un groupe pilote.
Mettre en cache uniquement si le besoin tolère des données vieilles de quelques minutes ou heures.
Protéger le cache et les exports d’inventaire.
Documenter les décisions prises à partir des facts.

Erreurs courantes avec Ansible facts

⏱ Collecter sans objectif

Un dump complet est difficile à relire. Filtre les facts par besoin : OS, réseau, RAM, stockage, virtualisation.

🔐 Exposer le cache

Les facts contiennent des informations internes. Évite de les commiter ou de les envoyer dans des tickets publics.

🧭 Confondre inventaire déclaré et état réel

Les groupes Ansible disent ce que l’on croit gérer. Les facts disent ce que le serveur déclare au moment du run.

Cas d’usage concrets

🏢

Audit PME

Lister distributions, versions, RAM et IP avant reprise d’infogérance.

🛡️

Conformité

Détecter les noyaux anciens, OS obsolètes ou serveurs non standards.

🔄

Migration

Prioriser les hôtes à migrer selon OS, ressources et rôle technique.

📊

CMDB légère

Exporter une base CSV ou JSON contrôlée pour documentation interne.

FAQ sur Ansible gather_facts

Faut-il laisser gather_facts activé partout ?
Pas forcément. Il est utile quand les tâches dépendent de l’état du serveur. Pour des actions simples et indépendantes du système, on peut le désactiver, mais il faut le faire consciemment.
Quelle différence entre gather_facts et setup ?
gather_facts est le mécanisme automatique lancé au début d’un play. setup est le module qui collecte ces informations et peut être appelé directement.
Les facts peuvent-ils alimenter une CMDB ?
Oui, pour une CMDB légère ou un pré-audit. Pour une CMDB officielle, il faut ajouter validation, historique, propriétaires applicatifs et cycle de vie.
Le cache de facts est-il risqué ?
Il est utile, mais il contient des données internes. Il doit rester protégé, avec un timeout adapté, et ne pas être publié sans filtrage.
Peut-on créer des facts personnalisés ?
Oui. Les facts personnalisés sont utiles pour ajouter un rôle applicatif, un propriétaire, une criticité ou une donnée métier absente des facts natifs.

Conclusion

Ansible gather_facts devient vraiment puissant lorsqu’il sort du rôle de simple option technique. Utilisé avec des filtres, un cache maîtrisé et des exports propres, il aide à transformer un inventaire déclaratif en vision exploitable du parc Linux. C’est une brique simple pour mieux auditer, mieux automatiser et réduire les erreurs avant les changements de production.

Besoin d’un inventaire Linux fiable avant automatisation ?

Je peux vous aider à structurer un audit Ansible, fiabiliser vos playbooks et transformer vos facts en inventaire exploitable pour l’exploitation et la conformité.

Contacte-moi →

Laisser un commentaire