benwebber.tap

ansible-tap

Build-Status Download von Ansible Galaxy

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

Über das Projekt

Test Anything Protocol (TAP) producer callback plugin

Installieren
ansible-galaxy install benwebber.tap
GitHub Repository
Lizenz
mit
Downloads
129
Besitzer