Archived
49 lines
1.7 KiB
Bash
49 lines
1.7 KiB
Bash
#!/bin/bash
|
|
# Phase 2 — Recreate overlay networks + redeploy stacks
|
|
# Only runs on whichever node holds swarm leadership
|
|
# Must wait for all 3 nodes to complete phase1 first
|
|
LOG=/volume1/docker/mtu_migration/phase2.log
|
|
exec >> "$LOG" 2>&1
|
|
echo "[$(date)] Phase2 starting — waiting for all nodes phase1.done"
|
|
TIMEOUT=600
|
|
ELAPSED=0
|
|
while true; do
|
|
ALL_DONE=true
|
|
for node in docker-2 docker-3; do
|
|
[ ! -f "/volume1/docker/mtu_migration/${node}_phase1.done" ] && ALL_DONE=false
|
|
done
|
|
$ALL_DONE && break
|
|
sleep 5; ELAPSED=$((ELAPSED+5))
|
|
if [ "$ELAPSED" -ge "$TIMEOUT" ]; then
|
|
echo "[$(date)] TIMEOUT waiting for phase1 — aborting phase2"
|
|
exit 1
|
|
fi
|
|
done
|
|
echo "[$(date)] All phase1 done files present — checking swarm quorum"
|
|
SWARM_READY=false
|
|
for i in $(seq 1 24); do
|
|
STATUS=$(docker node ls 2>/dev/null | grep -c "Ready")
|
|
echo "[$(date)] Swarm ready nodes: $STATUS"
|
|
[ "$STATUS" -ge 2 ] && SWARM_READY=true && break
|
|
sleep 10
|
|
done
|
|
if ! $SWARM_READY; then
|
|
echo "[$(date)] Swarm not ready after 4min — aborting phase2"
|
|
exit 1
|
|
fi
|
|
echo "[$(date)] Swarm healthy — redeploying stacks"
|
|
CD=/volume1/docker/compose-files
|
|
for stack in traefik auth postgresql; do
|
|
f="$CD/${stack}.yaml"
|
|
[ -f "$f" ] || { echo "[$(date)] WARN: $f not found, skipping"; continue; }
|
|
echo "[$(date)] Redeploying stack: $stack"
|
|
docker stack deploy -c "$f" "$stack" 2>&1
|
|
echo "[$(date)] $stack deploy exit: $?"
|
|
sleep 5
|
|
done
|
|
echo "[$(date)] Verifying overlay MTUs:"
|
|
docker network ls --filter driver=overlay -q | \
|
|
xargs docker network inspect --format '{{.Name}} {{json .Options}}' 2>/dev/null
|
|
echo "[$(date)] Phase2 COMPLETE"
|
|
touch /volume1/docker/mtu_migration/phase2.done
|