Skip to main content

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énario
  • converge.yml → exécution du rôle
  • verify.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.

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.