40 Ablauf und Struktur der Modulausführung in Ansible

40.1 Remote-Ausführung von Modulen

Ein Ansible-Modul wird bei der Ausführung nicht lokal auf dem Control Node verarbeitet, sondern auf dem Zielsystem. Dazu überträgt Ansible das Python-Modul (also eine .py-Datei) per scp, sftp oder über eine eingebettete ssh-Übertragung (z.B. mit einem Here-Document) temporär auf das Zielsystem. Zusätzlich wird ein kleines Wrapper-Skript generiert, das den Modulaufruf samt Parameterübergabe vorbereitet.

40.2 Standardisierte JSON-Schnittstelle

Die Steuerung erfolgt über eine standardisierte JSON-Schnittstelle. Das bedeutet: Die Eingabedaten (Parameter aus dem Playbook) werden im JSON-Format über stdin an das Modul übergeben. Das Modul verarbeitet diese Eingabe typischerweise mit Hilfe der Klasse AnsibleModule und erzeugt am Ende ein Ergebnisobjekt, das ebenfalls im JSON-Format an stdout ausgegeben wird. Nur dieses finale JSON wird von Ansible als Ergebnis gewertet.

40.2.1 Struktur der JSON-Eingabe

Die wichtigsten Parameter des JSON-Eingabeobjekts sind:

40.3 Verarbeitung der Modulausgabe

Das Ergebnis eines Modullaufs wird ebenfalls im JSON-Format an stdout zurückgegeben. Ansible liest den gesamten stdout-Stream zeilenweise ein, verwirft aber alle Zeilen außer der letzten validen JSON-Zeile, die als tatsächliches Rückgabeobjekt dient. Frühere Zeilen in stdout werden gespeichert, aber nicht als Ergebnis interpretiert. Sie erscheinen z.B. im Feld stdout_lines des Resultats.

40.3.1 Behandlung von stderr

Zusätzlich erfasst Ansible alle Ausgaben auf stderr und stellt sie im Feld stderr_lines als Array von Textzeilen zur Verfügung. Diese haben keine direkte Auswirkung auf Erfolg oder Misserfolg des Tasks, können aber bei der Fehlersuche oder Protokollierung hilfreich sein.

40.4 Kommunikationsprotokoll

Die Kommunikation erfolgt ausschließlich über Standard-Ein- und -Ausgabe:

40.5 Bereinigung und Systemanforderungen

Nach erfolgreichem Lauf entfernt Ansible die temporär kopierten Dateien wieder vom Zielsystem, es sei denn, in der Konfiguration ist ein anderes Verhalten vorgegeben.

Diese Architektur stellt sicher, dass Module auf beliebigen Systemen lauffähig sind, ohne dass dort vorab eine Ansible-Installation oder eine besondere Laufzeitumgebung erforderlich ist. Voraussetzung ist lediglich ein kompatibler Python-Interpreter und eine SSH-Verbindung.

40.6 Zusammenfassung des Ausführungsablaufs

  1. Übertragung: Modul und Wrapper-Skript werden auf das Zielsystem kopiert
  2. Eingabe: Parameter werden als JSON über stdin übergeben
  3. Verarbeitung: Modul wird auf dem Zielsystem ausgeführt
  4. Ausgabe: Ergebnis wird als JSON über stdout zurückgegeben
  5. Bereinigung: Temporäre Dateien werden entfernt