Molecule – Guide complet (Ansible Testing Framework)
Objectif : Comprendre et utiliser Molecule pour tester des rôles Ansible de manière automatisée, reproductible et fiable.
1. Qu’est-ce que Molecule ?
Molecule est un framework de test pour rôles Ansible. Il permet de vérifier automatiquement qu’un rôle fonctionne correctement dans un environnement simulé (Docker, Podman, LXC, VM).
Il fait partie de l’écosystème [oai_citation:0‡ansible.com](https://www.ansible.com/?utm_source=chatgpt.com) et est utilisé pour :
- tester des rôles Ansible
- valider des playbooks indirectement
- automatiser les tests CI/CD
- éviter les régressions infra
2. Pourquoi utiliser Molecule ?
Problème sans Molecule :
- Les rôles Ansible sont testés “à la main”
- Les erreurs arrivent en production
- Pas de reproductibilité
Avec Molecule :
- Tests automatiques des rôles
- Environnements jetables (containers)
- Reproductibilité totale
3. Architecture d’un test Molecule
role/
└── molecule/
└── default/
├── molecule.yml
├── converge.yml
├── verify.yml
Fichiers importants
molecule.yml→ configuration du scénarioconverge.yml→ exécution du rôleverify.yml→ tests (optionnel mais recommandé)
4. Installation de Molecule
Dans un venv Ansible :
pip install molecule molecule-docker
ou
pip install molecule molecule-podman
Vérification
molecule --version
5. Création d’un rôle avec Molecule
ansible-galaxy init my_role cd my_role molecule init scenario default
Structure générée :
my_role/
└── molecule/
└── default/
6. Exemple de configuration molecule.yml
driver:
name: docker
platforms:
- name: instance
image: "geerlingguy/docker-ubuntu2204-ansible"
privileged: true
provisioner:
name: ansible
verifier:
name: ansible
7. Exemple converge.yml
- name: Converge
hosts: all
tasks:
- name: Include role
include_role:
name: my_role
8. Cycle de test Molecule
molecule create # crée les containers molecule converge # applique le rôle molecule verify # lance les tests molecule destroy # supprime les environnements
Commande complète
molecule test
➡️ Exécute tout le cycle automatiquement
9. Exemple concret (cas réel)
Objectif : installer nginx via Ansible
- name: Install nginx
apt:
name: nginx
state: present
Test Molecule associé
- name: Verify nginx is installed
command: nginx -v
register: nginx_version
changed_when: false
- name: Assert nginx exists
assert:
that:
- nginx_version.rc == 0
10. Debug et inspection
molecule login # entrer dans le container molecule destroy # reset propre molecule test -s default --debug
11. Drivers disponibles
- Docker (le plus courant)
- Podman (rootless)
- LXC (possible mais plus complexe)
- VM (Vagrant)
Important :
Dans un LXC, Docker peut nécessiter nesting=1 côté hôte Proxmox.
Dans un LXC, Docker peut nécessiter nesting=1 côté hôte Proxmox.
12. Bonnes pratiques
- 1 rôle = 1 scénario Molecule
- toujours utiliser verify.yml
- tester sur plusieurs OS si possible
- automatiser via CI/CD
13. Exemple CI (GitHub Actions)
name: Molecule Test
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install dependencies
run: |
python3 -m pip install --upgrade pip
pip install molecule molecule-docker ansible
- name: Run molecule
run: molecule test
14. Résumé
Molecule permet de transformer un rôle Ansible en logiciel testable automatiquement.
- ✔ Réduction des erreurs en production
- ✔ Tests reproductibles
- ✔ Intégration CI/CD
Conclusion : Molecule est l’outil standard pour industrialiser et fiabiliser les rôles Ansible.