@@ -133,7 +133,164 @@ def _discover_resource_group_resources(self, resource_group) -> List[Dict]:
133133
134134 resources = []
135135
136- # VMs
136+ # Discover resources by type
137+ resources .extend (self ._discover_vms (rg_name ))
138+ resources .extend (self ._discover_vnets (rg_name ))
139+ resources .extend (self ._discover_load_balancers (rg_name ))
140+ resources .extend (self ._discover_vpn_gateways (rg_name ))
141+ resources .extend (self ._discover_application_gateways (rg_name ))
142+ resources .extend (self ._discover_azure_firewalls (rg_name ))
143+ resources .extend (self ._discover_private_endpoints (rg_name ))
144+ resources .extend (self ._discover_nat_gateways (rg_name ))
145+ resources .extend (self ._discover_route_tables (rg_name ))
146+ resources .extend (self ._discover_public_ip_addresses (rg_name ))
147+ resources .extend (self ._discover_network_security_groups (rg_name ))
148+ resources .extend (self ._discover_express_route_circuits (rg_name ))
149+ resources .extend (self ._discover_dedicated_hosts (rg_name ))
150+
151+ # VNets
152+ try :
153+ for vnet in self .network_client .virtual_networks .list (rg_name ):
154+ region = getattr (vnet , "location" , "unknown" )
155+ vnet_name = getattr (vnet , "name" , None )
156+ if not vnet_name :
157+ self .logger .warning (f"VNet with no name in { rg_name } , skipping subnets." )
158+ continue
159+
160+ vnet_dict = vars (vnet )
161+ formatted_vnet = format_azure_resource (vnet_dict , "vnet" , region )
162+ resources .append (formatted_vnet )
163+
164+ # Subnets for this VNet
165+ try :
166+ for subnet in self .network_client .subnets .list (rg_name , vnet_name ):
167+ subnet_dict = vars (subnet )
168+ formatted_subnet = format_azure_resource (subnet_dict , "subnet" , region )
169+ resources .append (formatted_subnet )
170+ except Exception as e :
171+ self .logger .warning (f"Error discovering subnets in VNet { vnet_name } in { rg_name } : { e } " )
172+ except Exception as e :
173+ self .logger .warning (f"Error discovering VNets in { rg_name } : { e } " )
174+
175+ # Load Balancers
176+ try :
177+ for lb in self .network_client .load_balancers .list (rg_name ):
178+ region = getattr (lb , "location" , "unknown" )
179+ lb_dict = vars (lb )
180+ formatted_lb = format_azure_resource (lb_dict , "load_balancer" , region )
181+ resources .append (formatted_lb )
182+ except Exception as e :
183+ self .logger .warning (f"Error discovering Load Balancers in { rg_name } : { e } " )
184+
185+ # VPN Gateways
186+ try :
187+ for vpngw in self .network_client .virtual_network_gateways .list (rg_name ):
188+ region = getattr (vpngw , "location" , "unknown" )
189+ vpngw_dict = vars (vpngw )
190+ formatted_vpngw = format_azure_resource (vpngw_dict , "gateway" , region )
191+ resources .append (formatted_vpngw )
192+ except Exception as e :
193+ self .logger .warning (f"Error discovering VPN Gateways in { rg_name } : { e } " )
194+
195+ # Application Gateways
196+ try :
197+ for appgw in self .network_client .application_gateways .list (rg_name ):
198+ region = getattr (appgw , "location" , "unknown" )
199+ appgw_dict = vars (appgw )
200+ formatted_appgw = format_azure_resource (appgw_dict , "gateway" , region )
201+ resources .append (formatted_appgw )
202+ except Exception as e :
203+ self .logger .warning (f"Error discovering Application Gateways in { rg_name } : { e } " )
204+
205+ # Azure Firewalls
206+ try :
207+ for fw in self .network_client .azure_firewalls .list (rg_name ):
208+ region = getattr (fw , "location" , "unknown" )
209+ fw_dict = vars (fw )
210+ formatted_fw = format_azure_resource (fw_dict , "firewall" , region )
211+ resources .append (formatted_fw )
212+ except Exception as e :
213+ self .logger .warning (f"Error discovering Azure Firewalls in { rg_name } : { e } " )
214+
215+ # Private Endpoints
216+ try :
217+ for pe in self .network_client .private_endpoints .list (rg_name ):
218+ region = getattr (pe , "location" , "unknown" )
219+ pe_dict = vars (pe )
220+ formatted_pe = format_azure_resource (pe_dict , "endpoint" , region )
221+ resources .append (formatted_pe )
222+ except Exception as e :
223+ self .logger .warning (f"Error discovering Private Endpoints in { rg_name } : { e } " )
224+
225+ # NAT Gateways
226+ try :
227+ for natgw in self .network_client .nat_gateways .list (rg_name ):
228+ region = getattr (natgw , "location" , "unknown" )
229+ natgw_dict = vars (natgw )
230+ formatted_natgw = format_azure_resource (natgw_dict , "gateway" , region )
231+ resources .append (formatted_natgw )
232+ except Exception as e :
233+ self .logger .warning (f"Error discovering NAT Gateways in { rg_name } : { e } " )
234+
235+ # Route Tables
236+ try :
237+ for rt in self .network_client .route_tables .list (rg_name ):
238+ region = getattr (rt , "location" , "unknown" )
239+ rt_dict = vars (rt )
240+ formatted_rt = format_azure_resource (rt_dict , "router" , region )
241+ resources .append (formatted_rt )
242+ except Exception as e :
243+ self .logger .warning (f"Error discovering Route Tables in { rg_name } : { e } " )
244+
245+ # Public IP Addresses
246+ try :
247+ for pip in self .network_client .public_ip_addresses .list (rg_name ):
248+ region = getattr (pip , "location" , "unknown" )
249+ pip_dict = vars (pip )
250+ formatted_pip = format_azure_resource (pip_dict , "endpoint" , region )
251+ resources .append (formatted_pip )
252+ except Exception as e :
253+ self .logger .warning (f"Error discovering Public IP Addresses in { rg_name } : { e } " )
254+
255+ # Network Security Groups
256+ try :
257+ for nsg in self .network_client .network_security_groups .list (rg_name ):
258+ region = getattr (nsg , "location" , "unknown" )
259+ nsg_dict = vars (nsg )
260+ formatted_nsg = format_azure_resource (nsg_dict , "switch" , region )
261+ resources .append (formatted_nsg )
262+ except Exception as e :
263+ self .logger .warning (f"Error discovering Network Security Groups in { rg_name } : { e } " )
264+
265+ # ExpressRoute Circuits
266+ try :
267+ for erc in self .network_client .express_route_circuits .list (rg_name ):
268+ region = getattr (erc , "location" , "unknown" )
269+ erc_dict = vars (erc )
270+ formatted_erc = format_azure_resource (erc_dict , "switch" , region )
271+ resources .append (formatted_erc )
272+ except Exception as e :
273+ self .logger .warning (f"Error discovering ExpressRoute Circuits in { rg_name } : { e } " )
274+
275+ # Dedicated Hosts
276+ try :
277+ for host_group in self .compute_client .dedicated_host_groups .list_by_resource_group (rg_name ):
278+ region = getattr (host_group , "location" , "unknown" )
279+ host_group_name = getattr (host_group , "name" , None )
280+ if not host_group_name :
281+ continue
282+ for host in self .compute_client .dedicated_hosts .list_by_host_group (rg_name , host_group_name ):
283+ host_dict = vars (host )
284+ formatted_host = format_azure_resource (host_dict , "server" , region )
285+ resources .append (formatted_host )
286+ except Exception as e :
287+ self .logger .warning (f"Error discovering Dedicated Hosts in { rg_name } : { e } " )
288+
289+ return resources
290+
291+ def _discover_vms (self , rg_name : str ) -> List [Dict ]:
292+ """Discover Virtual Machines in a resource group."""
293+ resources = []
137294 try :
138295 for vm in self .compute_client .virtual_machines .list (rg_name ):
139296 vm_name = getattr (vm , "name" , None )
@@ -231,8 +388,11 @@ def _discover_resource_group_resources(self, resource_group) -> List[Dict]:
231388
232389 except Exception as e :
233390 self .logger .warning (f"Error discovering VMs in { rg_name } : { e } " )
391+ return resources
234392
235- # VNets
393+ def _discover_vnets (self , rg_name : str ) -> List [Dict ]:
394+ """Discover Virtual Networks in a resource group."""
395+ resources = []
236396 try :
237397 for vnet in self .network_client .virtual_networks .list (rg_name ):
238398 region = getattr (vnet , "location" , "unknown" )
@@ -255,8 +415,11 @@ def _discover_resource_group_resources(self, resource_group) -> List[Dict]:
255415 self .logger .warning (f"Error discovering subnets in VNet { vnet_name } in { rg_name } : { e } " )
256416 except Exception as e :
257417 self .logger .warning (f"Error discovering VNets in { rg_name } : { e } " )
418+ return resources
258419
259- # Load Balancers
420+ def _discover_load_balancers (self , rg_name : str ) -> List [Dict ]:
421+ """Discover Load Balancers in a resource group."""
422+ resources = []
260423 try :
261424 for lb in self .network_client .load_balancers .list (rg_name ):
262425 region = getattr (lb , "location" , "unknown" )
@@ -265,8 +428,11 @@ def _discover_resource_group_resources(self, resource_group) -> List[Dict]:
265428 resources .append (formatted_lb )
266429 except Exception as e :
267430 self .logger .warning (f"Error discovering Load Balancers in { rg_name } : { e } " )
431+ return resources
268432
269- # VPN Gateways
433+ def _discover_vpn_gateways (self , rg_name : str ) -> List [Dict ]:
434+ """Discover VPN Gateways in a resource group."""
435+ resources = []
270436 try :
271437 for vpngw in self .network_client .virtual_network_gateways .list (rg_name ):
272438 region = getattr (vpngw , "location" , "unknown" )
@@ -275,8 +441,11 @@ def _discover_resource_group_resources(self, resource_group) -> List[Dict]:
275441 resources .append (formatted_vpngw )
276442 except Exception as e :
277443 self .logger .warning (f"Error discovering VPN Gateways in { rg_name } : { e } " )
444+ return resources
278445
279- # Application Gateways
446+ def _discover_application_gateways (self , rg_name : str ) -> List [Dict ]:
447+ """Discover Application Gateways in a resource group."""
448+ resources = []
280449 try :
281450 for appgw in self .network_client .application_gateways .list (rg_name ):
282451 region = getattr (appgw , "location" , "unknown" )
@@ -285,8 +454,11 @@ def _discover_resource_group_resources(self, resource_group) -> List[Dict]:
285454 resources .append (formatted_appgw )
286455 except Exception as e :
287456 self .logger .warning (f"Error discovering Application Gateways in { rg_name } : { e } " )
457+ return resources
288458
289- # Azure Firewalls
459+ def _discover_azure_firewalls (self , rg_name : str ) -> List [Dict ]:
460+ """Discover Azure Firewalls in a resource group."""
461+ resources = []
290462 try :
291463 for fw in self .network_client .azure_firewalls .list (rg_name ):
292464 region = getattr (fw , "location" , "unknown" )
@@ -295,8 +467,11 @@ def _discover_resource_group_resources(self, resource_group) -> List[Dict]:
295467 resources .append (formatted_fw )
296468 except Exception as e :
297469 self .logger .warning (f"Error discovering Azure Firewalls in { rg_name } : { e } " )
470+ return resources
298471
299- # Private Endpoints
472+ def _discover_private_endpoints (self , rg_name : str ) -> List [Dict ]:
473+ """Discover Private Endpoints in a resource group."""
474+ resources = []
300475 try :
301476 for pe in self .network_client .private_endpoints .list (rg_name ):
302477 region = getattr (pe , "location" , "unknown" )
@@ -305,8 +480,11 @@ def _discover_resource_group_resources(self, resource_group) -> List[Dict]:
305480 resources .append (formatted_pe )
306481 except Exception as e :
307482 self .logger .warning (f"Error discovering Private Endpoints in { rg_name } : { e } " )
483+ return resources
308484
309- # NAT Gateways
485+ def _discover_nat_gateways (self , rg_name : str ) -> List [Dict ]:
486+ """Discover NAT Gateways in a resource group."""
487+ resources = []
310488 try :
311489 for natgw in self .network_client .nat_gateways .list (rg_name ):
312490 region = getattr (natgw , "location" , "unknown" )
@@ -315,8 +493,11 @@ def _discover_resource_group_resources(self, resource_group) -> List[Dict]:
315493 resources .append (formatted_natgw )
316494 except Exception as e :
317495 self .logger .warning (f"Error discovering NAT Gateways in { rg_name } : { e } " )
496+ return resources
318497
319- # Route Tables
498+ def _discover_route_tables (self , rg_name : str ) -> List [Dict ]:
499+ """Discover Route Tables in a resource group."""
500+ resources = []
320501 try :
321502 for rt in self .network_client .route_tables .list (rg_name ):
322503 region = getattr (rt , "location" , "unknown" )
@@ -325,8 +506,11 @@ def _discover_resource_group_resources(self, resource_group) -> List[Dict]:
325506 resources .append (formatted_rt )
326507 except Exception as e :
327508 self .logger .warning (f"Error discovering Route Tables in { rg_name } : { e } " )
509+ return resources
328510
329- # Public IP Addresses
511+ def _discover_public_ip_addresses (self , rg_name : str ) -> List [Dict ]:
512+ """Discover Public IP Addresses in a resource group."""
513+ resources = []
330514 try :
331515 for pip in self .network_client .public_ip_addresses .list (rg_name ):
332516 region = getattr (pip , "location" , "unknown" )
@@ -335,8 +519,11 @@ def _discover_resource_group_resources(self, resource_group) -> List[Dict]:
335519 resources .append (formatted_pip )
336520 except Exception as e :
337521 self .logger .warning (f"Error discovering Public IP Addresses in { rg_name } : { e } " )
522+ return resources
338523
339- # Network Security Groups
524+ def _discover_network_security_groups (self , rg_name : str ) -> List [Dict ]:
525+ """Discover Network Security Groups in a resource group."""
526+ resources = []
340527 try :
341528 for nsg in self .network_client .network_security_groups .list (rg_name ):
342529 region = getattr (nsg , "location" , "unknown" )
@@ -345,8 +532,11 @@ def _discover_resource_group_resources(self, resource_group) -> List[Dict]:
345532 resources .append (formatted_nsg )
346533 except Exception as e :
347534 self .logger .warning (f"Error discovering Network Security Groups in { rg_name } : { e } " )
535+ return resources
348536
349- # ExpressRoute Circuits
537+ def _discover_express_route_circuits (self , rg_name : str ) -> List [Dict ]:
538+ """Discover ExpressRoute Circuits in a resource group."""
539+ resources = []
350540 try :
351541 for erc in self .network_client .express_route_circuits .list (rg_name ):
352542 region = getattr (erc , "location" , "unknown" )
@@ -355,8 +545,11 @@ def _discover_resource_group_resources(self, resource_group) -> List[Dict]:
355545 resources .append (formatted_erc )
356546 except Exception as e :
357547 self .logger .warning (f"Error discovering ExpressRoute Circuits in { rg_name } : { e } " )
548+ return resources
358549
359- # Dedicated Hosts
550+ def _discover_dedicated_hosts (self , rg_name : str ) -> List [Dict ]:
551+ """Discover Dedicated Hosts in a resource group."""
552+ resources = []
360553 try :
361554 for host_group in self .compute_client .dedicated_host_groups .list_by_resource_group (rg_name ):
362555 region = getattr (host_group , "location" , "unknown" )
@@ -369,7 +562,6 @@ def _discover_resource_group_resources(self, resource_group) -> List[Dict]:
369562 resources .append (formatted_host )
370563 except Exception as e :
371564 self .logger .warning (f"Error discovering Dedicated Hosts in { rg_name } : { e } " )
372-
373565 return resources
374566
375567 def _discover_azure_dns_zones_and_records (self ) -> List [Dict ]:
0 commit comments