Ako pokrývate Ansible testami?
sobes.tech AI
Odpoveď od AI
Používam niekoľko základných prístupov:
-
Syntaxová kontrola:
Kontroluje správnosť syntaxe playbookov a rolí pred ich spustením.# Kontrola syntaxe playbooku ansible-playbook --syntax-check playbook.yml -
Idempotentnosť:
Kontroluje, že opakované spustenie playbooku nezmení stav systému po prvom úspešnom vykonaní.# Spustenie playbooku ansible-playbook playbook.yml # Opakované spustenie s príznakom --check na kontrolu zmien ansible-playbook playbook.yml --checkVýstup by mal ukazovať
changed=0 run=true. -
Molecule:
Rámec na lokálne alebo vzdialené testovanie rolí Ansible. Umožňuje spúšťať rôzne scenáre testovania (linting, idempotence, testovanie funkcií).# Inicializácia Molecule v adresári role molecule init scenario -r default # Spustenie testov Molecule molecule test -
Testy na úrovni systému (Functional Testing):
Kontrolujú, či systém po aplikácii Ansible je v očakávanom stave. Používajú sa:- Testinfra: Kontroluje stav hostiteľov a služieb po aplikácii konfigurácie.
- InSpec: Ruby rámec na testovanie stavu systému s použitím DSL.
V Molecule je možné integrovať Testinfra:
# sekcia platforms v molecule/default/molecule.yml platforms: - name: instance image: image_name # ... ďalšie nastavenia platformy # sekcia verifier verifier: name: testinfra options: v: TruePríklad testu Testinfra (
tests/test_default.py):# import testinfra def test_nginx_is_installed(host): # Kontroluje, či je balík nginx nainštalovaný nginx = host.package("nginx") assert nginx.is_installed def test_nginx_is_running(host): # Kontroluje, či je služba nginx spustená nginx = host.service("nginx") assert nginx.is_running def test_nginx_listens_on_port_80(host): # Kontroluje, či nginx počúva na porte 80 assert host.socket("tcp://0.0.0.0:80").is_listening -
Integrácia s CI/CD:
Automatizujem spúšťanie testov v CI/CD pipeline po každom commite alebo Pull Requeste. Napríklad s použitím Jenkins, GitLab CI, GitHub Actions.
Výber konkrétneho prístupu závisí od zložitosti role/playbooku a požiadaviek na pokrytie testami. Zvyčajne používam kombináciu týchto metód.