benwebber.tap
ansible-tap
Ein Produzent für das Test Anything Protocol (TAP) für Ansible.
Dieses Callback-Plugin ermöglicht es Ihnen, TAP-Test-Suiten als Ansible-Playbooks zu schreiben. Betrachten Sie es als eine Alternative zu Serverspec und Testinfra, die nur Ansible verwenden.
Anforderungen
- Ansible 2
- Python 2.7+
Installation
Obwohl Sie dieses Plugin nicht direkt mit ansible-galaxy
installieren können, können Sie es mit ansible-galaxy
herunterladen:
ansible-galaxy install -p roles/ benwebber.tap
Navigieren Sie zum Rollverzeichnis und führen Sie make install
aus:
cd roles/benwebber.tap
make install
Dies kopiert das Plugin nach ~/.ansible/plugins/callback
.
Verwendung
Konfigurieren Sie Ansible, um dieses Plugin als Standardausgabe-Callback zu verwenden:
ANSIBLE_STDOUT_CALLBACK=tap ansible-playbook -i hosts test.yml -l hostname
Sie können es auch in ansible.cfg
als Standardcallback festlegen:
[defaults]
stdout_callback=tap
Schreiben von Ansible-Tests
Standardmäßig wird Ansible das Play abbrechen, wenn eine Aufgabe fehlschlägt. Setzen Sie ignore_errors: true
für alle Tests, um dieses Verhalten zu deaktivieren:
- name: überprüfen, ob der Dienst läuft
command: systemctl is-active service
register: is_active
tags: diagnostic
- name: bestätigen, dass der Dienst läuft
assert:
that: is_active.rc == 0
ignore_errors: true
Dies stellt sicher, dass Ansible die gesamte Testsuite ausführt, außer bei unerwarteten Fehlern.
Wenn Sie viele Tests haben, können Sie ignore_errors: true
auf einen block
setzen:
- name: überprüfen, ob der Dienst läuft
command: systemctl is-active service
register: is_active
tags: diagnostic
- name: überprüfen, ob der Dienst aktiviert ist
command: systemctl is-enabled service
register: is_enabled
tags: diagnostic
- ignore_errors: true
block:
- name: bestätigen, dass der Dienst läuft
assert:
that: is_active.rc == 0
- name: bestätigen, dass der Dienst aktiviert ist
assert:
that: is_enabled.rc == 0
Wenn eine Aufgabe fehlschlägt, gibt das Plugin Fehlersuche-Informationen als eingebettetes YAML-Dokument aus:
not ok - assert: bestätigen, dass die Variable gesetzt ist
---
_ansible_no_log: false
_ansible_verbose_always: true
assertion: status ist definiert
changed: false
evaluated_to: false
failed: true
invocation:
module_args:
that: status ist definiert
module_name: assert
...
Aufgaben vom TAP-Stream ausschließen
Oft hängt das Ergebnis eines Tests von vorherigen Aufgaben ab. Sie möchten diese Setup-Aufgaben natürlich aus dem TAP-Stream ausschließen.
Um dies zu tun, kennzeichnen Sie einfach die Setup-Aufgaben mit dem diagnostic
-Tag:
- name: nächste Test vorbereiten
command: 'true'
register: true_
tags: diagnostic
- name: sollte immer bestehen
assert:
that: true_.rc == 0
ignore_errors: true
Das Callback-Plugin wird diagnostische Zeilen anstelle von Testzeilen ausgeben:
# command: nächste Test vorbereiten
ok - assert: sollte immer bestehen
Im Gegensatz zu einzelnen Testfällen möchten Sie wahrscheinlich keine Fehler für diesen Aufgabentyp ignorieren. Fehler würden einen Fehler in der Testsuite und nicht einen Testfehler darstellen.
Erwartete Fehler und unerwartete Erfolge
TAP unterstützt eine TODO
-Anweisung, um Tests für Funktionen zu ignorieren, die noch nicht implementiert sind.
Wenn ein mit TODO
gekennzeichneter Test fehlschlägt, betrachten TAP-Konsumenten dies als erwarteten Fehler. Ebenso, wenn ein mit TODO
gekennzeichneter Test besteht, betrachten TAP-Konsumenten dies als unerwarteten Erfolg.
Kennzeichnen Sie erwartete Fehler mit TODO
:
- name: erwarteter Fehler
assert:
that: false
ignore_errors: true
tags: TODO
Dies wird eine # TODO
-Anweisung im TAP-Stream ausgeben:
not ok - assert: erwarteter Fehler # TODO
Wenn der Test besteht, erhalten Sie eine unerwartete Erfolgsausgabe:
ok - assert: erwarteter Fehler # TODO
Tests überspringen
TAP unterstützt auch eine SKIP
-Anweisung, um bestimmte Tests zu ignorieren.
Dieses Callback verwendet Ansible's when
-Anweisung, um übersprungene Tests zu steuern:
- name: dies ist eine übersprungene Aufgabe
assert:
that: false
ignore_errors: true
when: false
Der Grund für das Überspringen des Tests erscheint in der Testzeile:
ok - assert: übersprungen # SKIP Bedingte Überprüfung fehlgeschlagen
Beispiel
Das Verzeichnis tests/
enthält eine Beispiel-TestSuite, die alle möglichen Testergebnisse erzeugt.
Nach der Installation des Plugins führen Sie die TestSuite mit folgendem Befehl aus:
ANSIBLE_STDOUT_CALLBACK=tap ansible-playbook -i localhost, -c local tests/playbooks/test_multiple_with_failures.yml
Sie erhalten den folgenden TAP-Stream, den Sie an jeden TAP-Konsumenten weitergeben können.
TAP version 13
# command: nächste Test vorbereiten
ok - assert: bestehen
not ok - assert: fehlgeschlagen
---
_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: erwarteter Fehler # TODO
ok - assert: unerwarteter Erfolg # TODO
ok - assert: übersprungen # SKIP Bedingte Überprüfung fehlgeschlagen
1..5
Einschränkungen
Derzeit unterstützt dieses Plugin nur das Ausführen von Tests gegen einen einzelnen Host gleichzeitig. Die TAP-Spezifikation beschreibt keinen Weg, mehrere Ausgabe-Streams zu kombinieren.
Lizenz
MIT