Hoe dekt u Ansible af met tests?
sobes.tech AI
Antwoord van AI
Ik gebruik verschillende hoofdbenaderingen:
-
Syntaxiscontrole:
Controleert de correctheid van de syntaxis van playbooks en rollen voordat ze worden uitgevoerd.# Syntaxiscontrole van het playbook ansible-playbook --syntax-check playbook.yml -
Idempotentie:
Controleert of het herhaald uitvoeren van het playbook de systeemstatus niet wijzigt na de eerste succesvolle uitvoering.# Voer het playbook uit ansible-playbook playbook.yml # Herhaal met de flag --check om wijzigingen te controleren ansible-playbook playbook.yml --checkDe uitvoer moet
changed=0 run=truetonen. -
Molecule:
Framework voor het testen van Ansible-rollen lokaal of op afstand. Maakt het mogelijk om verschillende testscenario's uit te voeren (linting, idempotentie, functietests).# Initialiseer Molecule in de rolmap molecule init scenario -r default # Voer de Molecule-tests uit molecule test -
Systeemniveau tests (Functional Testing):
Controleren of het systeem na toepassing van Ansible zich in de verwachte staat bevindt. Gebruik:- Testinfra: Controleert de toestand van hosts en services na toepassing van de configuratie.
- InSpec: Ruby-framework voor het testen van de systeemstatus met behulp van DSL.
In Molecule kan Testinfra worden geïntegreerd:
# platforms-sectie in molecule/default/molecule.yml platforms: - name: instance image: image_name # ... andere platforminstellingen # verifier-sectie verifier: name: testinfra options: v: TrueVoorbeeld van een Testinfra-test (
tests/test_default.py):# importeer testinfra def test_nginx_geïnstalleerd(host): # Controleert of het nginx-pakket is geïnstalleerd nginx = host.package("nginx") assert nginx.is_installed def test_nginx_in_gang(host): # Controleert of de nginx-service actief is nginx = host.service("nginx") assert nginx.is_running def test_nginx_luistert_op_poort_80(host): # Controleert of nginx luistert op poort 80 assert host.socket("tcp://0.0.0.0:80").is_listening -
CI/CD-integratie:
Automatiseer het uitvoeren van tests in de CI/CD-pijplijn na elke commit of Pull Request. Bijvoorbeeld met Jenkins, GitLab CI, GitHub Actions.
De keuze van de specifieke aanpak hangt af van de complexiteit van de rol/playbook en de vereisten voor testdekking. Ik gebruik meestal een combinatie van deze methoden.