Qu'est-ce que Molecule ?
Molecule est le framework de test officiel pour les roles Ansible. Il automatise la creation d'instances de test, l'execution des roles et la verification des resultats.
Installation
pip install molecule molecule-docker ansible-lint
Initialiser Molecule dans un role
# Dans le repertoire du role
cd roles/mon_role
molecule init scenario --driver-name docker
# Structure creee :
# molecule/
# default/
# molecule.yml # Configuration du scenario
# converge.yml # Playbook de test
# verify.yml # Tests de verification
# prepare.yml # Preparation de l'instance
Configuration molecule.yml
---
dependency:
name: galaxy
options:
requirements-file: requirements.yml
driver:
name: docker
platforms:
- name: instance-debian
image: debian:bullseye
pre_build_image: true
command: /sbin/init
privileged: true
volumes:
- /sys/fs/cgroup:/sys/fs/cgroup:ro
- name: instance-ubuntu
image: ubuntu:22.04
pre_build_image: true
command: /sbin/init
privileged: true
provisioner:
name: ansible
playbooks:
converge: converge.yml
verify: verify.yml
inventory:
group_vars:
all:
app_port: 8080
app_user: www-data
verifier:
name: ansible
Playbook de convergence (converge.yml)
---
- name: Converge
hosts: all
become: true
roles:
- role: mon_role
vars:
app_version: "1.0.0"
app_env: test
Tests de verification (verify.yml)
---
- name: Verify
hosts: all
become: true
tasks:
- name: Verifier que le service est actif
ansible.builtin.systemd:
name: mon-app
state: started
check_mode: true
register: service_status
failed_when: service_status.changed
- name: Verifier que le port est en ecoute
ansible.builtin.wait_for:
port: 8080
timeout: 10
- name: Verifier le fichier de configuration
ansible.builtin.stat:
path: /etc/mon-app/config.yml
register: config_file
failed_when: not config_file.stat.exists
- name: Verifier le contenu de la configuration
ansible.builtin.slurp:
src: /etc/mon-app/config.yml
register: config_content
- name: Valider les parametres
ansible.builtin.assert:
that:
- "'port: 8080' in (config_content.content | b64decode)"
- "'env: test' in (config_content.content | b64decode)"
Commandes Molecule
# Cycle complet de test
molecule test
# Etapes individuelles
molecule create # Creer les instances
molecule converge # Appliquer le role
molecule verify # Executer les tests
molecule destroy # Supprimer les instances
molecule login # Se connecter a l'instance
# Mode iteratif (sans detruire entre les tests)
molecule converge && molecule verify
Workflow : Utilisez molecule converge en boucle pendant le developpement, puis molecule test pour la validation finale.