Tests et CI/CD avec Ansible 28 min de lecture

Molecule et tests de roles Ansible

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.