Saltstack
  • Willkommen
  • Einführung
  • Testumgebung
    • Salt-Master öffentlicher FQDN
  • Salt installieren
    • Minions und Master "verheiraten"
  • Salt Module
    • Beispiel Benutzer anlegen
    • Dateien hin und her kopieren
  • Salt States
    • Yaml verstehen
    • Editoren anpassen
    • Beispiel Benutzer verwalten
    • Abhängigkeiten
    • Dateien editieren
    • Shell Kommandos
    • Beispiel Caddy Webserver
  • Linter
  • Minions adressieren
    • Grains
    • Hostgruppen - Node Groups
  • Jinja
    • Beispiel Caddy PHP
  • top.sls
  • Output
  • Pillars
    • Hosts Pillars
    • GPG
    • Vault
    • Datenbanken
    • Beispiel Benutzerverwaltung
  • Salt-Mine
  • Eigene Module erstellen
  • Orchestrierung
  • Returner & Job-Cache
  • Salt SSH
  • Salt API
  • Salt Cloud
    • Hinweise und Fallen
    • KVM und Libvirt
    • Scaleway
    • Digitalocean
    • Hetzner Cloud
    • eigene Deploymentscripte
    • Dynamische Portforwarding
    • Keys automatisch aufräumen
    • Start Aktionen
  • GIT
    • Alternative CD
  • Salt Reactor
  • Salt für Windows
    • Software ohne Repository installieren
    • PowerShell
    • Chocolatey Paktemanager
    • Lokales Logon Skript
    • Software Repository
  • Beispiele
    • Restic Backup
    • Apache Web-Proxy
    • Wartungstunnel
    • Unattended Upgrades
  • Salt & Etcd
  • Salt ACS
Powered by GitBook
On this page
  • Eigene Module anlegen, ein simples Beispiel
  • Das eigene Monitoring Modul, die KI hilft

Eigene Module erstellen

So erstellen Sie mit Python eigene Salt Module

Eigene Module anlegen, ein simples Beispiel

Modul auf dem Master anlegen

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 requests

def get_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)}
    except Exception as e:
        return {"error": str(e)}

Module auf Minions kopieren

Kopieren Sie das Modul auf alle Minions. Dies müssen Sie nach jeder Änderung wiederholen.

salt '*' saltutil.sync_modules

Modul verwenden

salt '*' geoip.get_location

Modul in einem State verwenden

get_minion_location:
  module.run:
    - name: geoip.get_location

Das eigene Monitoring Modul, die KI hilft

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 grains
create_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 heartbeat
sned_heartbeat:
  cmd.run: 
    - name: |
        cat /etc/default/uptime_monitor
        . /etc/default/uptime_monitor
        curl -s $MONITOR_URL
PreviousSalt-MineNextOrchestrierung

Last updated 5 months ago

ChatGPT erstellt ein Salt Modul für uns.
Das Modul hat den Heartbeat Monitor angelegt
Page cover image