it-swarm.com.de

Warum zeigt Ansible den Fehler "FEHLER! Keine Aktion in Task erkannt" an?

Ansible zeigt einen Fehler:

ERROR! Keine Aktion in Aufgabe erkannt. Dies weist häufig auf einen falsch geschriebenen Modulnamen oder einen falschen Modulpfad hin.

Was ist los?


Das genaue Protokoll lautet:

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
37
techraf

Grund # 1

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

Wie überprüfe ich es?

  1. Öffnen Sie die Liste der Module Moduldokumentation und suchen Sie die Dokumentationsseite für Ihr Modul.

  2. Lesen Sie die Kopfzeile oben auf der Seite - sie zeigt normalerweise die Ansible-Version an, 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üfen Sie die Ausgabe. Es sollte etwas zeigen wie:

    ansible-playbook 2.4.1.0


Grund # 2

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

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 mit dem Namen hosts und ein Aktionsmodul mit dem Namen tasks zu finden. Tut es nicht, also gibt es einen Fehler aus.

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

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

Grund # 3

Der Name des Aktionsmoduls ist falsch geschrieben.

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

Ansible wurde als hoch erweiterbares System konzipiert. Es gibt keine begrenzte Anzahl von Modulen, die Sie ausführen können, und die Rechtschreibung der einzelnen Aktionsmodule kann nicht "im Voraus" überprüft werden.

Tatsächlich können Sie Ihr eigenes Modul mit dem Namen qLQn1BHxzirz Schreiben und dann angeben, und Ansible muss dies berücksichtigen. Da es sich um eine interpretierte Sprache handelt, "entdeckt" sie den Fehler nur beim Versuch, die Aufgabe auszuführen.


Grund # 4

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

Der Name des Aktionsmoduls ist korrekt, es handelt sich jedoch nicht um ein Standardmodul, das mit Ansible ausgeliefert wird.

Wenn Sie ein Modul verwenden, das von einem Drittanbieter bereitgestellt wurde - einem Anbieter von Software/Hardware oder einem anderen öffentlich freigegebenen Modul -, müssen Sie das Modul zuerst herunterladen und in das entsprechende Verzeichnis stellen.

Sie können es entweder in das Unterverzeichnis modules des Playbooks oder in einen gemeinsamen Pfad legen.

Ansible sieht aus wie ANSIBLE_LIBRARY Oder wie das Befehlszeilenargument --module-path.

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

ansible-playbook --version

und überprüfe den Wert von:

konfigurierter Modulsuchpfad =

Ansible ab Version 2.4 sollte eine Liste der Pfade enthalten.


Grund # 5

Sie haben wirklich keine Aktion in der Aufgabe.

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

- name: My task
  become: true
67
techraf

Ich kann @techraf answer https://stackoverflow.com/a/47159200/61976 nicht wirklich verbessern. Ich wollte Grund Nr. 6 zu meinem Spezialfall hinzufügen

Grund # 6

Falsche Verwendung von roles: zum Importieren/Einschließen von Rollen als Unteraufgabe.

Dies funktioniert nicht, Sie können Rollen auf diese Weise nicht als Unteraufgaben in ein Spiel einbeziehen.

---
- hosts: somehosts
  tasks:

  - name: include somerole
    roles:
      - somerole

Verwenden Sie include_role

Nach der Dokumentation

sie können Rollen jetzt mit import_role oder include_role inline mit anderen Aufgaben verwenden:

- 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"

Platzieren Sie die Rollen an der richtigen Stelle in einer Linie mit den Hosts

Fügen Sie die Rollen oben ein

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

Sie müssen den Unterschied zwischen import/include static/dynamic verstehen

5
nelaaro