Comment couvrez-vous Ansible par des tests?
sobes.tech IA
Réponse de l'IA
J'utilise plusieurs approches principales:
-
Vérification de syntaxe :
Vérifie la correction de la syntaxe des playbooks et rôles avant leur exécution.# Vérification de syntaxe du playbook ansible-playbook --syntax-check playbook.yml -
Idempotence :
Vérifie que la relance du playbook ne modifie pas l'état du système après la première exécution réussie.# Exécuter le playbook ansible-playbook playbook.yml # Relancer avec l'option --check pour vérifier les changements ansible-playbook playbook.yml --checkLa sortie doit afficher
changed=0 run=true. -
Molecule :
Framework pour tester localement ou à distance les rôles Ansible. Permet d'exécuter divers scénarios de test (linting, idempotence, tests de fonctionnalités).# Initialiser Molecule dans le répertoire du rôle molecule init scenario -r default # Exécuter les tests Molecule molecule test -
Tests au niveau du système (Functional Testing) :
Vérifient que le système après application d'Ansible est dans l'état attendu. Utilise:- Testinfra : Vérifie l'état des hôtes et services après application de la configuration.
- InSpec : Framework Ruby pour tester l'état du système avec DSL.
Dans Molecule, on peut intégrer Testinfra:
# section platforms dans molecule/default/molecule.yml platforms: - name: instance image: image_name # ... autres paramètres de plateforme # section verifier verifier: name: testinfra options: v: TrueExemple de test avec Testinfra (
tests/test_default.py) :# importer testinfra def test_nginx_installed(host): # Vérifie si le paquet nginx est installé nginx = host.package("nginx") assert nginx.is_installed def test_nginx_en_exécution(host): # Vérifie si le service nginx est en cours d'exécution nginx = host.service("nginx") assert nginx.is_running def test_nginx_écoute_sur_le_port_80(host): # Vérifie si nginx écoute sur le port 80 assert host.socket("tcp://0.0.0.0:80").is_listening -
Intégration CI/CD :
Automatiser l'exécution des tests dans le pipeline CI/CD après chaque commit ou Pull Request. Par exemple, avec Jenkins, GitLab CI, GitHub Actions.
Le choix de l'approche dépend de la complexité du rôle/playbook et des exigences de couverture des tests. J'utilise généralement une combinaison de ces méthodes.