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 tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn