82 lines
2.8 KiB
Bash
82 lines
2.8 KiB
Bash
#!/bin/bash
|
|||
|
|
set -e
|
||
|
|
|
||
|
|
echo "=== Step 1: Apply bootstrap manifests (namespaces, cert-manager issuers/certs) ==="
|
||
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
|
|
source "$SCRIPT_DIR/../../.env.terraform.sh"
|
||
|
|
kubectl apply -f "$SCRIPT_DIR/../bootstrap-manifests.yaml" --validate=false
|
||
|
|
echo "✓ Bootstrap manifests applied"
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "=== Step 2: Wait for cert-manager to be ready ==="
|
||
|
|
kubectl -n cert-manager rollout status deployment/cert-manager --timeout=5m
|
||
|
|
echo "✓ cert-manager ready"
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "=== Step 3: Wait for homelab-ca certificate to be issued ==="
|
||
|
|
for i in {1..60}; do
|
||
|
|
if kubectl -n cert-manager get secret homelab-ca-secret &>/dev/null; then
|
||
|
|
echo "✓ homelab-ca-secret created"
|
||
|
|
break
|
||
|
|
fi
|
||
|
|
echo "Waiting for homelab-ca-secret... ($i/60)"
|
||
|
|
sleep 2
|
||
|
|
done
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "=== Step 4a: Delete old ArgoCD release from cicd namespace ==="
|
||
|
|
if helm list -n cicd | grep -q "^argocd"; then
|
||
|
|
helm delete argocd -n cicd
|
||
|
|
echo "✓ Old ArgoCD removed from cicd"
|
||
|
|
sleep 5
|
||
|
|
else
|
||
|
|
echo "✓ No ArgoCD in cicd to delete"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "=== Step 4a2: Delete orphaned CRDs left behind by helm resource policy ==="
|
||
|
|
kubectl delete crd applications.argoproj.io applicationsets.argoproj.io appprojects.argoproj.io --ignore-not-found
|
||
|
|
echo "✓ CRDs deleted"
|
||
|
|
sleep 2
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "=== Step 4b: Install ArgoCD helm release in argocd namespace ==="
|
||
|
|
helm repo add argocd https://argoproj.github.io/argo-helm
|
||
|
|
helm repo update
|
||
|
|
ARGOCD_VALUES="$SCRIPT_DIR/../../k8s/talos-ci-cd/argocd-values.yaml"
|
||
|
|
helm upgrade --install argocd argocd/argo-cd \
|
||
|
|
--namespace argocd \
|
||
|
|
--version 7.3.3 \
|
||
|
|
--values "$ARGOCD_VALUES" \
|
||
|
|
--wait
|
||
|
|
echo "✓ ArgoCD installed in argocd namespace"
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "=== Step 5: Import kubernetes resources into TF state ==="
|
||
|
|
cd "$SCRIPT_DIR/../.."
|
||
|
|
source .env.terraform.sh
|
||
|
|
cd terraform
|
||
|
|
|
||
|
|
# Import namespaces
|
||
|
|
terraform import kubernetes_namespace.argocd argocd
|
||
|
|
terraform import 'kubernetes_namespace.namespaces["dev-tools"]' dev-tools
|
||
|
|
|
||
|
|
# Import cert-manager objects (kubernetes_manifest import syntax uses colons: apiVersion:kind:name or apiVersion:kind:namespace:name)
|
||
|
|
terraform import kubernetes_manifest.selfsigned_bootstrap 'cert-manager.io:v1:ClusterIssuer:selfsigned-bootstrap'
|
||
|
|
terraform import kubernetes_manifest.homelab_ca_issuer 'cert-manager.io:v1:ClusterIssuer:homelab-ca'
|
||
|
|
terraform import kubernetes_manifest.homelab_ca_cert 'cert-manager.io:v1:Certificate:cert-manager:homelab-ca'
|
||
|
|
terraform import kubernetes_manifest.wildcard_cert 'cert-manager.io:v1:Certificate:ingress-nginx:homelab-tls'
|
||
|
|
|
||
|
|
echo "✓ Kubernetes resources imported"
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "=== Step 6: Import ArgoCD helm release ==="
|
||
|
|
terraform import helm_release.argocd argocd/argocd
|
||
|
|
echo "✓ ArgoCD helm release imported"
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "=== Step 7: Verify clean plan ==="
|
||
|
|
terraform plan
|
||
|
|
echo ""
|
||
|
|
echo "✓ All bootstrap resources imported. Plan should show zero changes."
|