#!/usr/bin/env bash
# Verteilt die Proxy-Auswahl auf die Knoten ohne eigenen Internetzugang.
#
#   apt-proxy-ausrollen.sh pruefen
#   apt-proxy-ausrollen.sh setzen
set -uo pipefail
BEFEHL="${1:-pruefen}"
ZIELE=(10.0.3.1 10.0.3.2 10.0.3.3 10.0.2.1 10.0.2.2)

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

for ip in "${ZIELE[@]}"; do
    printf '  %-10s ' "$ip"
    rz_ssh "$ip" "true" 2>/dev/null || { echo "nicht erreichbar"; continue; }

    if [ "$BEFEHL" != setzen ]; then
        rz_ssh "$ip" "grep -c 'Proxy-Auto-Detect' /etc/apt/apt.conf.d/01proxy 2>/dev/null | tr -d '\n'; echo ' Auto-Detect-Zeile(n)'"
        continue
    fi

    scp -q -i "$RZ_SCHLUESSEL" "${RZ_SSHO[@]}" prod-config/apt-proxy-waehlen "root@$ip:/usr/local/sbin/apt-proxy-waehlen"
    rz_ssh "$ip" '
        set -e
        chmod 755 /usr/local/sbin/apt-proxy-waehlen
        command -v nc >/dev/null || { echo -n "netcat fehlt, "; exit 1; }
        cp /etc/apt/apt.conf.d/01proxy /etc/apt/apt.conf.d/01proxy.vor-auswahl 2>/dev/null || true
        cat > /etc/apt/apt.conf.d/01proxy <<CONF
// ERZEUGT von dev/deploy/apt-proxy-ausrollen.sh - nicht von Hand aendern.
// Vorher standen hier zwei feste Proxy-Zeilen untereinander; apt nimmt die
// letzte, damit hing dieser Knoten an genau einem Frontend.
Acquire::http::Proxy-Auto-Detect "/usr/local/sbin/apt-proxy-waehlen";
CONF
        # Gegenprobe: was waehlt es gerade, und kommt apt damit durch?
        gewaehlt=$(/usr/local/sbin/apt-proxy-waehlen http://archive.ubuntu.com/ubuntu/)
        if apt-get update -qq >/dev/null 2>&1; then
            echo "gesetzt, waehlt $gewaehlt, apt-get update laeuft"
        else
            echo "apt-get update schlaegt fehl - alter Stand wird zurueckgespielt"
            cp /etc/apt/apt.conf.d/01proxy.vor-auswahl /etc/apt/apt.conf.d/01proxy
            exit 1
        fi
    ' || echo "    fehlgeschlagen auf $ip"
done
