Molecule : tests avancés
Molecule à niveau basique teste un rôle dans un conteneur Docker. À niveau avancé, il teste sur plusieurs distributions simultanément, vérifie l'état réel avec Testinfra, et valide chaque commit en CI.
molecule.yml multi-plateformes
driver:
name: docker
platforms:
- name: debian13
image: geerlingguy/docker-debian13-ansible
pre_build_image: true
- name: ubuntu2204
image: geerlingguy/docker-ubuntu2204-ansible
pre_build_image: true
- name: rockylinux9
image: geerlingguy/docker-rockylinux9-ansible
pre_build_image: true
verifier:
name: testinfraTestinfra : vérifier l'état réel
# molecule/default/tests/test_nginx.py
def test_nginx_installed(host):
assert host.package("nginx").is_installed
def test_nginx_running(host):
svc = host.service("nginx")
assert svc.is_running
assert svc.is_enabled
def test_nginx_listening(host):
assert host.socket("tcp://0.0.0.0:80").is_listening
def test_config_valid(host):
assert host.run("nginx -t").rc == 0Cycle de test
molecule test # cycle complet
molecule converge # appliquer le rôle
molecule verify # lancer les tests
molecule idempotence # vérifier changed=0 au 2e run
molecule login # SSH dans l'instance pour debugGitHub Actions
name: Molecule
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with: {python-version: "3.11"}
- run: pip install ansible molecule molecule-plugins[docker] testinfra pytest
- run: molecule test
working-directory: roles/nginxGitLab CI
molecule:
stage: test
image: python:3.11
services: [docker:dind]
variables:
DOCKER_HOST: tcp://docker:2376
script:
- pip install ansible molecule molecule-plugins[docker] testinfra
- cd roles/nginx && molecule test
only:
changes: [roles/nginx/**]