diff --git a/services/posture-check/daily-status-report.sh b/services/posture-check/daily-status-report.sh index 8504254..55601be 100755 --- a/services/posture-check/daily-status-report.sh +++ b/services/posture-check/daily-status-report.sh @@ -25,7 +25,7 @@ SEND_NTFY="${SEND_NTFY:-0}" NTFY_TOPIC="${NTFY_TOPIC:-homelab-info}" NTFY_SCRIPT="${NTFY_SCRIPT:-/mnt/user/services/homelab-infra/ops/restore-tests/send-ntfy.sh}" INCLUDE_WEATHER_REPORT="${INCLUDE_WEATHER_REPORT:-0}" -WEATHER_REPORT_SCRIPT="${WEATHER_REPORT_SCRIPT:-/mnt/user/services/homelab-infra/services/posture-check/weather-day-report.py}" +WEATHER_REPORT_SCRIPT="${WEATHER_REPORT_SCRIPT:-/mnt/user/services/homelab-infra/services/posture-check/weather-day-report.sh}" BORG_CONTAINER="${BORG_CONTAINER:-borg-ui}" PROMETHEUS_CONTAINER="${PROMETHEUS_CONTAINER:-monitoring-prometheus}" TRAEFIK_ACME_PATH="${TRAEFIK_ACME_PATH:-/mnt/user/appdata/traefik/letsencrypt/acme.json}" @@ -226,14 +226,6 @@ collect_weather_report() { append "## Wetterbericht" append "" - if ! command -v python3 >/dev/null 2>&1; then - append "- Wetterbericht nicht erzeugt: \`python3\` ist auf dem Host nicht verfuegbar." - append "" - record_section_error "weather" "python3 fehlt" - set_summary "weather_report_status" "missing-python" - return 0 - fi - if [ ! -f "$WEATHER_REPORT_SCRIPT" ]; then append "- Wetterbericht nicht erzeugt: Script fehlt unter \`$WEATHER_REPORT_SCRIPT\`." append "" @@ -243,7 +235,7 @@ collect_weather_report() { fi local weather_out - if weather_out="$(python3 "$WEATHER_REPORT_SCRIPT" --heading-level 3 2>&1)"; then + if weather_out="$(bash "$WEATHER_REPORT_SCRIPT" --heading-level 3 2>&1)"; then printf '%s\n\n' "$weather_out" >> "$BODY_PATH" set_summary "weather_report_status" "ok" else diff --git a/services/posture-check/unraid-user-scripts.md b/services/posture-check/unraid-user-scripts.md index 2e25665..aa5fadb 100644 --- a/services/posture-check/unraid-user-scripts.md +++ b/services/posture-check/unraid-user-scripts.md @@ -84,7 +84,9 @@ printf '%s' 'glsa_REPLACE_WITH_ROTATED_READ_TOKEN' > /mnt/user/appdata/secrets/m chmod 600 /mnt/user/appdata/secrets/monitoring_grafana_weather_report_token.txt ``` -Der Wetterbericht-Generator nutzt `python3` auf dem Host. +Der Wetterbericht-Generator nutzt `python3` auf dem Host, falls vorhanden. +Ohne Host-`python3` faellt er automatisch auf Docker mit +`python:3.13-alpine` zurueck. User Script: diff --git a/services/posture-check/weather-day-report.sh b/services/posture-check/weather-day-report.sh new file mode 100644 index 0000000..da3ded5 --- /dev/null +++ b/services/posture-check/weather-day-report.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +PY_SCRIPT="${WEATHER_REPORT_PY_SCRIPT:-$SCRIPT_DIR/weather-day-report.py}" +TOKEN_FILE="${GRAFANA_TOKEN_FILE:-/mnt/user/appdata/secrets/monitoring_grafana_weather_report_token.txt}" +PY_IMAGE="${WEATHER_REPORT_PY_IMAGE:-python:3.13-alpine}" + +if command -v python3 >/dev/null 2>&1; then + exec python3 "$PY_SCRIPT" "$@" +fi + +if ! command -v docker >/dev/null 2>&1; then + echo "weather-day-report: neither python3 nor docker is available" >&2 + exit 1 +fi + +if [ ! -f "$TOKEN_FILE" ]; then + echo "weather-day-report: token file missing: $TOKEN_FILE" >&2 + exit 1 +fi + +exec docker run --rm \ + --network host \ + -v "$PY_SCRIPT:/weather-day-report.py:ro" \ + -v "$TOKEN_FILE:/run/secrets/grafana_weather_report_token:ro" \ + -e GRAFANA_TOKEN_FILE=/run/secrets/grafana_weather_report_token \ + -e GRAFANA_URL="${GRAFANA_URL:-https://monitoring.kaleschke.info}" \ + -e WEATHER_REPORT_TZ="${WEATHER_REPORT_TZ:-Europe/Berlin}" \ + "$PY_IMAGE" \ + python /weather-day-report.py "$@"