#!/usr/bin/env bash
# Führt einen Befehl auf ALLEN Frontends aus.
#
#   auf-allen-frontends.sh '<befehl>'
#
# Welche Knoten das sind, kommt seit dem 25.09.2026 aus dem Hetzner-Label
# "Webserver" (siehe lib-knoten.sh) – nicht mehr aus einer Liste im Skript.
# Ein neu aufgenommener Knoten ist damit sofort dabei.
#
# Die Knoten liegen im internen Netz und sind von hier (10.0.0.6) direkt
# erreichbar; angemeldet wird mit /root/.ssh/riccardo-prod.
set -uo pipefail

# Alte Aufrufform abfangen: früher war das erste Argument der Zugangsordner.
if [ $# -eq 2 ] && [ -d "${1:-}" ]; then
    echo "Hinweis: Der Zugangsordner wird nicht mehr gebraucht – angemeldet wird mit dem Schlüssel."
    shift
fi
BEFEHL="${1:?Befehl fehlt}"

cd "$(dirname "$0")"
source ./lib-knoten.sh
rz_pruefe_schluessel || exit 1

mapfile -t KNOTEN < <(rz_knoten) || exit 1
printf 'Knoten mit Label "%s": %d\n' "$RZ_LABEL" "${#KNOTEN[@]}"

fehler=0
for eintrag in "${KNOTEN[@]}"; do
    set -- $eintrag; name="$1"; ip="$2"
    printf '\n\033[1m== %s (%s)\033[0m\n' "$name" "$ip"
    rz_ssh "$ip" "$BEFEHL" || fehler=1
done

if [ "$fehler" = 0 ]; then
    echo
else
    echo -e "\n\033[31mMindestens ein Frontend hat einen Fehler gemeldet – nicht weitermachen, bis alle gleich sind.\033[0m"
fi
exit $fehler
