From 41d0abda161f403a18f89494f972c790759d0aaf Mon Sep 17 00:00:00 2001 From: MichaelFisher1997 Date: Sun, 1 Mar 2026 13:27:02 +0000 Subject: [PATCH] fix: auto-import existing Hetzner servers into Terraform state in CI --- .gitea/workflows/deploy.yml | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index 5cd58d3..ffbf2a6 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -58,6 +58,41 @@ jobs: echo "${{ secrets.SSH_PUBLIC_KEY }}" > ~/.ssh/id_ed25519.pub chmod 644 ~/.ssh/id_ed25519.pub + - name: Install jq + run: | + apt-get update + apt-get install -y jq + + - name: Import existing servers into state (if missing) + working-directory: terraform + env: + HCLOUD_TOKEN: ${{ secrets.HCLOUD_TOKEN }} + run: | + set -e + ensure_import() { + address="$1" + name="$2" + if terraform state show "$address" >/dev/null 2>&1; then + echo "$address already in state" + return + fi + id=$(curl -sS -H "Authorization: Bearer ${HCLOUD_TOKEN}" "https://api.hetzner.cloud/v1/servers?name=${name}" | jq -r '.servers[0].id // empty') + if [ -n "$id" ]; then + echo "Importing $address from server $name ($id)" + terraform import "$address" "$id" + else + echo "No existing server found for $name; skipping import" + fi + } + + ensure_import 'hcloud_server.control_plane[0]' 'k8s-cluster-cp-1' + ensure_import 'hcloud_server.control_plane[1]' 'k8s-cluster-cp-2' + ensure_import 'hcloud_server.control_plane[2]' 'k8s-cluster-cp-3' + ensure_import 'hcloud_server.workers[0]' 'k8s-cluster-worker-1' + ensure_import 'hcloud_server.workers[1]' 'k8s-cluster-worker-2' + ensure_import 'hcloud_server.workers[2]' 'k8s-cluster-worker-3' + ensure_import 'hcloud_server.workers[3]' 'k8s-cluster-worker-4' + - name: Terraform Plan id: plan working-directory: terraform