benwebber.tap

ansible-tap

Estado de Construcción Descargar desde Ansible Galaxy

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

Acerca del proyecto

Test Anything Protocol (TAP) producer callback plugin

Instalar
ansible-galaxy install benwebber.tap
Licencia
mit
Descargas
129
Propietario