#!/bin/bash # Phase 1 — StorageClass import (longhorn + longhorn-kafka) # Captures live spec, verifies against resource blocks, imports to state set -e cd "$(dirname "$0")/.." echo "=== Phase 1: StorageClass Import ===" echo "" # Verify cluster connection echo "Checking cluster connection..." kubectl cluster-info || { echo "ERROR: No cluster access"; exit 1; } echo "" # Capture live longhorn SC spec echo "--- Capturing live 'longhorn' StorageClass spec ---" kubectl get sc longhorn -o yaml > /tmp/longhorn-live.yaml echo "Saved to /tmp/longhorn-live.yaml" echo "Contents:" cat /tmp/longhorn-live.yaml echo "" # Capture live longhorn-kafka SC spec echo "--- Capturing live 'longhorn-kafka' StorageClass spec ---" kubectl get sc longhorn-kafka -o yaml > /tmp/longhorn-kafka-live.yaml echo "Saved to /tmp/longhorn-kafka-live.yaml" echo "Contents:" cat /tmp/longhorn-kafka-live.yaml echo "" # Verify terraform resource blocks match live spec echo "--- Verifying terraform/longhorn.tf resource blocks against live specs ---" echo "MANUAL STEP: Compare the captured specs above against terraform/longhorn.tf" echo " 1. Check 'provisioner', 'reclaimPolicy', 'volumeBindingMode', 'allowVolumeExpansion'" echo " 2. Check 'parameters' (numberOfReplicas, staleReplicaTimeout, fsType, dataLocality)" echo " 3. Fix terraform/longhorn.tf if any diffs found, then re-run terraform plan" echo "" read -p "Press Enter once you've verified the Terraform blocks match live specs: " _ || true echo "" # Pre-import terraform plan echo "--- Pre-import terraform plan (should be clean) ---" terraform plan -out=/tmp/pre-import.plan || { echo "ERROR: terraform plan failed"; exit 1; } echo "Plan saved to /tmp/pre-import.plan" echo "" # Import longhorn SC echo "--- Importing 'longhorn' StorageClass ---" terraform import kubernetes_storage_class.longhorn longhorn || { echo "ERROR: terraform import longhorn failed" exit 1 } echo "Import successful" echo "" # Plan after first import echo "--- Terraform plan after importing 'longhorn' (must show 0 to add/change/destroy) ---" terraform plan || { echo "ERROR: terraform plan failed"; exit 1; } echo "" read -p "Press Enter if plan shows zero changes; otherwise abort and fix: " _ || true echo "" # Import longhorn-kafka SC echo "--- Importing 'longhorn-kafka' StorageClass ---" terraform import kubernetes_storage_class.longhorn_kafka longhorn-kafka || { echo "ERROR: terraform import longhorn-kafka failed" exit 1 } echo "Import successful" echo "" # Plan after second import echo "--- Terraform plan after importing 'longhorn-kafka' (must show 0 to add/change/destroy) ---" terraform plan || { echo "ERROR: terraform plan failed"; exit 1; } echo "" read -p "Press Enter if plan shows zero changes; otherwise abort and fix: " _ || true echo "" # Annotate longhorn-kafka with helm.sh/resource-policy=keep echo "--- Annotating 'longhorn-kafka' with helm.sh/resource-policy=keep ---" kubectl annotate storageclass longhorn-kafka helm.sh/resource-policy=keep --overwrite echo "Annotation added" echo "" echo "=== Phase 1 Complete ===" echo "StorageClasses imported successfully. Ready to proceed to Phase 2 (PVC imports)."