Salt-Module sind Python-Dateien, die auf dem Minion ausgeführt werden. Leg die Datei im Verzeichnis /srv/salt/_modules/ ab. Hier ein einfaches Beispiel:
/srv/salt/_modules/geoip.py
import requestsdefget_location():""" Holt den Standort des Minions basierend auf der öffentlichen IP. """ url ="http://ip-api.com/json/"try: response = requests.get(url)if response.status_code ==200: data = response.json()return{"country": data.get("country"),"region": data.get("regionName"),"city": data.get("city"),"latitude": data.get("lat"),"longitude": data.get("lon"),}else:return{"error":"API request failed with status code {}".format(response.status_code)}exceptExceptionas e:return{"error":str(e)}
Module auf Minions kopieren
Kopieren Sie das Modul auf alle Minions. Dies müssen Sie nach jeder Änderung wiederholen.
Nutzen Sie die KI, z. B. ChatGPT, um sich eigene Module erstellen zu lassen. Hier ein Beispielprompt:
ChatGPT Prompt
Erstelle ein Salt Modul „uptime_monitor“ mit der Funktion „create“ basierend auf Python3 und dem Requests Modul. Das Modul soll mit der API von Betterstack Uptime Monitoring kommunizieren. https://uptime.betterstack.com/api/v2/heartbeats
Das Modul soll einen Heartbeat Monitor erstellen, damit der Minion per curl einen Heartbeat senden kann.
Parameter
Das Modul erwartet die Angabe der folgenden Parameter
"api_key" Key zur Authentifizierung an der API, verpflichtend
„monitor“. Der Wert von "monitor" wird bei Betterstack als Name des Heartbeat Monitors gesetzt. Pflichtangabe
"env_file". Angabe einer Datei. optional. Wenn Datei angeben, wird die URL des Hartbeats Monitors als Shell Variable, in diese Datei gespeichert. Z.B. MONITOR_URL="https://example.com"
"env_var", Name der Umgebungsvariable für "env_file". Optional. Standard "MONITOR_URL".
„grace“. Default = 5 Minuten. optional
„period“. Default = 1 Minute. optional
Rückgabe
Das Modul soll die URL des Heartbeat Monitors zurückliefen. Wenn der Heartbeat Monitor schon existiert, soll die existierende URL und keine Änderungen zurückgeliefert werden.
Fehlerbehandlung
Sollte die API nicht 2XX zück liefern, verpacke die Antwort der API in eine sauber formatierte und gut lesbare Fehlermeldung. Beachte, dass eine Fehlermeldung der API Json oder Plaintext sein kann.
salt '*' saltutil.sync_modules
salt 'ruby' uptime_monitor.create api_key='**********' monitor='una'
# Create the heartbeat monitor and store the URL in the Minion's grainscreate_heartbeat_monitor:module.run: - name:uptime_monitor.create - api_key:******** - monitor: {{ grains['id'] }} - env_file:/etc/default/uptime_monitor# Call the URL to send a heartbeatsned_heartbeat:cmd.run: - name:| cat /etc/default/uptime_monitor . /etc/default/uptime_monitor curl -s $MONITOR_URL