¿Por qué Ansible muestra el error "no se detectó ninguna acción en la tarea"?

Este es un bash de crear una pregunta canónica al problema que aparece con demasiada frecuencia con Ansible (list no exhaustiva de ejemplos: 1 2 3 4 5 6 7 8 9 10 ) y con frecuencia se describe / atribuye por OP a un module particular, aunque los problemas subyacentes son comunes.


Ansible muestra un error:

¡ERROR! no se detectó ninguna acción en la tarea. Esto a menudo indica un nombre de module mal escrito o ruta de module incorrecta.

¿Qué está mal?


La transcripción exacta es:

ERROR! no action detected in task. This often indicates a misspelled module name, or incorrect module path. The error appears to have been in 'playbook.yml': line 10, column 3, but may be elsewhere in the file depending on the exact syntax problem. The offending line appears to be: --- - name: My task name ^ here 

Razón # 1

Está utilizando una versión anterior de Ansible que no tenía el module que intenta ejecutar.

¿Cómo verificarlo?

  1. Abra la list de documentation del module de modules y encuentre la página de documentation para su module.

  2. Lea el encabezado en la parte superior de la página, generalmente muestra la versión de Ansible en la que se introdujo el module. Por ejemplo:

    Nuevo en la versión 2.2.

  3. Asegúrese de ejecutar la versión especificada de Ansible o posterior. Correr:

     ansible-playbook --version 

    Y comtesting la salida. Debería mostrar algo como:

    ansible-playbook 2.4.1.0


Razón # 2

Intentó escribir un rol y poner un libro de jugadas en my_role/tasks/main.yml .

El file tasks/main.yml debe contener solo una list de tareas. Si usted especificó:

 --- - name: Configure servers hosts: my_hosts tasks: - name: My first task my_module: parameter1: value1 

Ansible intenta encontrar un module de acción llamado hosts y un module de acción llamado tasks . No lo hace, entonces arroja un error.

Solución: especifique solo una list de tareas en el file tasks/main.yml :

 --- - name: My first task my_module: parameter1: value1 

Motivo n. ° 3

El nombre del module de acción está mal escrito.

Esto es bastante obvio, pero pasado por alto. Si usa un nombre de module incorrecto, por ejemplo, users lugar de user , Ansible informará "no se detectó ninguna acción en la tarea".

Ansible fue diseñado como un sistema altamente extensible. No tiene un set limitado de modules que puede ejecutar y no puede verificar "por adelantado" la ortografía de cada module de acción.

De hecho, puede escribir y luego especificar su propio module llamado qLQn1BHxzirz y Ansible tiene que respetar eso. Como es un lenguaje interpretado, "descubre" el error solo cuando intenta ejecutar la tarea.


Razón # 4

Está intentando ejecutar un module no distribuido con Ansible.

El nombre del module de acción es correcto, pero no es un module estándar distribuido con Ansible.

Si está utilizando un module proporcionado por un tercero, un proveedor de software / hardware u otro module compartido públicamente, primero debe download el module y colocarlo en el directory apropiado.

Puede colocarlo en el subdirectory de modules del libro de jugadas o en una ruta común.

Ansible busca ANSIBLE_LIBRARY o el argumento de línea de command --module-path .

Para verificar qué routes son válidas, ejecute:

 ansible-playbook --version 

y verificar el valor de:

ruta de búsqueda del module configurado =

La versión Ansible 2.4 y posterior debería proporcionar una list de routes.


Motivo n. ° 5

Realmente no tienes ninguna acción dentro de la tarea.

La tarea debe tener algún module de acción definido. El siguiente ejemplo no es válido:

 - name: My task become: true