#!/usr/bin/env bash set -Eeuo pipefail SCRIPT_NAME="$(basename "${BASH_SOURCE[0]}")" readonly SCRIPT_NAME SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" readonly SCRIPT_DIR BACKENDS_DIR="$(cd "${SCRIPT_DIR}/../../backends" && pwd)" readonly BACKENDS_DIR readonly ORCHESTRATOR_BLUEPRINT_FILE="/run/tuxflotte/runtime/runtime_blueprint.json" log() { printf '[%s] %s\n' "${SCRIPT_NAME}" "$*" >&2 } fatal() { printf '[%s] FEHLER: %s\n' "${SCRIPT_NAME}" "$*" >&2 exit 1 } require_root() { if [[ "${EUID}" -ne 0 ]]; then fatal "Das Backend-Modul muss als root ausgeführt werden." fi } load_backend() { local backend_id local backend_script [[ -r "${ORCHESTRATOR_BLUEPRINT_FILE}" ]] || fatal "Runtime Blueprint nicht gefunden: ${ORCHESTRATOR_BLUEPRINT_FILE}" backend_id="$(jq --raw-output '.runtime_blueprint.backend_id // empty' "${ORCHESTRATOR_BLUEPRINT_FILE}")" [[ -n "${backend_id}" ]] || fatal "Runtime Blueprint enthält keine gültige Backend-ID." backend_script="${BACKENDS_DIR}/${backend_id}/backend.sh" [[ -r "${backend_script}" ]] || fatal "Kein Backend für '${backend_id}' gefunden: ${backend_script}" log "Lade Backend '${backend_id}' aus ${backend_script}" # shellcheck disable=SC1090 source "${backend_script}" } run_lifecycle() { local step for step in backend_init backend_validate backend_generate_config backend_launch backend_postinstall; do declare -f "${step}" >/dev/null || fatal "Backend implementiert erforderliche Funktion nicht: ${step}" log "Führe ${step}() aus." "${step}" || fatal "${step}() ist fehlgeschlagen." done } main() { require_root load_backend run_lifecycle } main "$@"