benwebber.tap
ansible-tap
Producent protokołu testowania czegokolwiek (TAP) dla Ansible.
Ten plugin callback pozwala na pisanie zestawów testowych TAP jako playbooków Ansible. Można to traktować jako alternatywę dla Serverspec i Testinfra tylko w Ansible.
Wymagania
- Ansible 2
- Python 2.7+
Instalacja
Chociaż nie możesz zainstalować tego pluginu bezpośrednio za pomocą ansible-galaxy
, możesz użyć ansible-galaxy
, aby go pobrać:
ansible-galaxy install -p roles/ benwebber.tap
Przejdź do katalogu roli i uruchom make install
:
cd roles/benwebber.tap
make install
To skopiuje plugin do ~/.ansible/plugins/callback
.
Użytkowanie
Skonfiguruj Ansible, aby używał tego pluginu jako standardowego callbacka wyjścia:
ANSIBLE_STDOUT_CALLBACK=tap ansible-playbook -i hosts test.yml -l hostname
Możesz także ustawić go jako domyślny callback w ansible.cfg
:
[defaults]
stdout_callback=tap
Pisanie testów Ansible
Domyślnie Ansible przerwie odgrywanie, jeśli jakiekolwiek zadanie się nie powiedzie. Ustaw ignore_errors: true
na wszystkich testach, aby wyłączyć to zachowanie:
- name: sprawdzenie, czy usługa działa
command: systemctl is-active service
register: is_active
tags: diagnostic
- name: upewnij się, że usługa działa
assert:
that: is_active.rc == 0
ignore_errors: true
To zapewni, że Ansible wykona cały zestaw testów, z wyjątkiem niespodziewanej awarii.
Jeśli masz dużo testów, możesz ustawić ignore_errors: true
na block
:
- name: sprawdzenie, czy usługa działa
command: systemctl is-active service
register: is_active
tags: diagnostic
- name: sprawdzenie, czy usługa jest włączona
command: systemctl is-enabled service
register: is_enabled
tags: diagnostic
- ignore_errors: true
block:
- name: upewnij się, że usługa działa
assert:
that: is_active.rc == 0
- name: upewnij się, że usługa jest włączona
assert:
that: is_enabled.rc == 0
Jeśli zadanie się nie powiedzie, plugin wyświetli informacje o problemach w formie osadzonego dokumentu YAML:
not ok - assert: upewnij się, że zmienna jest ustawiona
---
_ansible_no_log: false
_ansible_verbose_always: true
assertion: status jest zdefiniowany
changed: false
evaluated_to: false
failed: true
invocation:
module_args:
that: status jest zdefiniowany
module_name: assert
...
Wykluczanie zadań z strumienia TAP
Często wynik testu będzie zależał od wcześniejszych zadań. Naturalnie, chcesz wykluczyć te zadania przygotowawcze z strumienia TAP.
Aby to zrobić, po prostu oznacz zadania przygotowawcze tagiem diagnostic
:
- name: przygotowanie następnego testu
command: 'true'
register: true_
tags: diagnostic
- name: powinno zawsze przechodzić
assert:
that: true_.rc == 0
ignore_errors: true
Plugin callback wydrukuje linie diagnostyczne zamiast linii testowych:
# command: przygotowanie następnego testu
ok - assert: powinno zawsze przechodzić
W przeciwieństwie do indywidualnych przypadków testowych, prawdopodobnie nie chcesz ignorować błędów w przypadku tego rodzaju zadania. Awarie oznaczałyby błąd w zbiorze testów, a nie błąd testu.
Oczekiwane awarie i niespodziewane sukcesy
TAP wspiera dyrektywę TODO
, aby zignorować testy funkcji, które nie zostały jeszcze wdrożone.
Jeśli test oznaczony jako TODO
się nie powiedzie, konsumenci TAP uznają to za oczekiwaną awarię. Podobnie, jeśli test oznaczony jako TODO
przejdzie, konsumenci TAP uznają to za niespodziewany sukces.
Oznacz oczekiwane awarie tagiem TODO
:
- name: oczekiwana awaria
assert:
that: false
ignore_errors: true
tags: TODO
To spowoduje wyjście dyrektywy # TODO
w strumieniu TAP:
not ok - assert: oczekiwana awaria # TODO
Jeśli test przejdzie, otrzymasz wyjście niespodziewanego sukcesu:
ok - assert: oczekiwana awaria # TODO
Pomijanie testów
TAP wspiera również dyrektywę SKIP
, aby zignorować konkretne testy.
Ten callback wykorzystuje instrukcję when
Ansible do kontrolowania pomijanych testów:
- name: to jest pomijane zadanie
assert:
that: false
ignore_errors: true
when: false
Przyczyna pominięcia testu pojawi się w linii testowej:
ok - assert: pominięte # SKIP Sprawdzanie warunków nie powiodło się
Przykład
Katalog tests/
zawiera przykładowy zestaw testów, który produkuje wszystkie możliwe wyniki testów.
Po zainstalowaniu pluginu uruchom zestaw testów:
ANSIBLE_STDOUT_CALLBACK=tap ansible-playbook -i localhost, -c local tests/playbooks/test_multiple_with_failures.yml
Otrzymasz następujący strumień TAP, który możesz przekazać dowolnemu konsumentowi TAP.
TAP version 13
# command: przygotowanie następnego testu
ok - assert: przechodzi
not ok - assert: niepowodzenie
---
_ansible_no_log: false
_ansible_verbose_always: true
assertion: false
changed: false
evaluated_to: false
failed: true
invocation:
module_args:
that: false
module_name: assert
...
not ok - assert: oczekiwana awaria # TODO
ok - assert: niespodziewany sukces # TODO
ok - assert: pominięte # SKIP Sprawdzanie warunków nie powiodło się
1..5
Zastrzeżenia
Obecnie ten plugin wspiera tylko uruchamianie testów na jednym hoście na raz. Specyfikacja TAP nie opisuje sposobu łączenia wielu strumieni wyjściowych.
Licencja
MIT
Test Anything Protocol (TAP) producer callback plugin
ansible-galaxy install benwebber.tap