#!/bin/bash # Rolling upgrade script for fastpass worker nodes # Usage: ./rolling-upgrade-workers.sh # Example: ./rolling-upgrade-workers.sh factory.talos.dev/installer/abc123:v1.14.0 set -e IMAGE="$1" if [ -z "$IMAGE" ]; then echo "Usage: $0 " echo "" echo "Example:" echo " $0 factory.talos.dev/installer/abc123def456:v1.14.0" echo "" echo "To get the image URL, run:" echo " cd /opt/git/homelab/talos/talhelper" echo " talhelper genconfig" echo " grep 'image:' clusterconfig/fastpass-jungle-cruise.yaml | head -1" exit 1 fi declare -A WORKERS=( ["jungle-cruise"]="10.1.71.69" ["haunted-mansion"]="10.1.71.70" ["peter-pans-flight"]="10.1.71.71" ) echo "==========================================" echo "Rolling Worker Upgrade" echo "==========================================" echo "Image: $IMAGE" echo "Workers: ${!WORKERS[@]}" echo "" read -p "Proceed with rolling upgrade? (y/N): " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then echo "Aborted." exit 0 fi for worker in jungle-cruise haunted-mansion peter-pans-flight; do ip="${WORKERS[$worker]}" echo "" echo "==========================================" echo "Upgrading $worker ($ip)..." echo "==========================================" talosctl upgrade --nodes ${ip} --image ${IMAGE} --preserve echo "Waiting for $worker to be Ready..." kubectl wait --for=condition=Ready node/${worker} --timeout=10m echo "✓ $worker upgrade complete." if [ "$worker" != "peter-pans-flight" ]; then echo "Sleeping 30s before next node..." sleep 30 fi done echo "" echo "==========================================" echo "✓ All workers upgraded successfully!" echo "==========================================" echo "" kubectl get nodes -o wide