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?
-
Abra la lista de módulos de documentación del módulo y busque la página de documentación para su módulo.
-
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.
-
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