@@ -241,10 +241,10 @@ def typename(self) -> Optional[str]:
241241 return self ._peer .typename
242242 return self ._typename
243243
244- def _generate_input_data (self ) -> dict [str , Any ]:
244+ def _generate_input_data (self , allocate_from_pool : bool = False ) -> dict [str , Any ]:
245245 data : dict [str , Any ] = {}
246246
247- if self .is_resource_pool :
247+ if self .is_resource_pool and allocate_from_pool :
248248 return {"from_pool" : {"id" : self .id }}
249249
250250 if self .id is not None :
@@ -424,8 +424,8 @@ def peer_hfids_str(self) -> list[str]:
424424 def has_update (self ) -> bool :
425425 return self ._has_update
426426
427- def _generate_input_data (self ) -> list [dict ]:
428- return [peer ._generate_input_data () for peer in self .peers ]
427+ def _generate_input_data (self , allocate_from_pool : bool = False ) -> list [dict ]:
428+ return [peer ._generate_input_data (allocate_from_pool = allocate_from_pool ) for peer in self .peers ]
429429
430430 def _generate_mutation_query (self ) -> dict [str , Any ]:
431431 # Does nothing for now
@@ -818,6 +818,7 @@ def _generate_input_data(self, exclude_unmodified: bool = False, exclude_hfid: b
818818 data [item_name ] = attr_data
819819
820820 for item_name in self ._relationships :
821+ allocate_from_pool = False
821822 rel_schema = self ._schema .get_relationship (name = item_name )
822823 if not rel_schema or rel_schema .read_only :
823824 continue
@@ -836,7 +837,12 @@ def _generate_input_data(self, exclude_unmodified: bool = False, exclude_hfid: b
836837 if rel is None or not rel .initialized :
837838 continue
838839
839- rel_data = rel ._generate_input_data ()
840+ if isinstance (rel , RelatedNode | RelatedNodeSync ) and rel .is_resource_pool :
841+ # If the relatiionship is a resource pool and the expected schema is different from the one of the pool, this means we expect to get
842+ # a resource from the pool itself
843+ allocate_from_pool = rel_schema .peer != rel .peer ._schema .kind
844+
845+ rel_data = rel ._generate_input_data (allocate_from_pool = allocate_from_pool )
840846
841847 if rel_data and isinstance (rel_data , dict ):
842848 if variable_values := rel_data .get ("data" ):
@@ -1426,7 +1432,7 @@ async def get_pool_allocated_resources(self, resource: InfrahubNode) -> list[Inf
14261432 list[InfrahubNode]: The allocated nodes.
14271433 """
14281434 if not self .is_resource_pool ():
1429- raise ValueError ("Allocate resources can only be fetched from resource pool nodes." )
1435+ raise ValueError ("Allocated resources can only be fetched from resource pool nodes." )
14301436
14311437 graphql_query_name = "InfrahubResourcePoolAllocated"
14321438 node_ids_per_kind : dict [str , list [str ]] = {}
0 commit comments