Ansible montre une erreur:
ERREUR! aucune action détectée dans la tâche. Cela indique souvent un nom de module mal orthographié ou un chemin de module incorrect.
Qu'est-ce qui ne va pas?
La transcription exacte est:
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
Vous utilisez une ancienne version de Ansible qui ne contenait pas le module que vous essayez d'exécuter.
Comment le vérifier?
Ouvrez la liste des modules documentation du module et trouvez la page de documentation de votre module.
Lisez l'en-tête en haut de la page - il montre généralement la version d'Ansible dans laquelle le module a été introduit. Par exemple:
Nouveau dans la version 2.2.
Assurez-vous que vous exécutez la version spécifiée de Ansible ou ultérieure. Courir:
ansible-playbook --version
Et vérifiez la sortie. Il devrait montrer quelque chose comme:
ansible-playbook 2.4.1.0
Vous avez essayé d'écrire un rôle et de mettre un playbook dans my_role/tasks/main.yml
.
Le fichier tasks/main.yml
doit contenir uniquement une liste de tâches. Si vous avez spécifié:
---
- name: Configure servers
hosts: my_hosts
tasks:
- name: My first task
my_module:
parameter1: value1
Ansible essaie de trouver un module d'action nommé hosts
et un module d'action nommé tasks
. Ce n'est pas le cas, alors cela génère une erreur.
Solution: spécifiez uniquement une liste de tâches dans le fichier tasks/main.yml
:
---
- name: My first task
my_module:
parameter1: value1
Le nom du module d'action est mal orthographié.
C'est assez évident, mais négligé. Si vous utilisez un nom de module incorrect, par exemple users
au lieu de user
, Ansible signalera "aucune action détectée dans la tâche".
Ansible a été conçu comme un système hautement extensible. Il ne dispose pas d'un ensemble limité de modules que vous pouvez exécuter et il ne peut pas vérifier "à l'avance" l'orthographe de chaque module d'action.
En fait, vous pouvez écrire puis spécifier votre propre module nommé qLQn1BHxzirz
et Ansible doit respecter cela. S'agissant d'un langage interprété, il "découvre" l'erreur uniquement lors de la tentative d'exécution de la tâche.
Vous essayez d'exécuter un module non distribué avec Ansible.
Le nom du module d'action est correct, mais ce n'est pas un module standard distribué avec Ansible.
Si vous utilisez un module fourni par un tiers - un fournisseur de logiciel/matériel ou un autre module partagé publiquement, vous devez d'abord télécharger le module et le placer dans le répertoire approprié.
Vous pouvez le placer soit dans le sous-répertoire modules
du livre de lecture, soit dans un chemin commun.
Ansible cherche ANSIBLE_LIBRARY
ou l'argument de ligne de commande --module-path
.
Pour vérifier quels chemins sont valides, exécutez:
ansible-playbook --version
et vérifier la valeur de:
chemin de recherche de module configuré =
Ansible version 2.4 et ultérieure devrait fournir une liste de chemins.
Vous n'avez vraiment aucune action à l'intérieur de la tâche.
Un module d'action doit être défini pour la tâche. L'exemple suivant n'est pas valide:
- name: My task
become: true
Je ne peux pas vraiment améliorer la réponse de @techraf https://stackoverflow.com/a/47159200/61976 . Je voulais ajouter la raison n ° 6 à mon cas particulier
Utilisation incorrecte de roles:
pour importer/inclure des rôles en tant que sous-tâche.
Cela ne fonctionne pas, vous ne pouvez pas inclure des rôles de cette manière en tant que sous-tâches dans une pièce.
---
- hosts: somehosts
tasks:
- name: include somerole
roles:
- somerole
Selon le documentation
vous pouvez maintenant utiliser des rôles en ligne avec toute autre tâche en utilisant import_role ou 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"
Inclure les rôles en haut
---
- hosts: somehosts
roles:
- somerole
tasks:
- name: some static task
import_role:
name: somerole
hosts: some Host
- include_role:
name: example
Vous devez comprendre la différence entre import/include static/dynamic