# Molecule – Guide complet (Ansible Testing Framework)

<div id="bkmrk-objectif-%3A-comprendr" style="border: 1px solid #2d7ff9; padding: 10px; background: #eef5ff;">**Objectif :** Comprendre et utiliser Molecule pour tester des rôles Ansible de manière automatisée, reproductible et fiable.</div>---

## 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 ou VM).

Il fait partie de l’écosystème Ansible et est utilisé pour :

- tester des rôles Ansible
- valider des infrastructures de manière reproductible
- automatiser les tests CI/CD
- éviter les régressions en production

---

## 2. Pourquoi utiliser Molecule ?

<div id="bkmrk-sans-molecule-%3A-test" style="border: 1px solid #ffcc00; padding: 10px; background: #fff8e1;">**Sans Molecule :**- Tests manuels des rôles
- Erreurs découvertes en production
- Aucune reproductibilité

</div><div id="bkmrk-avec-molecule-%3A-test" style="border: 1px solid #2d7ff9; padding: 10px; background: #eef5ff;">**Avec Molecule :**- Tests automatisés
- Environnements jetables
- Validation systématique des rôles

</div>---

## 3. Le cycle Molecule (IMPORTANT)

Molecule fonctionne selon un cycle standard :

```
create → converge → verify → destroy
```

<table id="bkmrk-%C3%89tape-r%C3%B4le-explicati"><tbody><tr><th>Étape</th><th>Rôle</th><th>Explication</th></tr><tr><td>Create</td><td>Créer l’environnement</td><td>Container ou VM vierge</td></tr><tr><td>Converge</td><td>Appliquer le rôle</td><td>Exécution Ansible</td></tr><tr><td>Verify</td><td>Tester</td><td>Validation du résultat</td></tr><tr><td>Destroy</td><td>Nettoyer</td><td>Suppression de l’environnement</td></tr></tbody></table>

<div id="bkmrk-commande-globale-%3A-m" style="border: 1px solid #2d7ff9; padding: 10px; background: #eef5ff;">**Commande globale :** `molecule test` exécute tout automatiquement.</div>---

## 4. Architecture d’un rôle avec Molecule

```
role/
 └── molecule/
      └── default/
           ├── molecule.yml
           ├── converge.yml
           ├── verify.yml
```

- `molecule.yml` → configuration du scénario
- `converge.yml` → exécution du rôle
- `verify.yml` → tests automatisés

---

## 5. Installation

```
pip install molecule molecule-docker
# ou
pip install molecule molecule-podman
```

---

## 6. Création d’un rôle + Molecule

```
ansible-galaxy init my_role
cd my_role
molecule init scenario default
```

---

## 7. Exemple molecule.yml

```
driver:
  name: docker

platforms:
  - name: instance
    image: geerlingguy/docker-ubuntu2204-ansible
    privileged: true

provisioner:
  name: ansible

verifier:
  name: ansible
```

---

## 8. Exemple converge.yml

```
- name: Converge
  hosts: all
  tasks:
    - name: Include role
      include_role:
        name: my_role
```

---

## 9. Exemple verify.yml

```
- name: Verify nginx installation
  hosts: all
  tasks:

    - name: Check nginx version
      command: nginx -v
      register: result
      changed_when: false

    - name: Assert nginx is installed
      assert:
        that:
          - result.rc == 0
```

---

## 10. Commandes essentielles

```
molecule create
molecule converge
molecule verify
molecule destroy
molecule test
```

---

## 11. Debug

```
molecule login
molecule destroy
molecule test --debug
```

---

## 12. Drivers disponibles

- Docker (standard)
- Podman (rootless)
- LXC (possible mais complexe)
- VM (Vagrant)

<div id="bkmrk-attention-%3A-docker-d" style="border: 1px solid #ffcc00; padding: 10px; background: #fff8e1;">**Attention :** Docker dans LXC nécessite nesting=1 côté Proxmox.</div>---

## 13. Bonnes pratiques

- 1 rôle = 1 scénario Molecule
- toujours ajouter verify.yml
- tester plusieurs distributions si possible
- intégrer CI/CD

---

## 14. Résumé

<div id="bkmrk-molecule-transforme-" style="border: 1px solid #2d7ff9; padding: 10px; background: #eef5ff;">Molecule transforme un rôle Ansible en système testable automatiquement.</div>- ✔ Moins d’erreurs en production
- ✔ Tests reproductibles
- ✔ Infra industrialisée