Ansible Script-Modul

AnsibleAnsibleBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab lernst du, wie du das Ansible Script-Modul verwendest, um benutzerdefinierte Skripte auf entfernten Hosts auszuführen. Das Script-Modul ermöglicht es dir, Skripte in jeder Programmiersprache auf den Zielhosts auszuführen, was Flexibilität und Anpassungsmöglichkeiten in deinen Automatisierungstasks bietet.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ansible(("Ansible")) -.-> ansible/ModuleOperationsGroup(["Module Operations"]) ansible/ModuleOperationsGroup -.-> ansible/debug("Test Output") ansible/ModuleOperationsGroup -.-> ansible/script("Run Scripts") ansible/ModuleOperationsGroup -.-> ansible/shell("Execute Shell Commands") subgraph Lab Skills ansible/debug -.-> lab-289411{{"Ansible Script-Modul"}} ansible/script -.-> lab-289411{{"Ansible Script-Modul"}} ansible/shell -.-> lab-289411{{"Ansible Script-Modul"}} end

Führe ein einfaches Skript aus

In diesem Schritt wirst du ein einfaches Skript auf einem entfernten Host mit dem Ansible Script-Modul ausführen.

Erstelle zunächst eine neue Ansible Playbook-Datei namens /home/labex/project/script-module-playbook.yaml und öffne sie in einem Texteditor.
Füge den folgenden Inhalt zur Playbook-Datei hinzu:

- hosts: localhost
  tasks:
    - name: Führe ein einfaches Skript aus
      script: /home/labex/project/simple_script.sh
      register: script_output

    - name: Zeige Skriptausgabe an
      debug:
        var: script_output.stdout_lines
  • hosts: Dies gibt den Zielhost an, auf dem die Playbook ausgeführt werden soll. In diesem Fall wird die Playbook auf dem lokalen Host ausgeführt, da der Zielhost "localhost" ist.
  • tasks: Dies ist eine Liste von Aufgaben, die ausgeführt werden sollen.
  • name: Dies ist der beschreibende Name für die Aufgabe, der den Zweck der Aufgabe identifiziert.
  • script: Dies ist der tatsächliche Befehl, den die Aufgabe ausführt. Es instruiert Ansible, das Skript namens "simple_script.sh" im Verzeichnis "/home/labex/project/" auf dem Zielhost auszuführen.
  • register: Dies registriert die Ausgabe des Skripts in der Variablen script_output für spätere Verwendung in der Playbook.
  • debug: Dies ist das Ansible-Modul, das verwendet wird, um Debugginginformationen auszugeben.
  • var: Dies ist ein Parameter für das Debug-Modul, das die Standardausgabe des Skripts aus der vorherigen Aufgabe anzeigt. script_output.stdout_lines enthält jede Zeile der Skriptausgabe.

Zusammenfassend ist der Hauptzweck dieser Playbook, ein Skript auf dem lokalen Host auszuführen und die Standardausgabe des Skripts nach der Ausführung anzuzeigen. Die registrierte Variable script_output enthält die Ausgabe des Skripts, die dann mit dem Debug-Modul gedruckt wird.

Erstelle dann eine einfache Skriptdatei namens /home/labex/project/simple_script.sh mit dem folgenden Inhalt:

#!/bin/bash
echo "This is a simple script."

Stelle sicher, dass die Skriptdatei ausführbar ist (chmod +x simple_script.sh) und platziere die Skriptdatei im Verzeichnis /home/labex/project/, das in der Playbook angegeben ist.

Führe schließlich die Playbook mit dem folgenden Befehl aus:

chmod +x simple_script.sh
ansible-playbook script-module-playbook.yaml

Beobachte die Ausgabe des Skripts, die im Playbook-Ausführungsoutput angezeigt wird.
Beispielausgabe:

...
PLAY [localhost] ***************************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [Execute a simple script] *************************************************
changed: [localhost]

TASK [Display script output] ***************************************************
ok: [localhost] => {
    "script_output.stdout_lines": [
        "This is a simple script."
    ]
}

PLAY RECAP *********************************************************************
localhost                  : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Hier ist "This is a simple script." die Ausgabe des simple_script.sh-Skripts.

Übergib Variablen an Skripte

In diesem Schritt wirst du lernen, wie du Variablen aus deinem Ansible Playbook an Skripte übergeben, die mit dem Script-Modul ausgeführt werden.

Ä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 Skript mit einer Variablen aus
      script: /home/labex/project/var_script.sh "{{ message }}"
      register: variable_script_output

    - name: Zeige Variable Skriptausgabe an
      debug:
        var: variable_script_output.stdout_lines
  • script: Dies ist der tatsächliche Befehl, den die Aufgabe ausführen wird. Und {{ message }} ist eine Variable, die an das Skript übergeben wird. Die doppelten geschweiften Klammern zeigen an, dass dies eine Ansible-Variable ist und ihr Wert während der Ausführung dynamisch ersetzt wird.
  • register: Dies registriert die Ausgabe des Skripts in die Variable "variable_script_output" für spätere Verwendung in der Playbook.
  • debug: Dies ist das Ansible-Modul, das zur Ausgabe von Debugginginformationen verwendet wird.
  • var: Dieser Parameter für das Debug-Modul zeigt die Standardausgabe des Skripts aus der vorherigen Aufgabe an. variable_script_output.stdout_lines enthält jede Zeile der Skriptausgabe.

Zusammenfassend führt diese Playbook ein Skript auf dem lokalen Host aus, wobei eine Variable namens "message" an das Skript übergeben wird. Die Ausgabe des Skripts wird in der Variable variable_script_output registriert und dann mit dem Debug-Modul gedruckt.

Erstelle dann eine einfache Skriptdatei namens /home/labex/project/var_script.sh mit dem folgenden Inhalt:

#!/bin/bash
echo $1

Stelle sicher, dass die Skriptdatei ausführbar ist (chmod +x var_script.sh) und platziere die Skriptdatei im Verzeichnis /home/labex/project/, das in der Playbook angegeben ist.

Schließlich übergebe die message-Variable als zusätzliche Variable mit der -e-Option, wenn du die Playbook ausführst.

chmod +x var_script.sh
ansible-playbook script-module-playbook.yaml -e "message=Hello,Ansible"

Beobachte die Ausgabe des Skripts mit der angegebenen Nachricht.
Beispielausgabe:

...
PLAY [localhost] ***************************************************************

TASK [Gathering Facts] *********************************************************
ok: [localhost]

TASK [Execute script with a variable] ******************************************
changed: [localhost]

TASK [Display variable script output] ******************************************
ok: [localhost] => {
    "variable_script_output.stdout_lines": [
        "Hello,Ansible"
    ]
}

PLAY RECAP *********************************************************************
localhost                  : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Hier ist "Hello,Ansible" die Ausgabe des simple_script.sh-Skripts.

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.

Zusammenfassung

Herzlichen Glückwunsch! Du hast das Ansible Script-Modul-Labor erfolgreich abgeschlossen. Du hast gelernt, wie du das Script-Modul verwendest, um benutzerdefinierte Skripte auf entfernten Hosts auszuführen, Variablen an Skripte zu übergeben und Skriptfehler zu behandeln.

Das Script-Modul bietet große Flexibilität und Anpassungsmöglichkeiten in deinen Automatisierungstasks, indem es dir ermöglicht, die Macht benutzerdefinierter Skripte zu nutzen. Achte jedoch darauf, sichere und zuverlässige Skripte zu schreiben und alle Eingaben zu validieren, um Sicherheitslücken zu vermeiden.

Jetzt, da du das Script-Modul gut kennst, kannst du es in deine Ansible Playbooks integrieren, um verschiedene Aufgaben zu automatisieren und fortgeschrittene Automatisierungsszenarien zu erreichen. Viel Spaß beim Skripten mit Ansible!