Aller au contenu
Infrastructure as Code medium

Modules utilitaires Ansible : debug, setup, add_host, group_by, wait_for_connection

5 min de lecture

Logo Ansible

Cinq modules utilitaires servent de briques transversales dans les playbooks : afficher une variable (debug), collecter les facts (setup), ajouter un hôte dynamique (add_host), regrouper par caractéristique (group_by), attendre la reconnexion SSH (wait_for_connection).

Ils n’apparaissent pas dans une section thématique unique parce qu’ils traversent toutes les sections — fichiers, paquets, services, réseau. Cette page les regroupe pour les avoir sous la main.

  • Afficher une variable ou un message via debug:.
  • Collecter un sous-ensemble de facts avec gather_subset:.
  • Construire un inventaire dynamique au fil du play.
  • Grouper des hôtes selon un fact pour cibler un play suivant.
  • Attendre la reconnexion SSH après reboot ou provisioning.
- name: Afficher un message simple
ansible.builtin.debug:
msg: "Deploiement OK pour {{ inventory_hostname }}"
- name: Afficher la valeur d'une variable
ansible.builtin.debug:
var: ansible_facts.default_ipv4.address
- name: Afficher plusieurs lignes
ansible.builtin.debug:
msg:
- "User : {{ ansible_user }}"
- "IP : {{ ansible_default_ipv4.address }}"

var: vs msg:var: accepte un nom de variable (sans {{ }}), msg: accepte une expression Jinja. Mélanger les deux est l’erreur la plus fréquente.

verbosity: 2 : n’affiche que si -vv ou plus — utile pour des logs verbeux sans polluer les runs normaux.

Par défaut, gather_facts: true au niveau du play appelle setup automatiquement. Mais on peut le rappeler manuellement ou filtrer :

- name: Collecter uniquement le hardware et le system
ansible.builtin.setup:
gather_subset:
- hardware
- system
- name: Tout sauf le reseau et la virtualisation
ansible.builtin.setup:
gather_subset:
- '!network'
- '!virtual'

Subsets utiles : min (minimum), hardware, network, virtual, mounts, pkg_mgr, service_mgr. Exclure avec ! réduit le temps de collecte sur grands parcs (passe de 3-5s à < 1s).

Pattern fréquent : provisionner une VM via Terraform/cloud, récupérer son IP, l’ajouter à l’inventaire dans le même run.

- name: Recuperer l'IP de la nouvelle VM
ansible.builtin.command: terraform output -raw new_vm_ip
register: vm_ip
delegate_to: localhost
- name: Ajouter la VM a l'inventaire dynamique
ansible.builtin.add_host:
name: new-web
groups: webservers
ansible_host: "{{ vm_ip.stdout }}"
ansible_user: ec2-user
- name: Configurer la nouvelle VM
hosts: new-web
tasks:
- ansible.builtin.package:
name: nginx
state: present

add_host: ne persiste pas — l’hôte n’existe que pour le run en cours. Pour le persister, écrire le résultat dans inventory/hosts via template: ou lineinfile:.

- name: Grouper par famille d'OS
ansible.builtin.group_by:
key: "os_{{ ansible_facts.os_family }}"

Résultat : Ansible crée à la volée des groupes os_RedHat, os_Debian, etc. Un play suivant peut cibler hosts: os_RedHat directement, sans toucher l’inventaire.

- name: Grouper par nombre de coeurs
ansible.builtin.group_by:
key: "cpu_{{ ansible_facts.processor_cores }}"

Cas d’usage typique : déployer une config différente selon la classe d’hôte (faible/forte CPU, prod/staging, AZ cloud) sans dupliquer l’inventaire.

Différent de wait_for : wait_for_connection utilise la méthode de connexion Ansible (SSH, WinRM, local) plutôt que de tester un port nu.

- name: Reboot
ansible.builtin.reboot:
- name: Attendre que SSH reponde reellement
ansible.builtin.wait_for_connection:
delay: 10
timeout: 300
sleep: 5

Avantage sur wait_for: port: 22 : wait_for_connection valide toute la chaîne (SSH up + auth fonctionnelle + Python disponible), pas juste le port TCP. Plus fiable après un reboot ou un provisioning cloud.

SymptômeCauseFix
debug: var: affiche VARIABLE IS NOT DEFINEDVariable mal référencéeUtiliser default('') ou tester is defined
gather_facts: true lent (> 5s)Collecte complète sur grand parcgather_subset: ['!all', 'min']
add_host: invisible au play suivantPlays dans le même fichier mais sans meta: refresh_inventoryAjouter meta: refresh_inventory ou nouveau play
wait_for_connection timeout malgré SSH OKAuth method changée pendant le rebootVérifier ansible_user et clés SSH
group_by crée le groupe mais play suivant videPlay déjà parti, groupes appliqués au play suivantMettre le group_by dans un play séparé
  • debug: = var: pour une variable, msg: pour une expression. verbosity: filtre par -v level.
  • setup: gather_subset: = collecte sélective, majeure sur grand parc.
  • add_host: = ajout volatil pour ce run, parfait après provisioning cloud.
  • group_by: = groupes dynamiques sur facts, sans toucher l’inventaire.
  • wait_for_connection: > wait_for: port: 22 après un reboot — valide toute la chaîne.

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