Generated individual stack directories for all 66 services under stacks/. Each stack has terragrunt.hcl (depends on platform) and main.tf (thin wrapper calling existing module). Migrated all 64 active service states from root terraform.tfstate to individual state files. Root state is now empty. Verified with terragrunt plan on multiple stacks (no changes).
115 lines
2 KiB
Bash
115 lines
2 KiB
Bash
#!/bin/bash
|
|
# Phase 3: Migrate all service module state from root to individual stacks
|
|
# Each module in root state is at: module.kubernetes_cluster.module.<name>["<name>"]
|
|
# Target: state/stacks/<name>/terraform.tfstate as module.<name>
|
|
|
|
set -euo pipefail
|
|
|
|
ROOT_STATE="$(pwd)/terraform.tfstate"
|
|
STATE_DIR="$(pwd)/state/stacks"
|
|
|
|
# All 64 service modules currently in root state
|
|
MODULES=(
|
|
actualbudget
|
|
affine
|
|
audiobookshelf
|
|
blog
|
|
calibre
|
|
changedetection
|
|
city-guesser
|
|
coturn
|
|
cyberchef
|
|
dashy
|
|
dawarich
|
|
descheduler
|
|
diun
|
|
drone
|
|
ebook2audiobook
|
|
echo
|
|
excalidraw
|
|
f1-stream
|
|
forgejo
|
|
freedify
|
|
freshrss
|
|
frigate
|
|
hackmd
|
|
health
|
|
homepage
|
|
immich
|
|
isponsorblocktv
|
|
jsoncrack
|
|
kms
|
|
linkwarden
|
|
matrix
|
|
meshcentral
|
|
n8n
|
|
navidrome
|
|
netbox
|
|
networking-toolbox
|
|
nextcloud
|
|
ntfy
|
|
ollama
|
|
onlyoffice
|
|
openclaw
|
|
osm_routing
|
|
owntracks
|
|
paperless-ngx
|
|
plotting-book
|
|
privatebin
|
|
real-estate-crawler
|
|
reloader
|
|
resume
|
|
rybbit
|
|
send
|
|
servarr
|
|
shadowsocks
|
|
speedtest
|
|
stirling-pdf
|
|
tandoor
|
|
tor-proxy
|
|
travel_blog
|
|
tuya-bridge
|
|
url
|
|
wealthfolio
|
|
webhook_handler
|
|
whisper
|
|
ytdlp
|
|
)
|
|
|
|
TOTAL=${#MODULES[@]}
|
|
SUCCESS=0
|
|
FAIL=0
|
|
|
|
echo "=== Phase 3: Service State Migration ==="
|
|
echo "Migrating $TOTAL modules from root state to individual stacks"
|
|
echo ""
|
|
|
|
for mod in "${MODULES[@]}"; do
|
|
idx=$((SUCCESS + FAIL + 1))
|
|
echo "[$idx/$TOTAL] Migrating: $mod"
|
|
|
|
# Create state directory
|
|
mkdir -p "$STATE_DIR/$mod"
|
|
|
|
# Source address (with for_each key)
|
|
SRC="module.kubernetes_cluster.module.${mod}[\"${mod}\"]"
|
|
DST="module.${mod}"
|
|
DST_STATE="$STATE_DIR/$mod/terraform.tfstate"
|
|
|
|
if terraform state mv \
|
|
-state="$ROOT_STATE" \
|
|
-state-out="$DST_STATE" \
|
|
"$SRC" "$DST" 2>&1; then
|
|
echo " ✓ $mod migrated successfully"
|
|
SUCCESS=$((SUCCESS + 1))
|
|
else
|
|
echo " ✗ $mod FAILED"
|
|
FAIL=$((FAIL + 1))
|
|
fi
|
|
echo ""
|
|
done
|
|
|
|
echo "=== Migration Summary ==="
|
|
echo "Total: $TOTAL"
|
|
echo "Success: $SUCCESS"
|
|
echo "Failed: $FAIL"
|