Modules Utilitaires Ansible
Mise à jour :
Ansible propose de nombreux modules utilitaires qui facilitent la gestion dynamique des inventaires, la collecte d’informations système, la synchronisation des tâches, le débogage et la gestion des connexions. Ces modules sont essentiels pour écrire des playbooks robustes, adaptatifs et faciles à maintenir.
Le module ansible pause
Le module pause
permet de mettre en pause l’exécution d’un playbook, soit pour
un temps donné, soit en attendant une intervention humaine.
Pause de quelques secondes
- name: Pause de 10 secondes ansible.builtin.pause: seconds: 10
Pause avec message et confirmation
- name: Pause avec confirmation utilisateur ansible.builtin.pause: prompt: "Appuyez sur Entrée pour continuer le déploiement"
Le module ansible debug
Le module debug
affiche des messages de débogage ou la valeur de variables
dans la sortie du playbook. Il est très utile pour comprendre le déroulement
d’un playbook ou inspecter des variables.
Afficher un message simple
- name: Afficher un message de debug ansible.builtin.debug: msg: "Déploiement terminé avec succès"
Afficher la valeur d’une variable
- name: Afficher la valeur d’une variable ansible.builtin.debug: var: ansible_facts['hostname']
Afficher plusieurs variables
- name: Afficher plusieurs variables ansible.builtin.debug: msg: - "Utilisateur : {{ ansible_user }}" - "Adresse IP : {{ ansible_default_ipv4.address }}"
Le module ansible add_host
Le module add_host
permet d’ajouter dynamiquement des hôtes à l’inventaire en
cours d’exécution. Il est utile pour construire des workflows dynamiques, par
exemple pour générer des listes d’hôtes cibles à partir de résultats d’une tâche
précédente.
Ajout d’un hôte simple
- name: Ajouter dynamiquement un hôte à l’inventaire ansible.builtin.add_host: name: web01 groups: webservers ansible_host: 192.168.1.10
Ici, l’hôte web01
est ajouté au groupe webservers
avec une adresse IP
spécifique.
Ajout de plusieurs hôtes avec variables
- name: Ajouter plusieurs hôtes à un groupe ansible.builtin.add_host: name: "{{ item }}" groups: dynamic_group loop: - host1 - host2
Dans cet exemple, deux hôtes (host1
et host2
) sont ajoutés au groupe
dynamic_group
.
Utilisation avancée : ajout d’hôtes avec variables personnalisées
Il est également possible d’ajouter des hôtes avec des variables spécifiques pour chaque hôte. Cela permet de personnaliser les configurations selon les besoins.
- name: Ajouter un hôte avec variables personnalisées ansible.builtin.add_host: name: db01 groups: databases db_port: 5432 db_user: admin
Le module ansible group_by
Le module group_by
permet de créer dynamiquement des groupes d’hôtes en
fonction de faits collectés (facts
). Cela facilite l’exécution conditionnelle
de tâches selon les caractéristiques des hôtes.
Création de groupes selon le système d’exploitation
- name: Grouper les hôtes par OS ansible.builtin.group_by: key: "os_{{ ansible_facts['os_family'] }}"
Les hôtes seront regroupés dans des groupes comme Debian
, RedHat
, etc.
Grouper selon une caractéristique personnalisée
- name: Grouper par nombre de CPU ansible.builtin.group_by: key: "cpu_{{ ansible_facts['processor_cores'] }}"
Ici, les hôtes seront regroupés selon le nombre de cœurs de processeur.
Le module ansible setup
Le module setup
permet de collecter automatiquement des informations
détaillées sur les hôtes distants (appelées “facts”), telles que le système
d’exploitation, la mémoire, les interfaces réseau, etc. Grâce à ses options
avancées, il est possible de limiter la collecte à certains types de faits,
d’exclure des catégories ou de ne récupérer que des informations précises, ce
qui optimise les performances et la confidentialité lors de l’exécution des
playbooks.
Collecte de tous les faits
- name: Collecter tous les facts ansible.builtin.setup:
Collecte sélective de facts
Si le paramètre filter
est fourni, il restreint les faits additionnels
collectés au sous-ensemble spécifié. Valeurs possibles : all,
all_ipv4_addresses, all_ipv6_addresses, apparmor, architecture, caps, chroot,
cmdline, date_time, default_ipv4, default_ipv6, devices, distribution,
distribution_major_version, distribution_release, distribution_version, dns,
effective_group_ids, effective_user_id, env, facter, fips, hardware, interfaces,
is_chroot, iscsi, kernel, local, lsb, machine, machine_id, mounts, network,
ohai, os_family, pkg_mgr, platform, processor, processor_cores, processor_count,
python, python_version, real_user_id, selinux, service_mgr,
ssh_host_key_dsa_public, ssh_host_key_ecdsa_public, ssh_host_key_ed25519_public,
ssh_host_key_rsa_public, ssh_host_pub_keys, ssh_pub_keys, system,
system_capabilities, system_capabilities_enforced, systemd, user, user_dir,
user_gecos, user_gid, user_id, user_shell, user_uid, virtual,
virtualization_role, virtualization_type.
Il est possible de spécifier une liste de valeurs pour collecter un
sous-ensemble plus large. Les valeurs peuvent aussi être précédées d’un point
d’exclamation (!) pour indiquer que ce sous-ensemble ne doit pas être collecté.
Par exemple : !hardware,!network,!virtual,!ohai,!facter
. Si !all
est
spécifié, seul le sous-ensemble minimal est collecté. Pour éviter de collecter
même ce sous-ensemble minimal, utilisez !all,!min
. Pour ne collecter que
certains faits spécifiques, combinez !all,!min
et indiquez les sous-ensembles
désirés. Utilisez le paramètre filter
si vous souhaitez masquer certains faits
collectés.
Exemples d’utilisation avancée :
-
Collecter uniquement les faits sur le matériel et le système :
- name: Collecter uniquement les faits matériels et systèmeansible.builtin.setup:gather_subset:- hardware- system -
Exclure la collecte des faits réseau et de virtualisation :
- name: Exclure les faits réseau et virtualisationansible.builtin.setup:gather_subset:- '!network'- '!virtual' -
Collecter uniquement un sous-ensemble minimal :
- name: Collecter uniquement le minimum de factsansible.builtin.setup:gather_subset:- '!all'- 'min'
Cela permet d’adapter la collecte d’informations à vos besoins et d’accélérer l’exécution de vos playbooks.
Le module ansible wait_for
Le module wait_for
permet d’attendre qu’un port soit ouvert, qu’un fichier
existe, ou qu’une condition soit remplie avant de poursuivre l’exécution du
playbook. Il est très utile pour synchroniser des tâches, par exemple attendre
qu’un service démarre, qu’un fichier soit créé ou supprimé, ou qu’un port réseau
soit disponible.
La valeur par défaut de timeout
est de 5 secondes, mais elle peut être
ajustée selon les besoins. Si la condition n’est pas remplie dans le délai
imparti, la tâche échoue.
Attendre qu’un port soit ouvert
- name: Attendre que le port 80 soit ouvert ansible.builtin.wait_for: port: 80 host: 127.0.0.1 timeout: 30
Dans cet exemple, la tâche attend que le port 80 soit ouvert sur l’hôte local pendant 30 secondes maximum.
Attendre la présence d’un fichier
- name: Attendre qu’un fichier soit créé ansible.builtin.wait_for: path: /tmp/ready.flag state: present timeout: 60
Ici, la tâche attend que le fichier /tmp/ready.flag
existe avant de continuer.
Attendre la disparition d’un fichier
- name: Attendre qu’un fichier soit supprimé ansible.builtin.wait_for: path: /tmp/lockfile state: absent timeout: 120
Dans cet exemple, la tâche attend que le fichier /tmp/lockfile
soit supprimé.
Attendre une chaîne de caractères dans un fichier
Il est possible d’attendre qu’un fichier contienne une chaîne spécifique grâce
au paramètre search_regex
:
- name: Attendre qu'un fichier contienne une chaîne précise ansible.builtin.wait_for: path: /var/log/app.log search_regex: "Service démarré" timeout: 60
Attendre un délai précis avant de continuer
Le paramètre delay
permet de définir un temps d’attente avant de commencer les
vérifications :
- name: Attendre 10 secondes avant de vérifier le port ansible.builtin.wait_for: port: 443 delay: 10 timeout: 60
Utilisation avancée
- Attendre qu’un port soit fermé : utilisez
state: drained
pour attendre que toutes les connexions soient fermées (utile lors de l’arrêt d’un service). - Attendre sur une socket UNIX : utilisez le paramètre
path
pour surveiller la création d’un socket local. - Répétition des vérifications : le paramètre
sleep
permet de définir l’intervalle entre chaque tentative (par défaut 1 seconde).
Résumé des principaux paramètres
port
: numéro de port à surveiller (TCP).host
: adresse IP ou nom d’hôte (par défaut localhost).path
: chemin du fichier ou du socket à surveiller.state
:present
(existe),absent
(n’existe pas),started
(port ouvert),stopped
(port fermé),drained
(toutes les connexions fermées).search_regex
: chaîne ou expression régulière à rechercher dans un fichier.delay
: délai avant la première vérification.sleep
: intervalle entre chaque vérification.timeout
: durée maximale d’attente.
Le module wait_for
est donc un outil polyvalent pour orchestrer des scénarios
d’attente dans vos playbooks Ansible, que ce soit pour la gestion de services,
de fichiers ou de ports réseau.
Le module ansible wait_for_connection
Le module wait_for_connection
attend que la connexion SSH (ou WinRM) soit
disponible avant de poursuivre l’exécution du playbook. Il est particulièrement
utile après un redémarrage, lors du provisionnement d’une machine virtuelle ou
d’un cloud, ou pour s’assurer qu’un hôte est bien prêt avant d’exécuter des
tâches.
Ce module tente de se connecter à l’hôte cible en utilisant la méthode de connexion définie (par défaut SSH). Il effectue des tentatives répétées jusqu’à ce que la connexion soit possible ou que le délai maximal soit atteint.
Attendre la connexion SSH
- name: Attendre que la connexion SSH soit disponible ansible.builtin.wait_for_connection: delay: 5 timeout: 120 sleep: 2
delay
: temps d’attente avant la première tentative (en secondes)timeout
: durée maximale d’attente (en secondes)sleep
: intervalle entre chaque tentative de connexion (par défaut 1 seconde)
Utilisations avancées
- Personnaliser le port ou l’utilisateur : vous pouvez utiliser les
variables d’inventaire
ansible_port
ouansible_user
pour cibler un port ou un utilisateur spécifique lors de la connexion. - Utiliser avec d’autres méthodes de connexion : fonctionne aussi avec WinRM, local, etc., selon la configuration de l’hôte.
- Gestion des erreurs : si la connexion n’est pas possible dans le délai imparti, la tâche échoue et le playbook s’arrête (sauf si ignoré).
Exemple d’attente après un redémarrage
- name: Redémarrer le serveur ansible.builtin.reboot:
- name: Attendre que la connexion SSH revienne ansible.builtin.wait_for_connection: delay: 10 timeout: 300
Ce module est donc essentiel pour fiabiliser les déploiements automatisés, notamment dans les scénarios cloud, CI/CD ou lors de la gestion de clusters, en garantissant que les hôtes sont bien accessibles avant de poursuivre les opérations.
Contrôle de connaissances
Pourquoi ce contrôle ?
Cet contrôle va vous permettre de valider vos connaissances sur le sujet abordé dans le guide. Il comporte des QCM, des questions vrai/faux et des réponses ouvertes à un mot.
🕒 Le chronomètre commence dès que vous cliquez sur Démarrer le test. Vous devrez terminer l’examen avant la fin du temps imparti.
🎯 Pour réussir, vous devez obtenir au moins 80% de bonnes réponses.
💡 Je ne fournis pas directement les réponses aux questions. Cependant, si certaines sont complexes, des pistes d’explication pourront être proposées dans le guide ou après l’examen.
Bonne chance ! 🚀
Conclusion
L’utilisation de ces modules utilitaires permet de rendre vos playbooks Ansible plus dynamiques, robustes et interactifs. Que ce soit pour gérer l’inventaire à la volée, adapter les tâches selon l’environnement, synchroniser les étapes ou faciliter le débogage, ils sont incontournables pour l’automatisation avancée.