benwebber.tap

ansible-tap

Statut de construction Télécharger depuis Ansible Galaxy

Producteur du Test Anything Protocol (TAP) pour Ansible.

Ce plugin de rappel vous permet d'écrire des suites de tests TAP en tant que playbooks Ansible. Considérez-le comme une alternative Ansible uniquement à Serverspec et Testinfra.

Exigences

  • Ansible 2
  • Python 2.7+

Installation

Bien que vous ne puissiez pas installer ce plugin directement avec ansible-galaxy, vous pouvez l'utiliser pour le télécharger :

ansible-galaxy install -p roles/ benwebber.tap

Naviguez jusqu'au répertoire du rôle et exécutez make install :

cd roles/benwebber.tap
make install

Cela copiera le plugin dans ~/.ansible/plugins/callback.

Utilisation

Configurez Ansible pour utiliser ce plugin comme sortie standard :

ANSIBLE_STDOUT_CALLBACK=tap ansible-playbook -i hosts test.yml -l hostname

Vous pouvez également le définir comme rappel par défaut dans ansible.cfg :

[defaults]
stdout_callback=tap

Écriture de tests Ansible

Par défaut, Ansible va interrompre le play si des tâches échouent. Réglez ignore_errors: true sur tous les tests pour désactiver ce comportement :

- name: vérifier si le service fonctionne
  command: systemctl is-active service
  register: is_active
  tags: diagnostic

- name: s'assurer que le service fonctionne
  assert:
    that: is_active.rc == 0
  ignore_errors: true

Cela garantira qu'Ansible exécute l'ensemble de la suite de tests, sauf en cas de défaillance inattendue.

Si vous avez beaucoup de tests, vous pouvez régler ignore_errors: true sur un block :

- name: vérifier si le service fonctionne
  command: systemctl is-active service
  register: is_active
  tags: diagnostic

- name: vérifier si le service est activé
  command: systemctl is-enabled service
  register: is_enabled
  tags: diagnostic

- ignore_errors: true
  block:
  - name: s'assurer que le service fonctionne
    assert:
      that: is_active.rc == 0

  - name: s'assurer que le service est activé
    assert:
      that: is_enabled.rc == 0

Si une tâche échoue, le plugin affichera des informations de dépannage sous forme de document YAML intégré :

not ok - assert: s'assurer que la variable est définie
  ---
  _ansible_no_log: false
  _ansible_verbose_always: true
  assertion: status est défini
  changed: false
  evaluated_to: false
  failed: true
  invocation:
    module_args:
      that: status est défini
    module_name: assert
  ...

Exclusion des tâches du flux TAP

Souvent, le résultat d'un test dépendra des tâches précédentes. Vous voudrez naturellement exclure ces tâches de configuration du flux TAP.

Pour ce faire, il vous suffit de taguer les tâches de configuration avec le tag diagnostic :

- name: configurer le prochain test
  command: 'true'
  register: true_
  tags: diagnostic

- name: devrait toujours réussir
  assert:
    that: true_.rc == 0
  ignore_errors: true

Le plugin de rappel affichera des lignes de diagnostic au lieu de lignes de test :

# command: configurer le prochain test
ok - assert: devrait toujours réussir

Contrairement aux cas de tests individuels, vous ne voudrez probablement pas ignorer les erreurs pour ce type de tâche. Les échecs représenteraient une erreur dans la suite de tests et non un échec de test.

Échecs attendus et succès inattendus

TAP prend en charge une directive TODO pour ignorer les tests pour des fonctionnalités qui n'ont pas encore été mises en œuvre.

Si un test marqué avec TODO échoue, les consommateurs TAP le considéreront comme un échec attendu. De même, si un test marqué avec TODO réussit, les consommateurs TAP le considéreront comme un succès inattendu.

Taguez les échecs attendus avec TODO :

- name: échec attendu
  assert:
    that: false
  ignore_errors: true
  tags: TODO

Cela affichera une directive # TODO dans le flux TAP :

not ok - assert: échec attendu # TODO

Si le test réussit, vous recevrez un message de succès inattendu :

ok - assert: échec attendu # TODO

Ignorer des tests

TAP prend également en charge une directive SKIP pour ignorer des tests spécifiques.

Ce rappel utilise la déclaration when d'Ansible pour contrôler les tests ignorés :

- name: ceci est une tâche ignorée
  assert:
    that: false
  ignore_errors: true
  when: false

La raison pour ignorer le test apparaîtra dans la ligne de test :

ok - assert: ignoré # SKIP Vérification conditionnelle échouée

Exemple

Le répertoire tests/ contient une suite de tests exemple qui produit tous les résultats de tests possibles.

Après avoir installé le plugin, exécutez la suite de tests avec :

ANSIBLE_STDOUT_CALLBACK=tap ansible-playbook -i localhost, -c local tests/playbooks/test_multiple_with_failures.yml

Vous recevrez le flux TAP suivant. Vous pouvez le passer à tout consommateur TAP.

TAP version 13
# command: configurer le prochain test
ok - assert: réussir
not ok - assert: échouer
  ---
  _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: échec attendu # TODO
ok - assert: succès inattendu # TODO
ok - assert: ignoré # SKIP Vérification conditionnelle échouée
1..5

Caveats

Actuellement, ce plugin ne prend en charge l'exécution de tests que sur un seul hôte à la fois. La spécification TAP ne décrit pas comment combiner plusieurs flux de sortie.

Licence

MIT

À propos du projet

Test Anything Protocol (TAP) producer callback plugin

Installer
ansible-galaxy install benwebber.tap
Licence
mit
Téléchargements
129
Propriétaire