
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.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- 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.
Module debug — afficher au runtime
Section intitulée « Module debug — afficher au runtime »- 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.
Module setup — collecte ciblée de facts
Section intitulée « Module setup — collecte ciblée de facts »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).
Module add_host — inventaire dynamique
Section intitulée « Module add_host — inventaire dynamique »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: presentadd_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:.
Module group_by — groupes dynamiques sur facts
Section intitulée « Module group_by — groupes dynamiques sur facts »- 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.
Module wait_for_connection — attendre SSH
Section intitulée « Module wait_for_connection — attendre SSH »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: 5Avantage 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.
Pièges courants
Section intitulée « Pièges courants »| Symptôme | Cause | Fix |
|---|---|---|
debug: var: affiche VARIABLE IS NOT DEFINED | Variable mal référencée | Utiliser default('') ou tester is defined |
gather_facts: true lent (> 5s) | Collecte complète sur grand parc | gather_subset: ['!all', 'min'] |
add_host: invisible au play suivant | Plays dans le même fichier mais sans meta: refresh_inventory | Ajouter meta: refresh_inventory ou nouveau play |
wait_for_connection timeout malgré SSH OK | Auth method changée pendant le reboot | Vérifier ansible_user et clés SSH |
group_by crée le groupe mais play suivant vide | Play déjà parti, groupes appliqués au play suivant | Mettre le group_by dans un play séparé |
À retenir
Section intitulée « À retenir »debug:=var:pour une variable,msg:pour une expression.verbosity:filtre par-vlevel.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: 22après un reboot — valide toute la chaîne.