benwebber.tap
ansible-tap
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