Les facts
Les facts sont des variables automatiquement collectées sur chaque hôte cible au début de chaque play. Ils exposent l'état réel du système : distribution, architecture, interfaces réseau, mémoire, disques. Comprendre les facts permet d'écrire des playbooks adaptatifs qui fonctionnent sur des environnements hétérogènes.
La collecte automatique
Par défaut, Ansible exécute le module setup sur chaque hôte au début du play. Cette étape s'affiche comme Gathering Facts dans la sortie. Les facts collectés sont ensuite disponibles dans la variable ansible_facts et accessibles directement par leur nom court.
# Voir tous les facts d'un hôte
ansible web01.example.com -m setup
# Filtrer par pattern
ansible web01.example.com -m setup -a "filter=ansible_distribution*"
ansible web01.example.com -m setup -a "filter=ansible_default_ipv4"Facts essentiels
ansible_distribution: "Debian", "Ubuntu", "CentOS"...ansible_distribution_version: "13", "22.04"...ansible_distribution_release: "trixie", "jammy"...ansible_architecture: "x86_64", "aarch64"...ansible_hostname: nom d'hôte courtansible_fqdn: nom d'hôte completansible_default_ipv4.address: IP de l'interface par défautansible_memtotal_mb: RAM totale en Moansible_processor_vcpus: nombre de vCPUansible_interfaces: liste des interfaces réseauansible_date_time: date et heure au moment de la collecte
Utiliser les facts dans un playbook
- name: Configurer selon la distribution
ansible.builtin.apt:
name: nginx
state: present
when: ansible_distribution == "Debian"
- name: Ajuster selon la RAM disponible
ansible.builtin.template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
vars:
worker_connections: "{{ [1024, ansible_memtotal_mb // 4] | max }}"Variables magiques
En plus des facts, Ansible expose des variables dites "magiques" qui décrivent le contexte d'exécution :
inventory_hostname: nom de l'hôte tel qu'il apparaît dans l'inventaireinventory_hostname_short: version courte (avant le premier point)ansible_play_hosts: liste des hôtes actifs dans le play courantansible_play_batch: sous-ensemble du play en cours (avecserial)groups: dictionnaire de tous les groupes et leurs hôtesgroup_names: liste des groupes auxquels appartient l'hôte couranthostvars: facts et variables de tous les hôtes de l'inventaire
# Accéder aux facts d'un autre hôte
- name: Configurer le backend avec l'IP du DB
ansible.builtin.template:
src: app.conf.j2
dest: /etc/myapp/app.conf
vars:
db_ip: "{{ hostvars['db01.example.com']['ansible_default_ipv4']['address'] }}"Custom facts
Il est possible de définir des facts personnalisés sur les machines cibles. Ansible charge automatiquement tout fichier .fact présent dans /etc/ansible/facts.d/ :
# /etc/ansible/facts.d/app.fact (fichier INI)
[app]
version=2.4.1
env=productionCes facts sont ensuite disponibles sous ansible_local.app.version. Utile pour exposer des métadonnées applicatives sans modifier l'inventaire.
Désactiver la collecte des facts
La collecte des facts prend 1 à 3 secondes par hôte. Sur un play qui n'en a pas besoin, la désactiver réduit sensiblement le temps d'exécution :
- name: Play rapide sans facts
hosts: all
gather_facts: false
tasks:
- name: Vérifier la connectivité
ansible.builtin.ping: