Hogyan feded le tesztekkel az Ansible-t?
sobes.tech MI
Válasz az MI-től
Fő megközelítéseket használok:
-
Szintaxis ellenőrzése:
Ellenőrzi a playbookok és szerepkörök szintaxisának helyességét azok futtatása előtt.# Playbook szintaxis ellenőrzése ansible-playbook --syntax-check playbook.yml -
Idempotencia:
Ellenőrzi, hogy a playbook újrafuttatása nem változtatja-e meg a rendszer állapotát az első sikeres futtatás után.# Playbook futtatása ansible-playbook playbook.yml # Ismételt futtatás a --check zászlóval a változások ellenőrzéséhez ansible-playbook playbook.yml --checkA kimenetnek
changed=0 run=true-t kell mutatnia. -
Molecule:
Framework az Ansible szerepkörök helyi vagy távoli teszteléséhez. Lehetővé teszi különböző teszt forgatókönyvek futtatását (linting, idempotencia, funkcionális tesztek).# Molecule inicializálása a szerepkör könyvtárában molecule init scenario -r default # Molecule tesztek futtatása molecule test -
Rendszerszintű tesztek (Functional Testing):
Ellenőrzi, hogy a rendszer az Ansible alkalmazása után a várt állapotban van-e. Használom:- Testinfra: Ellenőrzi a hosztok és szolgáltatások állapotát a konfiguráció alkalmazása után.
- InSpec: Ruby keretrendszer a rendszer állapotának teszteléséhez DSL használatával.
Molecule-ben integrálható a Testinfra:
# platform szekció a molecule/default/molecule.yml-ben platforms: - name: instance image: image_name # ... egyéb platform beállítások # verifier szekció verifier: name: testinfra options: v: TruePélda Testinfra tesztre (
tests/test_default.py):# testinfra importálása def test_nginx_installed(host): # Ellenőrzi, hogy az nginx csomag telepítve van-e nginx = host.package("nginx") assert nginx.is_installed def test_nginx_fut(host): # Ellenőrzi, hogy az nginx szolgáltatás fut-e nginx = host.service("nginx") assert nginx.is_running def test_nginx_port_80_on(host): # Ellenőrzi, hogy az nginx hallgat-e a 80-as porton assert host.socket("tcp://0.0.0.0:80").is_listening -
CI/CD integráció:
Automatizálom a tesztek futtatását a CI/CD pipeline-ban minden commit vagy Pull Request után. Például Jenkins, GitLab CI, GitHub Actions segítségével.
A konkrét megközelítés kiválasztása a szerepkör/playbook összetettségétől és a tesztlefedettség követelményeitől függ. Általában ezek kombinációját használom.