1
1
import os
2
+ from tabulate import tabulate
2
3
from datetime import datetime , date
3
4
import argparse
4
5
import asyncio
5
- from tabulate import tabulate
6
6
from dotenv import load_dotenv
7
7
from azure .identity import DefaultAzureCredential
8
8
from azure .mgmt .resource .resources .v2022_09_01 import ResourceManagementClient
@@ -17,20 +17,24 @@ async def list_resource_groups_with_temporary_tag(subscription_id: str):
17
17
# load_dotenv()
18
18
credential = DefaultAzureCredential ()
19
19
resource_management_client = ResourceManagementClient (subscription_id = subscription_id , credential = credential )
20
- tag_filter = f"tagName eq 'Temporary' and tagValue eq 'TRUE' "
20
+ tag_filter = f"tagName eq 'Temporary'"
21
21
all_rgs_filtered = resource_management_client .resource_groups .list (filter = tag_filter )
22
22
rgs_to_deleted = []
23
- for rg in all_rgs_filtered :
23
+ # Programmatically filter resource groups for tagValue in a case-insensitive manner
24
+ case_insensitive_rgs = [
25
+ rg for rg in all_rgs_filtered
26
+ if rg .tags and 'Temporary' in rg .tags and rg .tags ['Temporary' ].lower () == 'true'
27
+ ]
28
+ for rg in case_insensitive_rgs :
24
29
rg_dict = {
25
30
'name' : rg .name ,
26
31
'location' : rg .location
27
32
}
28
33
rgs_to_deleted .append (rg_dict ) # final dictionary of rgs to be deleted with Temporary tag value as TRUE
29
34
30
- # print(rgs_to_deleted)
31
- return rgs_to_deleted
32
-
35
+ print (rgs_to_deleted )
33
36
37
+ return rgs_to_deleted
34
38
async def delete_resource_groups (subscription_id : str , rgs_to_be_deleted : list [dict ]):
35
39
"""
36
40
Delete the resource groups with Temporary tag value as TRUE
@@ -41,7 +45,7 @@ async def delete_resource_groups(subscription_id: str, rgs_to_be_deleted: list[d
41
45
42
46
for rg in rgs_to_be_deleted :
43
47
try :
44
- print (f"Deleting { rg ['name' ]} from { subscription_id } subscription " )
48
+ print (f"Deleting { rg ['name' ]} from { subscription_id } " )
45
49
resource_management_client .resource_groups .begin_delete (resource_group_name = rg ['name' ]).result ()
46
50
print (f"Successfully deleted { rg ['name' ]} " )
47
51
@@ -55,7 +59,6 @@ async def delete_resource_groups(subscription_id: str, rgs_to_be_deleted: list[d
55
59
# Optional: Add a short delay between deletions to prevent overwhelming the service
56
60
await asyncio .sleep (1 )
57
61
58
-
59
62
def list_resources_in_rg (subscription_id :str , rgs_to_be_deleted : list [dict ]):
60
63
"""
61
64
get the list of resources inside an RG
@@ -84,7 +87,6 @@ def list_resources_in_rg(subscription_id:str, rgs_to_be_deleted: list[dict]):
84
87
85
88
return details_to_display
86
89
87
-
88
90
async def main ():
89
91
"""To test the code"""
90
92
start_time = datetime .utcnow () # Get start time in UTC
@@ -103,7 +105,8 @@ async def main():
103
105
print (f"The below resources are decommisioned on { date .today ()} " )
104
106
# Extracting headers and rows
105
107
headers = ["Name" , "Type" , "ID" , "Resource Group Name" ]
106
- rows = [[item ["name" ], item ["resource_type" ], item ["resource_id" ], item ["resource_group" ]] for item in details_to_dispaly ]
108
+ rows = [[item ["name" ], item ["resource_type" ], item ["resource_id" ], item ["resource_group" ]] for item in
109
+ details_to_dispaly ]
107
110
# Printing in tabular format
108
111
print (tabulate (rows , headers = headers , tablefmt = "grid" ))
109
112
end_time = datetime .utcnow () # Get end time in UTC
0 commit comments