From d7b6553effa884271570f8a319465f18baa76cd8 Mon Sep 17 00:00:00 2001 From: Bram Date: Wed, 29 Jul 2026 19:21:36 +0200 Subject: [PATCH] never pick previous vpn --- .../gluetun-pia-wireguard-rotator/README.md | 2 +- .../gluetun-pia-wireguard-rotator/rotate.sh | 29 +++++++++++++++++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/Dockers/gluetun-pia-wireguard-rotator/README.md b/Dockers/gluetun-pia-wireguard-rotator/README.md index 2f7e75c..c95c811 100644 --- a/Dockers/gluetun-pia-wireguard-rotator/README.md +++ b/Dockers/gluetun-pia-wireguard-rotator/README.md @@ -100,7 +100,7 @@ Optioneel host-`.env`-keys (`WIREGUARD_*`) opruimen als die niet meer gebruikt w 1. Bij start: direct roteren (nieuwe config + container-restarts) 2. Daarna: elke dag om `ROTATE_AT` opnieuw -3. Willekeurige region uit `PIA_REGIONS` +3. Willekeurige region uit `PIA_REGIONS`, nooit dezelfde als de vorige (uit `rotator-state.json`; uitzondering: maar één region geconfigureerd) 4. `GLUETUN_CONTAINER` wordt altijd als eerste herstart, daarna containers uit `RESTART_CONTAINERS` **Let op:** zet gluetun **niet** in `RESTART_CONTAINERS`; gebruik `GLUETUN_CONTAINER` daarvoor. Sidecars met `network_mode: service:...` horen in `RESTART_CONTAINERS`. diff --git a/Dockers/gluetun-pia-wireguard-rotator/rotate.sh b/Dockers/gluetun-pia-wireguard-rotator/rotate.sh index 9da9240..dec98ad 100644 --- a/Dockers/gluetun-pia-wireguard-rotator/rotate.sh +++ b/Dockers/gluetun-pia-wireguard-rotator/rotate.sh @@ -27,8 +27,16 @@ parse_regions() { tr ',' '\n' <<<"$raw" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//' | awk 'NF' } +read_previous_region() { + local state_path="${ROTATOR_STATE_PATH:-/config/rotator-state.json}" + if [[ ! -f "$state_path" ]]; then + return 0 + fi + jq -r '.region // empty' "$state_path" 2>/dev/null || true +} + pick_random_region() { - local regions=() + local regions=() previous candidates=() while IFS= read -r region; do [[ -n "$region" ]] && regions+=("$region") done < <(parse_regions) @@ -38,7 +46,24 @@ pick_random_region() { exit 2 fi - printf '%s\n' "${regions[@]}" | shuf -n 1 + previous="$(read_previous_region)" + if [[ -n "$previous" ]]; then + for region in "${regions[@]}"; do + [[ "$region" == "$previous" ]] && continue + candidates+=("$region") + done + fi + + if [[ "${#candidates[@]}" -eq 0 ]]; then + if [[ -n "$previous" && "${#regions[@]}" -eq 1 ]]; then + log "Only one region configured; reusing previous: $previous" + fi + candidates=("${regions[@]}") + else + log "Excluding previous region: $previous" + fi + + printf '%s\n' "${candidates[@]}" | shuf -n 1 } parse_additional_restart_containers() {