Die Struktur der Rückgabewerte eines Ansible-Moduls ist nicht durch
Ansible selbst vorgeschrieben, sondern ergibt sich aus der Verwendung
der Hilfsklasse AnsibleModule innerhalb des Moduls. Diese
Klasse stellt Methoden wie exit_json() und
fail_json() bereit, die eine einheitliche, wohlgeformte
JSON-Ausgabe erzeugen. Dadurch entsteht eine faktische Standardstruktur,
obwohl diese technisch nicht erzwungen wird.
Ein typisches Modul, das AnsibleModule verwendet,
liefert folgende strukturierte Felder zurück:
changed: automatisch auf
false gesetzt, wenn nicht explizit angegebenfailed: nur bei
fail_json() gesetzt, standardmäßig falsemsg: optionaler Text zur Beschreibung
des Ergebnisses oder Fehlersstdout, stderr: bei
Modulen, die Shell-Kommandos ausführenstdout_lines,
stderr_lines: automatisch generierte Listen aus
den jeweiligen Textausgabenrc: Rückgabecode bei
Shell-KommandosDiese Felder erscheinen im JSON, das über stdout an den
Ansible-Control-Node zurückgegeben wird, und sind somit direkt in einer
register-Variable verfügbar.
Verzichtet ein Modul auf die Verwendung von
AnsibleModule, sondern erzeugt seine JSON-Ausgabe manuell,
ist es völlig frei in der Struktur. Es könnte beispielsweise nur
folgendes liefern:
{ "error": "etwas ist schiefgelaufen" }Dieses JSON ist formal gültig, wird aber von Ansible nicht
als Fehler erkannt, da das Pflichtfeld
failed: true fehlt. Ebenso wird der Task als nicht geändert
betrachtet, wenn changed: true nicht vorhanden ist. Die
automatische Interpretation durch Ansible funktioniert in solchen Fällen
nicht zuverlässig, und das Verhalten kann irreführend sein.
Die Rückgabestruktur ist also keine verbindliche Schnittstelle,
sondern eine Konvention, die durch die breite Nutzung von
AnsibleModule etabliert ist. Sie sorgt für:
Bei der Entwicklung eigener Module ist die Verwendung der
Standardmechanismen von AnsibleModule ausdrücklich
empfohlen, um volle Kompatibilität mit der Ansible-Ausführungsumgebung
sicherzustellen. Dies gewährleistet: