Jak pokrywasz Ansible testami?
sobes.tech AI
Odpowiedź od AI
Używam kilku głównych podejść:
-
Sprawdzanie składni:
Sprawdza poprawność składni playbooków i ról przed ich uruchomieniem.# Sprawdzanie składni playbooka ansible-playbook --syntax-check playbook.yml -
Idempotencja:
Sprawdza, czy ponowne uruchomienie playbooka nie zmienia stanu systemu po pierwszym pomyślnym wykonaniu.# Uruchomienie playbooka ansible-playbook playbook.yml # Ponowne uruchomienie z flagą --check w celu sprawdzenia zmian ansible-playbook playbook.yml --checkWyjście powinno pokazywać
changed=0 run=true. -
Molecule:
Framework do testowania ról Ansible lokalnie lub zdalnie. Pozwala na uruchamianie różnych scenariuszy testowych (linting, idempotence, testowanie funkcji).# Inicjalizacja Molecule w katalogu roli molecule init scenario -r default # Uruchomienie testów Molecule molecule test -
Testy na poziomie systemu (Functional Testing):
Sprawdzają, czy system po zastosowaniu Ansible jest w oczekiwanym stanie. Używam:- Testinfra: Sprawdza stan hostów i usług po zastosowaniu konfiguracji.
- InSpec: Framework Ruby do testowania stanu systemu z użyciem DSL.
W Molecule można zintegrować Testinfra:
# sekcja platforms w molecule/default/molecule.yml platforms: - name: instance image: image_name # ... inne ustawienia platformy # sekcja verifier verifier: name: testinfra options: v: TruePrzykład testu Testinfra (
tests/test_default.py):# import testinfra def test_nginx_zainstalowany(host): # Sprawdza, czy pakiet nginx jest zainstalowany nginx = host.package("nginx") assert nginx.is_installed def test_nginx_uruchomiony(host): # Sprawdza, czy usługa nginx jest uruchomiona nginx = host.service("nginx") assert nginx.is_running def test_nginx_słucha_na_port_80(host): # Sprawdza, czy nginx słucha na porcie 80 assert host.socket("tcp://0.0.0.0:80").is_listening -
Integracja CI/CD:
Automatyzuję uruchamianie testów w pipeline CI/CD po każdym commicie lub Pull Request. Na przykład, używając Jenkins, GitLab CI, GitHub Actions.
Wybór konkretnego podejścia zależy od złożoności roli/playbooka i wymagań dotyczących pokrycia testami. Zazwyczaj używam kombinacji tych metod.