1515from googleapiclient .errors import HttpError
1616
1717from fix_plugin_gcp .config import GcpConfig
18- from fix_plugin_gcp .gcp_client import GcpClient , GcpApiSpec , InternalZoneProp , RegionProp
18+ from fix_plugin_gcp .gcp_client import GcpClient , GcpApiSpec , InternalZoneProp , ZoneProp , RegionProp
1919from fix_plugin_gcp .utils import Credentials
2020from fixlib .baseresources import (
2121 BaseResource ,
@@ -187,27 +187,26 @@ def nodes(
187187 result .append (n )
188188 return result
189189
190- def add_node (self , node : GcpResourceType , source : Optional [Json ] = None ) -> Optional [ GcpResourceType ] :
190+ def add_node (self , node : GcpResourceType , source : Optional [Json ] = None ) -> GcpResourceType :
191191 log .debug (f"{ self .name } : add node { node } " )
192192 node ._cloud = self .cloud
193193 node ._account = self .project
194194
195- if self ._standard_edges (node , source ):
196- with self .graph_nodes_access :
197- self .graph .add_node (node , source = source or {})
198- return node
199- return None
195+ self .add_region_to_node (node , source )
196+ with self .graph_nodes_access :
197+ self .graph .add_node (node , source = source or {})
198+ return node
200199
201- def _standard_edges (self , node : GcpResourceType , source : Optional [Json ] = None ) -> bool :
200+ def add_region_to_node (self , node : GcpResourceType , source : Optional [Json ] = None ) -> None :
202201 if isinstance (node , GcpRegion ):
203202 self .add_edge (node , node = self .project , reverse = True )
204- return True
203+ return
205204 if node ._zone :
206205 self .add_edge (node , node = node ._zone , reverse = True )
207- return True
206+ return
208207 if node ._region :
209208 self .add_edge (node , node = node ._region , reverse = True )
210- return True
209+ return
211210
212211 parts = node .id .split ("/" , maxsplit = 4 )
213212 if len (parts ) > 3 and parts [0 ] == "projects" :
@@ -218,45 +217,61 @@ def _standard_edges(self, node: GcpResourceType, source: Optional[Json] = None)
218217 node ._zone = zone
219218 node ._region = self .region_by_zone_name .get (zone .id )
220219 self .add_edge (zone , node = node )
221- return True
220+ return
222221
223222 # Then check for region
224223 if region := self .region_by_name .get (location_name ):
225224 node ._region = region
226225 self .add_edge (region , node = node )
227- return True
226+ return
228227
229228 if source is not None :
229+ if ZoneProp in source :
230+ zone_name = source [ZoneProp ].rsplit ("/" , 1 )[- 1 ]
231+ if zone := self .zone_by_name .get (zone_name ):
232+ node ._zone = zone
233+ node ._region = self .region_by_zone_name [zone_name ]
234+ self .add_edge (node , node = zone , reverse = True )
235+ return
236+ else :
237+ log .debug (
238+ "Zone property '%s' found in the source but no corresponding zone object is available to associate with the node." ,
239+ zone_name ,
240+ )
241+
230242 if InternalZoneProp in source :
231243 if zone := self .zone_by_name .get (source [InternalZoneProp ]):
232244 node ._zone = zone
233245 node ._region = self .region_by_zone_name [source [InternalZoneProp ]]
234246 self .add_edge (node , node = zone , reverse = True )
235- return True
247+ return
236248 else :
237- log .debug (f"Zone { source [InternalZoneProp ]} not found for node: { node } . Ignore resource." )
238- return False
249+ log .debug (
250+ "Internal zone property '%s' exists in the source but no corresponding zone object is available to associate with the node." ,
251+ source [InternalZoneProp ],
252+ )
239253
240254 if RegionProp in source :
241255 region_name = source [RegionProp ].rsplit ("/" , 1 )[- 1 ]
242256 if region := self .region_by_name .get (region_name ):
243257 node ._region = region
244258 self .add_edge (node , node = region , reverse = True )
245- return True
259+ return
246260 else :
247- log .debug (f"Region { region_name } not found for node: { node } . Ignore resource." )
248- return False
261+ log .debug (
262+ "Region property '%s' found in the source but no corresponding region object is available to associate with the node." ,
263+ region_name ,
264+ )
249265
250266 # Fallback to GraphBuilder region, i.e. regional collection
251267 if self .region is not None :
252268 node ._region = self .region
253269 self .add_edge (node , node = self .region , reverse = True )
254- return True
270+ return
255271
256272 # Fallback to global region
257273 node ._region = self .fallback_global_region
258274 self .add_edge (node , node = self .fallback_global_region , reverse = True )
259- return True
260275
261276 def add_edge (
262277 self ,
0 commit comments