Umgang mit Befehlsfehlern
In diesem Schritt erfahren Sie, wie Sie Befehlsfehler behandeln können, wenn Sie Shell-Befehle mit dem Shell-Modul ausführen. Sie werden Fälle behandeln, in denen der Shell-Befehl einen Nicht-Null-Abfahrtsstatus zurückgibt, was auf einen Fehler hinweist.
Zunächst vervollständigen Sie die Datei /home/labex/project/handle_command_failure.yml
.
Fügen Sie den folgenden Inhalt zur Playbook-Datei hinzu:
- name: Handle Command Failure
hosts: localhost
gather_facts: false
tasks:
- name: Execute a failing command
shell: failing-command
register: failing_command_output
ignore_errors: yes
- name: Handle command failure
debug:
msg: "The command failed. Performing fallback action."
when: failing_command_output.failed
hosts: localhost
: Der Zielhost für die Ausführung dieses Ansible-Playbooks ist localhost
.
shell: failing-command
: Diese Zeile verwendet das Shell-Modul, um den Befehl failing-command
auszuführen. Die Ausgabe dieses Befehls wird erfasst und in der Variable failing_command_output
gespeichert. Da das Skript failing-command
nicht existiert, muss dieser Befehl fehlschlagen.
ignore_errors: yes
: Diese Zeile weist Ansible an, alle Fehler zu ignorieren, die während der Ausführung des failing-command
auftreten. Dadurch kann das Playbook auch dann fortgesetzt werden, wenn der Befehl fehlschlägt.
debug
: Dieses Modul verwendet das Debug-Modul, um eine Nachricht anzuzeigen, die lautet: "The command failed. Performing fallback action." Diese Nachricht wird nur angezeigt, wenn die Bedingung failing_command_output.failed
erfüllt ist, was darauf hinweist, dass die vorherige Befehlsausführung fehlgeschlagen ist.
Zusammenfassend versucht das Playbook, einen Befehl auszuführen, der fehlschlagen soll, ignoriert alle Fehler, die während seiner Ausführung auftreten, und zeigt dann eine Nachricht an, die darauf hinweist, dass der Befehl fehlgeschlagen ist und eine Fallback-Aktion basierend auf dem Fehlschlagsstatus des Befehls ausgeführt wird.
Anschließend zeigen Sie die Ausgabe des Befehls im Ansible-Playbook an.
ansible-playbook /home/labex/project/handle_command_failure.yml
Beispielausgabe:
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [Handle Command Failure] **************************************************
TASK [Execute a failing command] ***********************************************
fatal: [localhost]: FAILED! => {"changed": true, "cmd": "failing-command", "delta": "0:00:00.009169", "end": "2024-03-08 13:46:22.701946", "msg": "non-zero return code", "rc": 127, "start": "2024-03-08 13:46:22.692777", "stderr": "/bin/sh: line 1: failing-command: command not found", "stderr_lines": ["/bin/sh: line 1: failing-command: command not found"], "stdout": "", "stdout_lines": []}
...ignoring
TASK [Handle command failure] **************************************************
ok: [localhost] => {
"msg": "The command failed. Performing fallback action."
}
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=1
Das Vorhandensein von "msg": "The command failed. Performing fallback action."
zeigt an, dass die Ausführung des failing-command
-Befehls fehlgeschlagen ist.