#!/usr/bin/env bash set -euo pipefail export KUBECONFIG=/Users/chrisfu/dev/knoe/knoe-k3s.kubeconfig echo "==> Removing global.nodeSelector so pods spread across cluster..." kubectl -n gitea patch gitlab gitlab --type=json -p '[ {"op":"remove","path":"/spec/chart/values/global/nodeSelector"} ]' 2>/dev/null || true echo "==> Removing per-component nodeSelectors except gitaly + minio..." kubectl -n gitea patch gitlab gitlab --type=merge -p '{ "spec":{"chart":{"values":{ "gitlab":{ "webservice":{"nodeSelector":null}, "sidekiq":{"nodeSelector":null}, "toolbox":{"nodeSelector":null}, "migrations":{"nodeSelector":null}, "gitlab-exporter":{"nodeSelector":null} }, "registry":{"nodeSelector":null} }}}}' echo "==> Force-deleting all stuck Terminating/Pending webservice+sidekiq pods..." for pod in $(kubectl -n gitea get pods --no-headers \ | grep -E "webservice|sidekiq|minio-create" \ | awk '{print $1}'); do kubectl -n gitea delete pod "$pod" --force --grace-period=0 \ --ignore-not-found 2>/dev/null || true done echo "==> Waiting 4min for operator to reconcile and pods to spread..." sleep 240 echo "==> Final pod status (with node placement):" kubectl -n gitea get pods --no-headers \ | grep -v jemalloc-builder | grep -v Completed \ | awk '{print $1, $2, $3, $4}' | sort echo "==> GitLab CR phase:" kubectl -n gitea get gitlab gitlab -o jsonpath='{.status.phase}' && echo