tutorial tower source playbook open example ansible

tower - ¿Por qué Ansible muestra "ERROR! no se detectó ninguna acción en la tarea "error?



ansible tutorial (2)

Ansible muestra un error:

¡ERROR! No se detectó ninguna acción en la tarea. Esto a menudo indica un nombre de módulo mal escrito o una ruta de módulo 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 módulo que intenta ejecutar.

¿Cómo verificarlo?

  1. Abra la lista de módulos de documentación del módulo y busque la página de documentación para su módulo.

  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 módulo. Por ejemplo:

    Nuevo en la versión 2.2.

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

    ansible-playbook --version

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

    ansible-playbook 2.4.1.0

Razón # 2

my_role/tasks/main.yml escribir un rol y colocar un libro de jugadas en my_role/tasks/main.yml .

El archivo tasks/main.yml debe contener solo una lista de tareas. Si especificó:

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

Ansible intenta encontrar un módulo de acción llamado hosts y un módulo de acción llamado tasks . No lo hace, por lo que arroja un error.

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

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

Razón # 3

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

Esto es bastante obvio, pero se pasa por alto. Si utiliza un nombre de módulo 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 conjunto limitado de módulos que puede ejecutar y no puede verificar "por adelantado" la ortografía de cada módulo de acción.

De hecho, puede escribir y luego especificar su propio módulo 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 módulo no distribuido con Ansible.

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

Si está utilizando un módulo proporcionado por un tercero, un proveedor de software / hardware u otro módulo compartido públicamente, primero debe descargar el módulo y colocarlo en el directorio apropiado.

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

Ansible se ve ANSIBLE_LIBRARY o el argumento de línea de comando --module-path .

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

ansible-playbook --version

y verifique el valor de:

ruta de búsqueda del módulo configurado =

Ansible versión 2.4 y posterior debe proporcionar una lista de rutas.

Razón # 5

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

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

- name: My task become: true


Realmente no puedo mejorar con la respuesta de @techraf https://.com/a/47159200/619760 . Quería agregar la razón # 6 a mi caso especial

Razón # 6

Uso incorrecto de roles: para importar / incluir roles como una subtarea.

Esto no funciona, no puedes incluir roles de esta manera como subtareas en una obra.

--- - hosts: somehosts tasks: - name: include somerole roles: - somerole

Use include_role

De acuerdo con la documentation

ahora puede usar roles en línea con cualquier otra tarea usando import_role o include_role:

- hosts: webservers tasks: - debug: msg: "before we run our role" - import_role: name: example - include_role: name: example - debug: msg: "after we ran our role"

Coloque los roles en el lugar correcto en línea con los hosts

Incluya los roles en la parte superior

--- - hosts: somehosts roles: - somerole tasks: - name: some static task import_role: name: somerole hosts: some host - include_role: name: example

Debe comprender la diferencia entre importar / incluir estática / dinámica