Merge pull request #9959 from sprt/fix-ci-cleanup

ci: cleanup: Ignore nonexisting resources
This commit is contained in:
Steve Horsman 2024-07-18 19:23:48 +01:00 committed by GitHub
commit 256ab50f1a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 12 additions and 4 deletions

View File

@ -1,7 +1,7 @@
name: Cleanup dangling Azure resources name: Cleanup dangling Azure resources
on: on:
schedule: schedule:
- cron: "0 */6 * * *" - cron: "0 0 * * *"
workflow_dispatch: workflow_dispatch:
jobs: jobs:
@ -27,5 +27,5 @@ jobs:
- name: Cleanup resources - name: Cleanup resources
env: env:
AZ_SUBSCRIPTION_ID: ${{ secrets.AZ_SUBSCRIPTION_ID }} AZ_SUBSCRIPTION_ID: ${{ secrets.AZ_SUBSCRIPTION_ID }}
CLEANUP_AFTER_HOURS: 6 # Clean up resources created more than this many hours ago. CLEANUP_AFTER_HOURS: 24 # Clean up resources created more than this many hours ago.
run: python3 tests/cleanup_resources.py run: python3 tests/cleanup_resources.py

View File

@ -3,6 +3,7 @@
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta, timezone
import os import os
from azure.core.exceptions import ResourceNotFoundError
from azure.identity import AzureCliCredential from azure.identity import AzureCliCredential
from azure.mgmt.resource import ResourceManagementClient from azure.mgmt.resource import ResourceManagementClient
@ -44,12 +45,19 @@ for resource in resources:
# /subscriptions/(subscriptionId)/resourceGroups/(resourceGroupName)/providers/(resourceProviderNamespace)/(resourceType)/(resourceName) # /subscriptions/(subscriptionId)/resourceGroups/(resourceGroupName)/providers/(resourceProviderNamespace)/(resourceType)/(resourceName)
rg_id, _, _ = resource.id.partition("/providers/") rg_id, _, _ = resource.id.partition("/providers/")
_, _, rg_name = rg_id.partition("/resourceGroups/") _, _, rg_name = rg_id.partition("/resourceGroups/")
rg_resources = client.resources.list_by_resource_group(rg_name)
try:
num_rg_resources = len(list(client.resources.list_by_resource_group(rg_name)))
except ResourceNotFoundError:
# Some resource names seem to be lingering in Azure limbo but do
# not map to any actual resources, so we ignore those.
print(f"{resource.name}: not found, ignored")
continue
# XXX DANGER ZONE: Delete the resource. If it's the only resource # XXX DANGER ZONE: Delete the resource. If it's the only resource
# in its resource group, the entire resource group is deleted. # in its resource group, the entire resource group is deleted.
if len(list(rg_resources)) == 1: if num_rg_resources == 1:
client.resource_groups.begin_delete(rg_name) client.resource_groups.begin_delete(rg_name)
print(f"{resource.name}: deleted resource group") print(f"{resource.name}: deleted resource group")
else: else: