benwebber.tap
ansible-tap
Productor del Protocolo de Cualquier Prueba (TAP) para Ansible.
Este plugin de callback te permite escribir suites de pruebas TAP como playbooks de Ansible. Considéralo una alternativa exclusiva de Ansible a Serverspec y Testinfra.
Requisitos
- Ansible 2
- Python 2.7+
Instalación
Aunque no puedes instalar este plugin directamente usando ansible-galaxy
, puedes usar ansible-galaxy
para descargarlo:
ansible-galaxy install -p roles/ benwebber.tap
Navega al directorio de la función y ejecuta make install
:
cd roles/benwebber.tap
make install
Esto copiará el plugin a ~/.ansible/plugins/callback
.
Uso
Configura Ansible para usar este plugin como callback de salida estándar:
ANSIBLE_STDOUT_CALLBACK=tap ansible-playbook -i hosts test.yml -l nombre_del_host
También puedes establecerlo como el callback predeterminado en ansible.cfg
:
[defaults]
stdout_callback=tap
Escribiendo pruebas en Ansible
Por defecto, Ansible abortará el play si alguna tarea falla. Establece ignore_errors: true
en todas las pruebas para desactivar este comportamiento:
- name: verificar si el servicio está activo
command: systemctl is-active servicio
register: is_active
tags: diagnóstico
- name: afirmar que el servicio está activo
assert:
that: is_active.rc == 0
ignore_errors: true
Esto asegurará que Ansible ejecute toda la suite de pruebas, salvo cualquier fallo inesperado.
Si tienes muchas pruebas, puedes establecer ignore_errors: true
en un block
:
- name: verificar si el servicio está activo
command: systemctl is-active servicio
register: is_active
tags: diagnóstico
- name: verificar si el servicio está habilitado
command: systemctl is-enabled servicio
register: is_enabled
tags: diagnóstico
- ignore_errors: true
block:
- name: afirmar que el servicio está activo
assert:
that: is_active.rc == 0
- name: afirmar que el servicio está habilitado
assert:
that: is_enabled.rc == 0
Si una tarea falla, el plugin mostrará información de solución de problemas como un documento YAML embebido:
not ok - assert: afirmar que la variable está definida
---
_ansible_no_log: false
_ansible_verbose_always: true
assertion: status está definido
changed: false
evaluated_to: false
failed: true
invocation:
module_args:
that: status está definido
module_name: assert
...
Excluyendo tareas del flujo TAP
A menudo, el resultado de una prueba dependerá de tareas previas. Naturalmente, querrás excluir estas tareas de configuración del flujo TAP.
Para hacerlo, simplemente etiqueta las tareas de configuración con la etiqueta diagnóstico
:
- name: configurar la siguiente prueba
command: 'true'
register: true_
tags: diagnóstico
- name: debería pasar siempre
assert:
that: true_.rc == 0
ignore_errors: true
El plugin de callback imprimirá líneas de diagnóstico en lugar de líneas de prueba:
# command: configurar la siguiente prueba
ok - assert: debería pasar siempre
A diferencia de los casos de prueba individuales, probablemente no querrás ignorar errores para este tipo de tarea. Los fallos representarían un error en la suite de pruebas y no un fallo de prueba.
Fallos esperados y éxitos inesperados
TAP admite una directiva TODO
para ignorar pruebas de características que aún no se han implementado.
Si una prueba marcada con TODO
falla, los consumidores de TAP lo considerarán un fallo esperado. De manera similar, si una prueba marcada con TODO
pasa, los consumidores de TAP lo considerarán un éxito inesperado.
Etiqueta los fallos esperados con TODO
:
- name: fallo esperado
assert:
that: false
ignore_errors: true
tags: TODO
Esto generará una directiva # TODO
en el flujo TAP:
not ok - assert: fallo esperado # TODO
Si la prueba pasa, recibirás una salida de éxito inesperado:
ok - assert: fallo esperado # TODO
Saltando pruebas
TAP también admite una directiva SKIP
para ignorar pruebas específicas.
Este callback utiliza la declaración when
de Ansible para controlar las pruebas saltadas:
- name: esta es una tarea saltada
assert:
that: false
ignore_errors: true
when: false
La razón para saltar la prueba aparecerá en la línea de prueba:
ok - assert: saltada # SKIP Condición de chequeo fallida
Ejemplo
El directorio tests/
contiene un ejemplo de suite de pruebas que produce todos los resultados posibles de pruebas.
Después de instalar el plugin, ejecuta la suite de pruebas con:
ANSIBLE_STDOUT_CALLBACK=tap ansible-playbook -i localhost, -c local tests/playbooks/test_multiple_with_failures.yml
Recibirás el siguiente flujo TAP. Puedes pasarlo a cualquier consumidor de TAP.
TAP version 13
# command: configurar la siguiente prueba
ok - assert: pasar
not ok - assert: fallar
---
_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: fallo esperado # TODO
ok - assert: paso inesperado # TODO
ok - assert: saltada # SKIP Condición de chequeo fallida
1..5
Advertencias
Por el momento, este plugin solo admite la ejecución de pruebas contra un solo host a la vez. La especificación TAP no describe una forma de combinar múltiples flujos de salida.
Licencia
MIT
Test Anything Protocol (TAP) producer callback plugin
ansible-galaxy install benwebber.tap