Behandle Skriptfehler
In diesem Schritt wirst du lernen, wie du Skriptfehler behandelst, wenn du Skripte mit dem Script-Modul ausführst. Du wirst Fälle behandeln, in denen das Skript einen nicht-nullen Exit-Status zurückgibt, was einen Fehler anzeigt.
Ändere zunächst die vorhandene Playbook-Datei, indem du alle Inhalte entfernst und den folgenden Inhalt zur Playbook-Datei hinzufügst:
- hosts: localhost
tasks:
- name: Führe ein fehlgeschlagenes Skript aus
script: /home/labex/project/failing_script.sh
register: failing_script_output
ignore_errors: yes
- name: Behandle Skriptfehler
debug:
msg: "Das Skript ist fehlgeschlagen. Führe eine Fallback-Aktion durch."
when: failing_script_output.failed
script
: Dies ist der tatsächliche Befehl, den die Aufgabe ausführen wird.
register
: Dies registriert die Ausgabe des Skripts in die Variable "failing_script_output" für spätere Verwendung in der Playbook.
ignore_errors
: Dieser Parameter ist auf yes
gesetzt, um Ansible zu ermöglichen, auch wenn diese Skriptaufgabe fehlschlägt, fortzufahren und die nachfolgenden Aufgaben auszuführen. Der Fehler wird in der failing_script_output-Variable aufgezeichnet.
debug
: Dies ist das Ansible-Modul, das zur Ausgabe von Debugginginformationen verwendet wird.
msg
: Dieser Parameter für das Debug-Modul druckt eine Nachricht, die angibt, dass das Skript fehlgeschlagen ist. Diese Aufgabe wird nur ausgeführt, wenn die vorherige Aufgabe (failing_script_output) fehlgeschlagen ist.
when
: Diese Bedingung gewährleistet, dass diese Aufgabe nur ausgeführt wird, wenn das Skript in der ersten Aufgabe fehlgeschlagen ist. Wenn das Skript erfolgreich ist, wird diese Aufgabe übersprungen.
Zusammenfassend versucht diese Playbook, ein Skript auszuführen, das möglicherweise fehlschlägt. Wenn das Skript fehlschlägt, behandelt die Playbook den Fehler, indem sie eine Debug-Nachricht ausgibt und eine Fallback-Aktion ausführt. Der Parameter ignore_errors: yes
ermöglicht es der Playbook, auch wenn das Skript fehlschlägt, fortzufahren, und die Bedingung when: failing_script_output.failed
gewährleistet, dass die Behandlungsaufgabe nur dann ausgeführt wird, wenn es erforderlich ist.
Erstelle dann eine fehlschlagende Skriptdatei namens /home/labex/project/failing_script.sh
mit dem folgenden Inhalt:
#!/bin/bash
exit 1
Stelle sicher, dass die Skriptdatei ausführbar ist (chmod +x failing_script.sh
) und platziere die Skriptdatei im Verzeichnis /home/labex/project/
, das in der Playbook angegeben ist.
Führe schließlich die Playbook aus und beobachte, dass das fehlende Skript ausgeführt wird, aber aufgrund von ignore_errors: yes
ignoriert wird.
chmod +x failing_script.sh
ansible-playbook script-module-playbook.yaml
Die Playbook wird eine Debug-Nachricht anzeigen, die den Fehler angibt und eine Fallback-Aktion ausführt.
Beispielausgabe:
...
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Execute a failing script] ************************************************
fatal: [localhost]: FAILED! => {"changed": true, "msg": "non-zero return code", "rc": 1, "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
...ignoring
TASK [Handle script failure] ***************************************************
ok: [localhost] => {
"msg": "Das Skript ist fehlgeschlagen. Führe eine Fallback-Aktion durch."
}
PLAY RECAP *********************************************************************
localhost : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=1
Die "msg": "Das Skript ist fehlgeschlagen. Führe eine Fallback-Aktion durch."
zeigt an, dass das failing_script.sh
-Skript fehlgeschlagen ist.