Skip to content

Commit d80508f

Browse files
committed
Updated Pruning of existing ressources
1 parent fc6a915 commit d80508f

File tree

1 file changed

+48
-81
lines changed

1 file changed

+48
-81
lines changed

.github/workflows/deploy-azure.yml

Lines changed: 48 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -104,98 +104,65 @@ jobs:
104104
# 3 · Prune stale resources (AKS-aware, error-safe)
105105
################################################################
106106
- name: Prune stale state entries
107-
env: { TF_IN_AUTOMATION: true }
108-
run: |
109-
set -euo pipefail
110-
STATE="$TF_DIR/terraform.tfstate"
111-
RG="rg-aks-memgraph-${{ env.ENVIRONMENT }}"
112-
AKS="aks-memgraph-${{ env.ENVIRONMENT }}"
113-
114-
# No state yet → nothing to prune
115-
if [ ! -f "$STATE" ]; then
116-
echo "🛈 No state file; skipping prune"
117-
exit 0
118-
fi
119-
120-
# Empty state → nothing to prune
121-
ADDR_LIST=$(terraform -chdir="$TF_DIR" state list 2>/dev/null || true)
122-
if [ -z "$ADDR_LIST" ]; then
123-
echo "🛈 Empty state; skipping prune"
124-
exit 0
125-
fi
126-
127-
while IFS= read -r ADDR; do
128-
[ -z "$ADDR" ] && continue
129-
130-
echo "🔍 Checking resource: $ADDR"
131-
132-
# Special handling for resource group - always keep
133-
if [[ "$ADDR" == "azurerm_resource_group.this" ]]; then
107+
env: { TF_IN_AUTOMATION: true }
108+
run: |
109+
set -euo pipefail
110+
STATE="$TF_DIR/terraform.tfstate"
111+
RG="rg-aks-memgraph-${{ env.ENVIRONMENT }}"
112+
AKS="aks-memgraph-${{ env.ENVIRONMENT }}"
113+
114+
# Verify that the state file exists
115+
if [ ! -f "$STATE" ]; then
116+
echo "🛈 No state file; skipping prune"
117+
exit 0
118+
fi
119+
120+
# Attempt to list Terraform state
121+
ADDR_LIST=$(terraform -chdir="$TF_DIR" state list 2>/dev/null || true)
122+
if [ $? -ne 0 ]; then
123+
echo "⚠️ Error listing Terraform state. Skipping prune."
124+
exit 0
125+
fi
126+
127+
if [ -z "$ADDR_LIST" ]; then
128+
echo "🛈 Empty state; skipping prune"
129+
exit 0
130+
fi
131+
132+
while IFS= read -r ADDR; do
133+
[ -z "$ADDR" ] && continue
134+
135+
echo "🔍 Checking resource: $ADDR"
136+
137+
# Handle specific resource types
138+
case "$ADDR" in
139+
azurerm_resource_group.this)
134140
echo "✅ Keeping resource group in state"
135-
continue
136-
fi
137-
138-
# Special handling for AKS cluster
139-
if [[ "$ADDR" == "azurerm_kubernetes_cluster.this" ]]; then
141+
;;
142+
azurerm_kubernetes_cluster.this)
140143
if ! az aks show --resource-group "$RG" --name "$AKS" &>/dev/null; then
141-
echo "⚠️ Removing stale AKS entry from state"
142-
terraform -chdir="$TF_DIR" state rm "$ADDR"
144+
echo "⚠️ Removing stale AKS entry from state"
145+
terraform -chdir="$TF_DIR" state rm "$ADDR" || true
143146
else
144147
echo "✅ AKS cluster exists in Azure"
145148
fi
146-
continue
147-
fi
149+
;;
150+
*)
151+
RESOURCE_OUTPUT=$(terraform -chdir="$TF_DIR" state show -no-color "$ADDR" 2>/dev/null || echo "")
152+
ID=$(echo "$RESOURCE_OUTPUT" | grep '^id' | awk -F ' = ' '{print $2}' | sed 's/"//g')
148153
149-
# Extract the resource ID more robustly
150-
RESOURCE_OUTPUT=$(terraform -chdir="$TF_DIR" state show -no-color "$ADDR" 2>/dev/null || echo "")
151-
152-
# Skip if we can't get state output
153-
if [ -z "$RESOURCE_OUTPUT" ]; then
154-
echo "⚠️ Cannot retrieve state for $ADDR - removing"
155-
terraform -chdir="$TF_DIR" state rm "$ADDR" || true
156-
continue
157-
fi
158-
159-
# Extract ID and strip quotes
160-
ID=$(echo "$RESOURCE_OUTPUT" | grep '^id' | awk -F ' = ' '{print $2}' | sed 's/"//g')
161-
162-
if [ -z "$ID" ]; then
163-
echo "⚠️ No resource ID found for $ADDR - removing"
164-
terraform -chdir="$TF_DIR" state rm "$ADDR" || true
165-
continue
166-
fi
167-
168-
# Check if resource exists using appropriate Azure CLI command
169-
if [[ "$ADDR" == azurerm_kubernetes_cluster* ]] || [[ "$ADDR" == azurerm_resource_group* ]]; then
170-
# These types were already handled above
171-
continue
172-
elif [[ "$ADDR" == azurerm_virtual_network* ]]; then
173-
VNET_NAME=$(echo "$RESOURCE_OUTPUT" | grep 'name.*=' | head -1 | awk -F ' = ' '{print $2}' | sed 's/"//g')
174-
if ! az network vnet show --resource-group "$RG" --name "$VNET_NAME" &>/dev/null; then
175-
echo "⚠️ Azure VNET missing → $ADDR — removing"
154+
if [ -z "$ID" ]; then
155+
echo "⚠️ No resource ID found for $ADDR - removing"
176156
terraform -chdir="$TF_DIR" state rm "$ADDR" || true
177-
else
178-
echo "✅ Resource exists: $ADDR"
179-
fi
180-
elif [[ "$ADDR" == azurerm_subnet* ]]; then
181-
SUBNET_NAME=$(echo "$RESOURCE_OUTPUT" | grep 'name.*=' | head -1 | awk -F ' = ' '{print $2}' | sed 's/"//g')
182-
VNET_NAME=$(echo "$ID" | awk -F'/' '{print $9}')
183-
if ! az network vnet subnet show --resource-group "$RG" --vnet-name "$VNET_NAME" --name "$SUBNET_NAME" &>/dev/null; then
184-
echo "⚠️ Azure Subnet missing → $ADDR — removing"
157+
elif ! az resource show --ids "$ID" --query id -o tsv &>/dev/null; then
158+
echo "⚠️ Azure object missing → $ADDR — removing"
185159
terraform -chdir="$TF_DIR" state rm "$ADDR" || true
186160
else
187161
echo "✅ Resource exists: $ADDR"
188162
fi
189-
else
190-
# Generic resource check - try to use resource show but handle failures gracefully
191-
if ! az resource show --ids "$ID" --query id -o tsv &>/dev/null; then
192-
echo "⚠️ Azure object missing → $ADDR — removing"
193-
terraform -chdir="$TF_DIR" state rm "$ADDR" || true
194-
else
195-
echo "✅ Resource exists: $ADDR"
196-
fi
197-
fi
198-
done <<< "$ADDR_LIST"
163+
;;
164+
esac
165+
done <<< "$ADDR_LIST"
199166
200167
################################################################
201168
# 4 · Terraform apply

0 commit comments

Comments
 (0)