Ansible-ı testlərlə necə əhatə edirsiniz?
sobes.tech Süni İntellekt
AI-dan cavab
Əsas yanaşmaları istifadə edirəm:
-
Sintaksis yoxlaması:
Playbookların və rolların sintaksisinin düzgünlüyünü onların işlədilməsindən əvvəl yoxlayır.# Playbook-un sintaksisini yoxlamaq ansible-playbook --syntax-check playbook.yml -
İdempotentlik:
Playbook-un təkrarlanan işlədilməsi ilk uğurlu icra etdikdən sonra sistem vəziyyətini dəyişmədiyini yoxlayır.# Playbook-u işlət ansible-playbook playbook.yml # Dəyişiklikləri yoxlamaq üçün --check bayrağı ilə yenidən işlət ansible-playbook playbook.yml --checkÇıxış
changed=0 run=truegöstərməlidir. -
Molecule:
Ansible rollarını yerli və ya uzaq test etmək üçün framework. Müxtəlif test ssenarilərini (linting, idempotence, funksional testlər) işlətməyə imkan verir.# Rolların qovluğunda Molecule-ni başlatmaq molecule init scenario -r default # Molecule testlərini işlətmək molecule test -
Sistem səviyyəsində testlər (Functional Testing):
Ansible tətbiq edildikdən sonra sistemin gözlənilən vəziyyətdə olub-olmadığını yoxlayır. Mən istifadə edirəm:- Testinfra: Konfiqurasiya tətbiq edildikdən sonra hostların və xidmətlərin vəziyyətini yoxlayır.
- InSpec: DSL istifadə edərək sistem vəziyyətini test etmək üçün Ruby framework.
Molecule-də Testinfra ilə inteqrasiya etmək mümkündür:
# molecule/default/molecule.yml-də platformlar bölməsi platforms: - name: instance image: image_name # ... digər platforma parametrləri # verifier bölməsi verifier: name: testinfra options: v: TrueTestinfra ilə nümunə testi (
tests/test_default.py):# testinfra-ni idxal et def test_nginx_quraşdırılıb(host): # nginx paketinin quraşdırıldığını yoxlayır nginx = host.package("nginx") assert nginx.is_installed def test_nginx işləyir(host): # nginx-in işlədiyini yoxlayır nginx = host.service("nginx") assert nginx.is_running def test_nginx 80 portunda dinləyir(host): # nginx-in 80 portunda dinlədiyini yoxlayır assert host.socket("tcp://0.0.0.0:80").is_listening -
CI/CD inteqrasiyası:
Hər commit və ya Pull Request-dən sonra testlərin CI/CD boru xəttində avtomatik işləməsini təmin edirəm. Məsələn, Jenkins, GitLab CI, GitHub Actions istifadə edərək.
Xüsusi yanaşmanın seçimi rol/playbook-un mürəkkəbliyinə və test əhatə dairəsi tələblərinə bağlıdır. Adətən, bu metodların birləşməsini istifadə edirəm.