Aller au contenu
Infrastructure as Code medium

Variables et facts Ansible : déclaration, précédence, magic vars, lookups

4 min de lecture

Logo Ansible

Cette sous-section est la plus dense pour la RHCE EX294 — et celle où les pièges sont les plus subtils. Elle couvre tout ce qui touche aux variables (déclaration, portées, types complexes), aux facts (gather, subset, magic vars), à la précédence officielle (22 niveaux), à la capture de sorties (register:, set_fact:), aux lookups et aux filtres Jinja2 essentiels. Maîtriser cette couche, c’est passer du playbook qui marche au playbook qui marche sur toutes les versions, tous les inventaires, et résiste aux refactos.

La page précédence des variables est explicitement dans les objectifs RHCE — elle vous évite des heures de debug quand une variable que vous croyez maîtriser est écrasée par une variable plus prioritaire.

  • Déclarer des variables : vars:, vars_files:, --extra-vars, group_vars/, host_vars/ ;
  • Manipuler les types collections : listes, dicts, nested, accès var.key vs var['key'] ;
  • Comprendre les facts (ansible_facts.*), gather_subset: pour la performance ;
  • Connaître les magic vars : inventory_hostname, groups, hostvars, play_hosts, ansible_play_batch ;
  • Maîtriser les 22 niveaux de précédence — objectif explicite RHCE EX294 ;
  • Capturer des sorties : register:, set_fact: (avec cacheable: true) ;
  • Utiliser les lookups : file, env, password, vars, hashi_vault, csvfile, ini, dig ;
  • Appliquer les filtres Jinja2 essentiels : default, to_json, regex_replace, dict2items, combine, selectattr, map('attribute=...').
  • Avoir lu la sous-section Fondations (YAML, structure, style guide) ;
  • Avoir fini la sous-section Playbooks (anatomie d’un play, handlers, tags).
Custom facts (facts.d) Étendre les facts avec /etc/ansible/facts.d/*.fact — INI statique vs script Bash dynamique. Lecture via ansible_local....

Cette sous-section couvre directement plusieurs objectifs explicites de la RHCE :

Objectif RHCECouvert par
Utiliser variables (host, group, register, facts)Variables — déclaration et portées
Manipuler types simples et collectionsTypes collections
Comprendre la précédence des variablesPrécédence des variables (RHCE explicite)
Manipuler les factsFacts et magic vars
Étendre les facts côté cible (facts.d)Custom facts (bonus EX294)
Capturer une sortie pour l’utiliser ailleursregister et set_fact
Récupérer des données externesLookups
Transformer des données dans un templateFiltres Jinja2 essentiels

Quatre pièges qui plombent les playbooks débutants intermédiaires :

  • Sous-estimer --extra-vars : c’est le niveau 22, le plus prioritaire. Aucun group_vars/all.yml ne peut l’écraser. Pratique pour CI, dangereux si oublié.
  • Mélanger vars/ et defaults/ dans un rôle : vars/main.yml est niveau 18 (haut), defaults/main.yml est niveau 2 (bas). Inverser les deux change toute la précédence.
  • Croire que set_fact est éphémère : par défaut, oui. Avec cacheable: true, le fact est persistant dans le cache (fact_caching = jsonfile). Surprise garantie au prochain run.
  • Boucles sur dicts via with_dict : déprécié. Utiliser loop: avec dict2items: qui retourne [{key, value}, ...].

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn