diff --git a/rmm-tasks/ESPO-20-Inventar.sh b/rmm-tasks/ESPO-20-Inventar.sh new file mode 100755 index 0000000..81f9a19 --- /dev/null +++ b/rmm-tasks/ESPO-20-Inventar.sh @@ -0,0 +1,52 @@ +#!/bin/bash +# ESPO-20-Inventar - misst die Ist-Werte der Instanz und legt sie einzeln unter /run/espo-inventar ab. +# Aufruf: ohne Argumente. +# Die Task-Zeilen lesen die Dateien danach einzeln mit cat; erst deren Ausgabe fuellt ueber %output% +# das jeweilige Custom Field. Eine Messung fuer alle Werte hat drei Gruende: Sie stammen aus demselben +# Augenblick, die teuren Aufrufe passieren einmal, und ein cat kann keine Fehlermeldung in ein Feld tragen. +# +# Laesst sich ein Wert nicht ermitteln, bricht dieser Schritt ab - dann laufen die Folgezeilen nicht und +# kein Feld wird ueberschrieben. Eine stehende Instanz darf die Werte nicht leeren, sonst sieht eine +# Stoerung aus wie eine leere Instanz. +set -u + +ZIEL=/run/espo-inventar + +echo "ESPO-20-Inventar, Skriptstand 2026-09-24" + +fehler() { echo "FEHLER: $*"; echo "ESPO20_ERGEBNIS: FEHLER"; exit 1; } + +# 1. Vorbedingungen. +[ "$(id -u)" -eq 0 ] || fehler "nicht als root gestartet" +command -v docker >/dev/null && docker info >/dev/null 2>&1 || fehler "Docker laeuft nicht" + +# 2. EspoCRM: Image, Digest, Version. +ESPO_IMAGE="$(docker inspect -f '{{.Config.Image}}' espocrm 2>/dev/null)" +[ -n "$ESPO_IMAGE" ] || fehler "Container 'espocrm' nicht gefunden - laeuft die Instanz?" +ESPO_DIGEST="$(docker image inspect --format '{{if .RepoDigests}}{{index .RepoDigests 0}}{{else}}{{.Id}}{{end}}' "$ESPO_IMAGE" 2>/dev/null)" +[ -n "$ESPO_DIGEST" ] || fehler "Digest des EspoCRM-Images nicht ermittelbar" +ESPO_VERSION="$(docker exec espocrm php -r '$a=@include "data/config.php"; $b=@include "data/config-internal.php"; $c=array_merge(is_array($a)?$a:[], is_array($b)?$b:[]); echo $c["version"] ?? "";' 2>/dev/null)" +[ -n "$ESPO_VERSION" ] || fehler "EspoCRM-Version nicht ermittelbar" + +# 3. MariaDB: Image, Digest, Version. Das Passwort wird im Container aus der Secret-Datei gelesen, +# damit es weder im Skript noch in der Prozessliste der VM auftaucht. +DB_IMAGE="$(docker inspect -f '{{.Config.Image}}' espocrm-db 2>/dev/null)" +[ -n "$DB_IMAGE" ] || fehler "Container 'espocrm-db' nicht gefunden" +DB_DIGEST="$(docker image inspect --format '{{if .RepoDigests}}{{index .RepoDigests 0}}{{else}}{{.Id}}{{end}}' "$DB_IMAGE" 2>/dev/null)" +[ -n "$DB_DIGEST" ] || fehler "Digest des MariaDB-Images nicht ermittelbar" +DB_VERSION="$(docker exec espocrm-db sh -c 'mariadb -u root -p"$(cat /run/secrets/db_root_password)" -N -B -e "select version()"' 2>/dev/null | tr -d '\r')" +[ -n "$DB_VERSION" ] || fehler "MariaDB-Version nicht ermittelbar" + +# 4. Ablegen - ohne abschliessenden Zeilenumbruch, damit cat genau den Wert liefert. +install -d -m 0755 "$ZIEL" +printf '%s' "$ESPO_VERSION" > "$ZIEL/espo_version" +printf '%s' "$ESPO_DIGEST" > "$ZIEL/espo_image_digest" +printf '%s' "$DB_VERSION" > "$ZIEL/espo_db_version" +printf '%s' "$DB_DIGEST" > "$ZIEL/espo_db_image_digest" + +# 5. Zur Kontrolle im Protokoll - die Custom Fields fuellen die Folgezeilen des Tasks. +echo "espo_version: $ESPO_VERSION" +echo "espo_image_digest: $ESPO_DIGEST" +echo "espo_db_version: $DB_VERSION" +echo "espo_db_image_digest: $DB_DIGEST" +echo "ESPO20_ERGEBNIS: OK"