Warum zeigt Ansible “FEHLER! Keine Aktion in Aufgabe “Fehler?”

Ansible zeigt einen Fehler an:

ERROR! Keine Aktion in Task erkannt. Dies weist oft auf einen falsch geschriebenen Modulnamen oder einen falschen Modulpfad hin.

Was ist falsch?


Das genaue Protokoll ist:

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 

Grund # 1

Sie verwenden eine ältere Version von Ansible, die nicht über das Modul verfügte, das Sie ausführen möchten.

Wie man es überprüft?

  1. Öffnen Sie die Liste der Module Modul-Dokumentation und finden Sie die Dokumentationsseite für Ihr Modul.

  2. Lesen Sie die Kopfzeile oben auf der Seite – normalerweise wird die Ansible-Version angezeigt, in der das Modul eingeführt wurde. Beispielsweise:

    Neu in Version 2.2.

  3. Stellen Sie sicher, dass Sie die angegebene Version von Ansible oder höher ausführen. Lauf:

     ansible-playbook --version 

    Und überprüfe die Ausgabe. Es sollte etwa so aussehen:

    ansible-playbook 2.4.1.0


Grund # 2

Sie haben versucht, eine Rolle zu schreiben und ein Playbook in my_role/tasks/main.yml .

Die Datei tasks/main.yml sollte nur eine Liste von Aufgaben enthalten. Wenn Sie angegeben haben:

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

Ansible versucht, ein Aktionsmodul namens hosts und ein Aktionsmodul namens tasks . Tut es nicht, also wirft es einen Fehler auf.

Lösung: tasks/main.yml nur eine Liste der Aufgaben in der Datei tasks/main.yml :

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

Grund # 3

Der Name des Aktionsmoduls ist falsch geschrieben.

Das ist ziemlich offensichtlich, aber übersehen. Wenn Sie einen falschen Modulnamen verwenden, z. B. users anstelle von user , meldet Ansible “Keine Aktion in Task erkannt”.

Ansible wurde als stark erweiterbares System konzipiert. Es verfügt nicht über eine begrenzte Anzahl von Modulen, die Sie ausführen können, und es kann nicht “im voraus” die Schreibweise jedes Aktionsmoduls prüfen.

In der Tat können Sie schreiben und dann Ihr eigenes Modul mit dem Namen qLQn1BHxzirz und Ansible muss das respektieren. Da es sich um eine interpretierte Sprache handelt, “entdeckt” es den Fehler nur, wenn er versucht, die Aufgabe auszuführen.


Grund # 4

Sie versuchen, ein Modul auszuführen, das nicht mit Ansible verteilt wird.

Der Name des Aktionsmoduls ist korrekt, aber es ist kein Standardmodul, das mit Ansible verteilt wird.

Wenn Sie ein Modul verwenden, das von einer Drittpartei bereitgestellt wird – einem Anbieter von Software / Hardware oder einem anderen öffentlich freigegebenen Modul – müssen Sie zuerst das Modul herunterladen und es in das entsprechende Verzeichnis einfügen.

Sie können es entweder im Modulverzeichnis des Playbooks oder in einem gemeinsamen Pfad ablegen.

Ansible sieht ANSIBLE_LIBRARY oder das --module-path .

Um zu überprüfen, welche Pfade gültig sind, führen Sie Folgendes aus:

 ansible-playbook --version 

und überprüfen Sie den Wert von:

konfigurierter Modul Suchpfad =

Ansible Version 2.4 und höher sollte eine Liste der Pfade bereitstellen.


Grund # 5

Sie haben wirklich keine Aktion innerhalb der Aufgabe.

Für die Aufgabe muss ein Aktionsmodul definiert sein. Das folgende Beispiel ist nicht gültig:

 - name: My task become: true