Zum Hauptinhalt springen

Ansible-Skripthandbuch

Run Ansible playbooks on managed devices using Level's scripting engine, with setup instructions for Unix and Windows endpoints.

Einführung

Level kann Ansible-Playbooks auf verwalteten Geräten über seine Skript-Engine ausführen. Der wesentliche Unterschied zu einem typischen Ansible-Setup: Level verwendet keinen zentralen Steuerknoten. Jedes Gerät lädt das Playbook herunter und führt es lokal aus, während Level die Ausgabe in Echtzeit an Ihre Konsole streamt.

Dieser Leitfaden behandelt das Ausführungsmodell, die Erstellung eines Level-Skripts, das ansible-playbook, und wie Windows-Endpunkte vorbereitet werden, die eine POSIX-kompatible Umgebung zum Ausführen von Ansible benötigen.


⚙️ VORAUSSETZUNGEN

  • Ansible auf jedem Zielgerät installiert (kein zentraler Steuerknoten – siehe unten)

  • Für Unix/macOS/Linux-Geräte: ansible und ansible-playbook verfügbar in PATH

  • Für Windows-Geräte: eine POSIX-kompatible Umgebung (WSL oder Cygwin/Git Bash) mit installiertem Ansible

  • Level-Agent auf allen Zielgeräten bereitgestellt


Wie Level Ansible-Playbooks ausführt

Standard-Ansible verwendet einen zentralen Steuerrechner, um per SSH auf Zielhosts zuzugreifen und Aufgaben remote auszuführen. Das Modell von Level ist anders: Jedes Gerät führt das Playbook lokal auf sich selbst aus.

Wenn ein Level-Skript, das einen ansible-playbook Befehl auf einem Gerät ausgeführt wird:

  1. Das Skript (und alle angehängten Playbook-Dateien) werden auf das Gerät heruntergeladen.

  2. Das Gerät führt ansible-playbook lokal unter Verwendung seiner eigenen Ansible-Installation.

  3. Der Level-Agent erfasst stdout/stderr und streamt es an die Level-Konsole, während das Playbook ausgeführt wird.

Das bedeutet, dass Ansible auf jedem Gerät installiert sein muss, nicht nur auf einem zentralen Rechner. Es bedeutet auch, dass Playbooks, die auf hosts: localhost oder lokale Verbindungstypen funktionieren am besten für die von Level verteilte Automatisierung.

ℹ️ HINWEIS: Playbooks, die über SSH auf Remote-Hosts abzielen, funktionieren weiterhin – das Gerät fungiert als Ansible-Steuerknoten für diese Remote-Verbindungen. Dies ist nützlich in Fällen, in denen ein verwaltetes Gerät andere Geräte in seinem lokalen Netzwerk erreichen muss.


Ein Level-Skript für Ansible erstellen

Das Level-Skript ist ein Shell-Wrapper, der ansible-playbook. Die Playbook-Datei selbst wird separat angehängt und zur Laufzeit auf das Gerät heruntergeladen.

Für Linux und macOS

1. Gehen Sie zu Automations → Scripts und klicken Sie auf + New script.

2. Setzen Sie den Interpreter auf Shell (Bash).

3. Fügen Sie den Playbook-Aufruf hinzu:

Bash

#!/bin/bash
ansible-playbook /path/to/playbook.yml
if [ $? -ne 0 ]; then
echo "Playbook failed on $(hostname)" >&2
exit 1
fi

4. Hängen Sie die Playbook-Datei an das Skript an oder laden Sie sie in Automations → Files und verwenden Sie eine Download File Aktion, um es vor der Skriptausführung auf das Gerät zu legen.

💡 TIPP: Verwenden Sie ansible-playbook --check während der Entwicklung, um einen Trockenlauf durchzuführen, der Syntax und Konnektivität validiert, ohne Änderungen vorzunehmen.

Für Windows (über WSL)

  1. Setzen Sie den Interpreter auf PowerShell.

  2. Ansible über WSL aufrufen:

PowerShell

wsl ansible-playbook /mnt/c/LevelPlaybooks/network_test.yml

WSL muss bereits auf dem Gerät installiert und konfiguriert sein. Siehe Ansible auf Windows einrichten unten.

Für Windows (über Cygwin oder Git Bash)

PowerShell

C:\cygwin64\bin\bash.exe -lc "ansible-playbook /cygdrive/c/LevelPlaybooks/playbook.yml"

Ansible auf Windows-Endpunkten einrichten

Da jedes Gerät das Playbook lokal ausführt, benötigen Windows-Endpunkte eine POSIX-kompatible Shell mit installiertem Python und Ansible. Zwei Optionen:

Option A: Windows-Subsystem für Linux (WSL)

1. Führen Sie in PowerShell als Administrator folgenden Befehl aus:

PowerShell

wsl --install

Starten Sie das System neu, wenn Sie dazu aufgefordert werden.

2. Aus der Ubuntu-Shell, die nach dem Neustart geöffnet wird:

Bash

sudo apt update && sudo apt upgrade -y
sudo apt install -y python3 python3-pip
pip3 install ansible

3. Überprüfen:

Bash

ansible --version
ansible-playbook --version

4. Rufen Sie in Level-Skripten Ansible über wsl ansible-playbook ... aus PowerShell.

Option B: Cygwin oder Git Bash

1. Installieren Sie Cygwin oder Git für Windows und wählen Sie dabei Python 3, pip und OpenSSH während der Einrichtung aus.

2. Aus der Cygwin- oder Git Bash-Shell:

Bash

pip3 install ansible

3. Rufen Sie in Level-Skripten Ansible auf, indem Sie die Bash-Executable direkt aufrufen:

PowerShell

C:\cygwin64\bin\bash.exe -lc "ansible-playbook /path/to/playbook.yml"

⚠️ WARNUNG: Gleichen Sie Python- und Ansible-Versionen auf allen Windows-Endpunkten ab. Versionsunterschiede zwischen Endpunkten verursachen inkonsistentes Verhalten, das schwer zu diagnostizieren ist.


Playbook-Konfiguration für die lokale Ausführung

Wenn Playbooks lokal auf jedem Gerät statt von einem zentralen Steuerknoten ausgeführt werden, helfen einige Konfigurationsanpassungen:

Verwenden Sie hosts: localhost with connection: local für Aufgaben, die auf dem Gerät selbst ausgeführt werden sollen:

YAML

- name: Local configuration
hosts: localhost
connection: local
tasks:
- name: Check connectivity
ansible.builtin.ping:

Verbose-Flags hinzufügen in der Entwicklung, um detaillierte Ausgaben in der Level-Konsole zu erhalten:

Bash

ansible-playbook /path/to/playbook.yml -vv

Level streamt alle stdout/stderr-Ausgaben, sodass der verbose Modus aufgabenweise Details inline anzeigt.


Best Practices

  • Lokal validieren, bevor Sie über Level bereitstellen. Führen Sie ansible-playbook playbook.yml --check auf einem Testgerät zuerst. Syntaxfehler im Playbook werden sofort angezeigt, anstatt mitten in einem Produktionslauf.

  • Bei Fehler mit Nicht-Null-Code beenden. Level markiert einen Skriptlauf nur dann als fehlgeschlagen, wenn das Skript mit einem Nicht-Null-Code beendet wird. Die if [ $? -ne 0 ] Die Prüfung im obigen Wrapper erledigt dies automatisch. Ohne sie kann ein fehlgeschlagenes Playbook in der Ausführungshistorie von Level wie ein Erfolg aussehen.

  • Playbooks idempotent halten. Ansible-Playbooks sollten dasselbe Ergebnis liefern, egal ob sie einmal oder zehnmal ausgeführt werden. Dadurch können sie über Level erneut ausgeführt werden, ohne unbeabsichtigte Nebeneffekte.

  • Level's Datei-Repository für Playbooks verwenden. Playbook- .yml Dateien nach Automations → Files, und verwenden Sie dann eine Download File Aktion vor dem Skriptschritt, um sie auf jedem Gerät zu platzieren. So bleiben Ihre Playbooks in Level versioniert und sichergestellt, dass jedes Gerät die aktuelle Version erhält.


FAQ

  • Muss Ansible auf jedem verwalteten Gerät installiert sein oder reicht ein zentraler Server? Jedes Gerät, auf dem Sie ein Playbook ausführen möchten, muss Ansible lokal installiert haben. Level führt keine SSH-Verbindung von einem zentralen Steuerknoten durch – es verteilt das Playbook und führt es auf jedem Gerät unabhängig aus.

  • Kann das Playbook andere Hosts über SSH vom verwalteten Gerät aus ansprechen? Ja. Das verwaltete Gerät fungiert als Ansible-Steuerknoten für alle im Playbook definierten Remote-Verbindungen. SSH-Schlüssel und Anmeldedaten müssen auf dem verwalteten Gerät selbst vorhanden sein.

  • Mein Playbook läuft lokal problemlos, schlägt aber in Level fehl. Was sollte ich zuerst prüfen? Überprüfen Sie den Benutzerkontext. Level führt Skripte als root unter Linux/macOS und als SYSTEM unter Windows. Wenn das Playbook von einem Benutzer-Heimverzeichnis, PATH oder einer Umgebungsvariable abhängt, die nur für einen bestimmten Benutzer gesetzt ist, werden diese Ressourcen nicht gefunden. Verwenden Sie absolute Pfade und eine explizite Umgebungseinrichtung im Playbook.

  • Wie übergebe ich zur Laufzeit Variablen an das Playbook? Verwenden Sie das --extra-vars Flag im ansible-playbook Aufruf. Die Systemvariablen und Automatisierungsvariablen von Level können über das {x} Auswahlfeld im Skripteditor. Zum Beispiel:
    ansible-playbook /path/to/playbook.yml --extra-vars "hostname={{level_device_name}}"

  • Kann ich das Playbook auf wiederkehrender Basis planen? Ja. Hängen Sie das Skript an eine Automatisierung mit einem geplanten Trigger an. Legen Sie den Zeitplan fest, fügen Sie eine Download File-Aktion für das Playbook hinzu, wenn es im Datei-Repository von Level gespeichert ist, und fügen Sie dann die Skript-ausführen-Aktion hinzu. Die Automatisierung führt das Playbook auf jedem Gerät aus, das den Triggerbedingungen entspricht.

Hat dies deine Frage beantwortet?