Kako pokrivate Ansible testovima?
sobes.tech АИ
Одговор од АИ
Koristim nekoliko osnovnih pristupa:
-
Sintaksna provera:
Proverava ispravnost sintakse playbook-ova i uloga pre njihovog pokretanja.# Provera sintakse playbook-a ansible-playbook --syntax-check playbook.yml -
Idempotentnost:
Proverava da li ponovno pokretanje playbook-a ne menja stanje sistema nakon prvog uspešnog izvršenja.# Pokretanje playbook-a ansible-playbook playbook.yml # Ponovno pokretanje sa zastavicom --check za proveru promena ansible-playbook playbook.yml --checkIzlaz treba da prikazuje
changed=0 run=true. -
Molecule:
Okvir za lokalno ili udaljeno testiranje uloga Ansible. Omogućava pokretanje različitih scenarija testiranja (linting, idempotence, testiranje funkcija).# Inicijalizacija Molecule u direktorijumu uloge molecule init scenario -r default # Pokretanje Molecule testova molecule test -
Testovi na nivou sistema (Functional Testing):
Proveravaju da li je sistem nakon primene Ansible-a u željenom stanju. Koriste se:- Testinfra: Proverava stanje hostova i servisa nakon primene konfiguracije.
- InSpec: Ruby okvir za testiranje stanja sistema koristeći DSL.
U Molecule-u se može integrisati Testinfra:
# sekcija platforms u molecule/default/molecule.yml platforms: - name: instance image: image_name # ... ostale postavke platforme # sekcija verifier verifier: name: testinfra options: v: TruePrimer testa sa Testinfra (
tests/test_default.py):# import testinfra def test_nginx_is_installed(host): # Proverava da li je paket nginx instaliran nginx = host.package("nginx") assert nginx.is_installed def test_nginx_is_running(host): # Proverava da li je servis nginx pokrenut nginx = host.service("nginx") assert nginx.is_running def test_nginx_listens_on_port_80(host): # Proverava da li nginx sluša na portu 80 assert host.socket("tcp://0.0.0.0:80").is_listening -
Integracija sa CI/CD:
Automatizacija pokretanja testova u CI/CD pipeline-u nakon svakog commita ili Pull Request-a. Na primer, korišćenjem Jenkins-a, GitLab CI, GitHub Actions.
Izbor konkretne metode zavisi od složenosti uloge/playbook-a i zahteva za pokrivenošću testovima. Obično koristim kombinaciju ovih metoda.