
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.