[ci skip] Phase 3: Create 66 service stacks and migrate state
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).
This commit is contained in:
parent
6b7909d94c
commit
c01c2729a3
134 changed files with 2426 additions and 0 deletions
115
scripts/migrate_service_state.sh
Normal file
115
scripts/migrate_service_state.sh
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
#!/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"
|
||||
Loading…
Add table
Add a link
Reference in a new issue