Comprendre et utiliser les modules Ansible
Mise à jour :
Les modules Ansible sont les briques essentiels pour automatiser la gestion de configuration et l’exécution de tâches sur des systèmes distants. Ils permettent de simplifier les opérations en fournissant des abstractions de haut niveau pour interagir avec divers systèmes, services et applications. Dans ce guide, je vous présente les principaux modules Ansible, leur organisation en collections, et comment les utiliser efficacement dans vos playbooks.**
Introduction aux modules Ansible
Les modules Ansible sont au cœur de l’automatisation. Un module est une petite unité de code autonome qui exécute une tâche spécifique sur une machine cible. Par exemple : copier un fichier, redémarrer un service, créer un utilisateur ou interroger une API.
Ils permettent d’éviter d’écrire des scripts shell longs et complexes : dans un playbook, on déclare ce qu’on veut faire, et le module s’occupe des détails. Ansible se charge d’exécuter ce code sur les hôtes cibles via SSH (ou WinRM pour Windows), puis de rapporter le résultat.
Définition et rôle des modules
Un module est appelé depuis un playbook ou une ligne de commande. Par
exemple, ce playbook utilise le module copy
:
- name: Copier un fichier sur le serveur hosts: web tasks: - name: Copier index.html ansible.builtin.copy: src: files/index.html dest: /var/www/html/index.html owner: www-data group: www-data mode: '0644'
Ici, copy
sait comment transférer le fichier et vérifier son état. Il gère
aussi l’idempotence : si le fichier est déjà présent et inchangé, il ne fera
rien.
Différence entre modules et plugins
Attention : un module agit (il exécute une tâche), tandis qu’un plugin étend les fonctionnalités d’Ansible (par exemple, les stratégies de boucles, les filtres, les callbacks). Ils jouent des rôles complémentaires, mais ils sont organisés et utilisés différemment.
Organisation en collections
Depuis Ansible 2.10, les modules sont regroupés dans des collections. Une collection est un paquet structuré qui peut contenir :
- Des modules
- Des rôles
- Des plugins
- De la documentation
- Des tests
Par exemple, la collection officielle ansible.posix
contient des modules pour
les systèmes POSIX (comme ansible.posix.authorized_key
), tandis que
community.mysql
regroupe les modules pour MySQL.
Pour installer une collection, on utilise :
ansible-galaxy collection install community.mysql
Et dans un playbook, on appelle le module avec son namespace :
- name: Créer une base MySQL community.mysql.mysql_db: name: ma_base state: present
Cette organisation facilite la modularité, les mises à jour indépendantes et l’extension des capacités d’Ansible sans attendre une nouvelle version du cœur du projet. Vous pouvez explorer toutes les collections disponibles sur Ansible Galaxy ↗.
Pour voir les modules disponibles dans une collection :
ansible-doc -l community.mysql
Les collections rendent Ansible plus puissant et évolutif, tout en gardant une approche modulaire et claire.
Les différents collections
Il existe deux types de collections :
- Collections officielles : regroupant celles maintenues par Red Hat ou la communauté, elles sont testées et validées. Elles sont souvent mises à jour avec les nouvelles versions d’Ansible.
- Collections privées : développées en interne, elles contiennent des modules et rôles spécifiques à votre organisation. Elles permettent de partager des tâches communes entre équipes.
Les collections Ansible Officielles
Les collections officielles Ansible regroupent des modules, rôles, plugins et documentations validés par l’équipe Ansible. Elles sont maintenues soit par Red Hat (éditeur d’Ansible), soit par la communauté, mais avec un label de qualité.
Avant Ansible 2.10, tout était inclus directement dans le projet principal. Mais avec l’essor des intégrations cloud, réseau, conteneurs et autres, il a fallu séparer les modules pour les rendre plus modulaires et plus facilement maintenables.
Pourquoi utiliser les collections officielles ?
- Elles garantissent une compatibilité avec les versions récentes d’Ansible.
- Elles suivent des normes de qualité (tests automatisés, documentation complète).
- Elles sont régulièrement mises à jour, indépendamment du cycle Ansible principal.
- Elles couvrent un large spectre : cloud (AWS, Azure, GCP), bases de données, sécurité, réseaux, stockage.
Exemples de collections majeures
Voici quelques collections officielles incontournables :
Collection | Description |
---|---|
ansible.builtin | Modules de base inclus dans Ansible (ex. copy, yum). |
ansible.posix | Modules POSIX (clés SSH, ACL, limites système). |
community.general | Modules généraux maintenus par la communauté. |
amazon.aws | Modules pour AWS (EC2, S3, RDS, etc.). |
azure.azcollection | Modules pour Microsoft Azure. |
google.cloud | Modules pour Google Cloud Platform. |
community.mysql | Modules pour gérer MySQL et MariaDB. |
community.docker | Modules pour Docker et conteneurs. |
community.network | Modules pour la gestion des réseaux. |
Où les trouver et comment les installer
Toutes les collections sont disponibles sur Ansible Galaxy ↗. Pour installer une collection, utilisez :
ansible-galaxy collection install amazon.aws
Pour voir toutes les collections installées localement :
ansible-galaxy collection list
Pour consulter la documentation et les exemples d’une collection :
ansible-doc -l amazon.aws
Bonnes pratiques
- Toujours indiquer le namespace complet (
community.mysql.mysql_db
et non justemysql_db
). - Vérifier la compatibilité des versions Ansible et des collections dans la documentation.
- Surveiller les mises à jour régulières, car elles incluent souvent des correctifs et des optimisations.
Les collections officielles sont un excellent point de départ pour construire des playbooks robustes et adaptés aux environnements modernes. Vous gagnez ainsi en efficacité et en sécurité tout en restant aligné avec les meilleures pratiques Ansible.
La collection ansible.builtin : modules classés par catégories
La collection ansible.builtin
regroupe tous les modules de base inclus
par défaut dans Ansible. Pas besoin de les installer séparément, ils sont
toujours disponibles.
Ils couvrent les tâches fondamentales de gestion des systèmes, de manipulation de fichiers, de contrôle des services, de gestion réseau, etc. Voici une sélection des principaux modules classés par catégorie.
Les modules d’exécution
Ces modules permettent d’exécuter des commandes ou des scripts sur les hôtes distants.
- raw : Exécute des commandes sans passer par Python.
- shell : Exécute des commandes shell sur les hôtes distants.
- command : Exécute des commandes sur les hôtes distants.
- script : Exécute des scripts sur les hôtes distants.
Plus d’informations sur les modules d’exécution de commandes : Exécution de commandes.
⚙️ Modules de gestion des services
Ces modules permettent de gérer les services sur les hôtes distants.
- systemd : Gère les services et unités systemd.
- service : Gère les services système.
- supervisorctl : Gère les processus supervisés par Supervisor.
Plus d’informations sur les modules de gestion des services : Gestion des services.
📁 Modules de gestion des fichiers
Ces modules permettent de manipuler les fichiers et répertoires sur les hôtes distants.
- copy : Copie des fichiers depuis le contrôleur vers les hôtes.
- file : Gère les attributs des fichiers et répertoires.
- template : Génère des fichiers à partir de modèles Jinja2.
- lineinfile : Gère des lignes spécifiques dans un fichier.
- blockinfile : Gère des blocs de texte dans un fichier.
- replace : Remplace des expressions régulières dans un fichier.
- assemble : Assemble des fichiers à partir de fragments.
- unarchive : Décompresse des archives.
- fetch : Récupère des fichiers depuis les hôtes distants.
- stat : Récupère les informations sur les fichiers.
- slurp : Récupère le contenu binaire d’un fichier.
- tempfile : Gère les fichiers temporaires.
- git : Gère les dépôts Git.
Plus d’informations sur les modules de gestion des fichiers : Gestion des fichiers.
🧪 Modules de test
Ces modules sont utiles pour tester des conditions ou des résultats dans les playbooks.
- assert : Vérifie que des expressions sont vraies.
- fail : Provoque un échec avec un message personnalisé.
- validate_argument_spec : Valide les arguments passés aux rôles ou tâches.
Plus d’informations sur les modules de test : Assertions et validation.
🔄 Modules de contrôle de flux
Ces modules permettent de contrôler le flux d’exécution des playbooks.
- include_tasks : Inclut dynamiquement une liste de tâches.
- import_tasks : Importe statiquement une liste de tâches.
- include_role : Inclut dynamiquement un rôle.
- import_role : Importe statiquement un rôle.
- meta : Exécute des actions spéciales comme
end_play
ouflush_handlers
.
Plus d’informations sur les modules de contrôle de flux : Contrôle de flux.
🗃️ Modules de gestion des utilisateurs et groupes
Ces modules gèrent les utilisateurs et groupes sur les hôtes.
- user : Gère les comptes utilisateurs.
- group : Gère les groupes d’utilisateurs.
🧰 Modules système
Ces modules permettent de gérer les composants fondamentaux du système d’exploitation.
- service : Gère les services système.
- cron : Gère les tâches planifiées via cron.
- hostname : Gère le nom d’hôte.
- setup : Récupère les faits système des hôtes distants.
- mount : Gère les points de montage.
- sysctl : Gère les paramètres du noyau via sysctl.
- selinux : Gère l’état de SELinux.
🧩 Modules divers
Ces modules offrent des fonctionnalités supplémentaires variées.
- set_fact : Définit des variables d’hôte ou de groupe.
- add_host : Ajoute dynamiquement des hôtes à l’inventaire.
- group_by : Crée des groupes dynamiquement en fonction des faits.
- setup : Récupère les faits système des hôtes distants.
La collection community.general
La « boîte à outils » la plus vaste et la plus polyvalente de l’écosystème Ansible. Si vous ignorez encore quelle collection importer pour accomplir une tâche précise, il y a de fortes chances que la réponse se trouve ici.
Présentation
Parmi les milliers de modules que compte aujourd’hui l’univers Ansible, ceux de
la collection community.general
occupent une place particulière.
Historiquement, ils formaient le « core » du projet ; ils ont ensuite été
extraits afin de permettre un rythme de publication plus rapide et d’offrir un
espace d’incubation ouvert à la communauté. La collection réunit désormais
plus de 700 modules et plugins couvrant la quasi‑totalité des besoins d’un
administrateur ou d’un développeur : configuration du système, gestion des
paquets, intégration de services SaaS, orchestration de conteneurs, supervision,
etc. En pratique, elle sert à la fois de boîte à outils généraliste pour les
petits projets et de tremplin pour les modules qui n’ont pas (encore) trouvé
leur propre maison.
Portée fonctionnelle
Pour vous repérer parmi cet inventaire XXL, il est utile d’avoir en tête la cartographie suivante. À chaque domaine je rattache quelques modules emblématiques. Pensez‑la comme un plan de métro : les stations visibles ne sont qu’une portion des arrêts disponibles, mais elles donnent le ton de la ligne.
Domaine | Exemples de modules | Pour quoi faire ? |
---|---|---|
Système & OS | alternatives , kernel_blacklist , timezone , lvg , lxd_container | Désactiver un module noyau, gérer l’heure locale, créer des volumes LVM ou lancer des conteneurs LXD. |
Gestion de paquets & langages | apk , pipx , npm , snap | Installer des dépendances, publier des CLIs, empaqueter des applications. |
Réseau & sécurité | ufw , awall , firewalld_policy , keycloak_client | Ouvrir un port, définir une politique de pare‑feu, approvisionner un client OIDC. |
Cloud & virtualisation | ali_instance , proxmox , vmadm | Créer une VM sur Alibaba Cloud, déployer un hôte sur Proxmox ou Triton. |
CI/CD & SCM | git_config , gitlab_group , jenkins_job | Ajuster la configuration Git côté client, gérer des groupes GitLab, déclarer un job Jenkins. |
Notifications & monitoring | slack , twilio , pingdom | Envoyer une alerte Slack, déclencher un SMS, créer un check HTTP. |
Bases de données & stockage | vertica_user , aerospike_migrations , btrfs_subvolume | Gérer les utilisateurs Vertica, piloter les migrations Aerospike, créer un sous‑volume Btrfs. |
Utilitaires divers | archive , read_csv , wakeonlan | (Dé)compresser des fichiers, lire un CSV en variable, réveiller un poste via WoL. |
Gardez en tête que le préfixe d’un module est souvent votre meilleur guide
d’orientation. Par exemple, tous les modules commençant par gitlab_
visent
l’API GitLab, tandis que ceux en vertica_
parlent exclusivement de la base
Vertica.
Cycle de vie des modules
À mesure que la collection grandit, certains modules en sortent : dès qu’un
groupe fonctionnel atteint une masse critique et qu’une équipe de maintenance se
déclare volontaire, il migre vers une nouvelle collection — par exemple
community.mysql
ou ansible.amazon
. L’ancien module est d’abord marqué
deprecated, puis supprimé après deux versions majeures.
Pour anticiper ces changements :
- Parcourez le changelog à chaque nouvelle release ; il décrit les nouveautés, les corrections et les dépréciations.
- Surveillez la section Porting Guides qui liste les renommages d’options, les arguments supprimés et les modules déplacés.
- Exécutez régulièrement
ansible‑lint
ouansible‑playbook --check
sur un environnement de test afin de détecter les avertissements avant qu’ils ne deviennent bloquants.
Conseils de production
Même si community.general
est fiable, son ampleur implique quelques règles de
saine gestion :
- Verrouillez toujours la version dans vos pipelines CI/CD pour garantir la reproductibilité des déploiements.
- Automatisez une veille : abonnez‑vous au flux RSS GitHub des releases,
programmez un job cron qui scrute la page Galaxy ou rejoignez le canal Matrix
#ansible-community
. - Écrivez des tests Molecule pour les tâches qui manipulent votre infrastructure vitale. Mieux vaut découvrir un changement de comportement dans un conteneur Docker que sur un cluster de production.
- Contribuez si vous repérez un bug ou une coquille de documentation. La PR est souvent plus rapide que l’attente d’un correctif externe, et c’est aussi comme cela que l’on fait vivre la collection.
Conclusion
Les modules Ansible sont des outils puissants pour automatiser la gestion de la configuration et l’exécution de tâches sur des systèmes distants. En comprenant leur fonctionnement et en utilisant les collections appropriées, vous pouvez tirer le meilleur parti d’Ansible pour vos besoins d’automatisation. N’hésitez pas à explorer la documentation officielle et à expérimenter avec différents modules pour découvrir tout ce qu’Ansible peut offrir.