CBSDfile-Hooks: Pre-/Post-Aktionen

Hook-Typen

CBSDfile unterstützt Hook-Funktionen, die automatisch zu bestimmten Zeitpunkten im Lebenszyklus aufgerufen werden:

Hook Wann ausgeführt
globals() Vor der Verarbeitung jeder Umgebung (globale Variablen)
preup() Einmalig vor dem Start der Erstellung aller Umgebungen
preup_<name>() Vor der Erstellung einer bestimmten Umgebung <name>
postcreate_<name>() Nach der Erstellung der Umgebung <name>
postdestroy_<name>() Nach dem Löschen der Umgebung <name>
postup() Einmalig nach der Verarbeitung aller Umgebungen

Ausführungsreihenfolge

  1. globals() – globale Variablen
  2. preup() – globale Vorbereitung
  3. Für jede Umgebung:
  4. preup_<name>() — spezifische Vorbereitung
  5. Umgebung erstellen
  6. postcreate_<name>() — Post-Install-Konfiguration
  7. postup() — Finalisierung

Beispiele

Einbinden einer gemeinsamen Konfiguration

preup()
{
    # Gemeinsame Konfiguration laden (z. B. IP-Adressen aus einer externen Datei)
    . ../config
}

Die Datei ../config kann folgende Variablen enthalten:

REDIS_RO_IP="10.0.0.20"
REDIS_RW_IP="10.0.0.21"

Post-Install-Konfiguration innerhalb der Jail

postcreate_web1()
{
    jexec jname=${jname} /bin/sh <<EOF
sysrc nginx_enable="YES"
sysrc php_fpm_enable="YES"
pkg install -y redis
service nginx start
EOF
}

Überprüfung der Abhängigkeiten vor dem Erstellen

preup_redis1()
{
    # Sicherstellen, dass die base-jail existiert
    if ! jstatus jname=base-jail > /dev/null 2>&1; then

        echo "Erstelle base-jail..." 
        jcreate jname=base-jail jprofile=base runasap=1 
    fi 
} 

Post-create mit Dateikopie

postcreate_app1() {     
# Konfigurationsdateien in die Jail kopieren     
jscp src=./configs/nginx.conf dest=/usr/local/etc/nginx/nginx.conf jname=${jname}      
# Skripte kopieren     
jscp src=./scripts/setup.sh dest=/tmp/setup.sh jname=${jname}     
jexec jname=${jname} /bin/sh /tmp/setup.sh }  

Variablen innerhalb von Hooks

Im Hook-Körper sind verfügbar:
- Alle Variablen aus globals() und <type>_<name>()
- $jname — Name der aktuellen Umgebung - $rc — Rückgabewert der letzten Operation

Befehle zur Ausführung innerhalb von Umgebungen

Befehl Beschreibung
jexec jname=<name> <befehl> Befehl innerhalb einer Jail ausführen
jscp src=<pfad> dest=<pfad> jname=<name> Datei vom Host in die Jail kopieren
bexec <name> <befehl> Befehl innerhalb einer bhyve-VM ausführen (über SSH)
bscp <name> <pfad> <pfad> Datei vom Host in die bhyve-VM kopieren (über SSH)

Für bhyve-VMs verwendet der Befehl bexec SSH. Der Parameter bhyve_ssh_wait (standardmäßig aktiviert) wartet auf die Stabilisierung der SSH-Verbindung vor der Ausführung.

Empfehlungen

  • preup() — für globale Vorbereitung und das Laden gemeinsamer Konfigurationen.
  • postcreate_<name>() — für Post-Install-Einstellungen von Diensten und Paketinstallationen.
  • preup_<name>() — zur Überprüfung von Abhängigkeiten und vorbereitenden Maßnahmen.
  • Verwenden Sie in postcreate die Befehle jexec/bexec, um Kommandos innerhalb der Umgebung auszuführen, sowie jscp/bscp, um Dateien zu kopieren.

Verwandte Seiten