@@ -499,7 +499,8 @@ def _create_event_from_payload(self, target_project, res_spec, res_id,
499
499
500
500
ev .target = self ._create_target_resource (target_project , res_spec ,
501
501
res_id , res_parent_id ,
502
- subpayload )
502
+ request = request ,
503
+ payload = subpayload )
503
504
504
505
# extract custom attributes from the payload
505
506
for attr , typeURI in res_spec .custom_attributes .items ():
@@ -589,10 +590,13 @@ def _create_cadf_event(self, project, res_spec, res_id, res_parent_id,
589
590
target = None
590
591
if res_id or res_parent_id :
591
592
target = self ._create_target_resource (project , res_spec , res_id ,
592
- res_parent_id , key = key )
593
+ res_parent_id ,
594
+ request = request ,
595
+ key = key )
593
596
else :
594
597
target = self ._create_target_resource (project , res_spec ,
595
598
None , self ._service_id ,
599
+ request = request ,
596
600
key = key )
597
601
target .name = self ._service_name
598
602
@@ -654,7 +658,8 @@ def _attach_payload(event, payload, res_spec):
654
658
event .add_attachment (attach_val )
655
659
656
660
def _create_target_resource (self , target_project , res_spec , res_id ,
657
- res_parent_id = None , payload = None , key = None ):
661
+ res_parent_id = None , request = None ,
662
+ payload = None , key = None ):
658
663
"""Build the event's target element from the payload."""
659
664
self ._log .debug ("_create_target_resource: res_spec=%(res_spec)s, "
660
665
"res_id=%(res_id)s, res_parent_id=%(res_parent_id)s" ,
@@ -682,7 +687,20 @@ def _create_target_resource(self, target_project, res_spec, res_id,
682
687
payload ,
683
688
res_spec )
684
689
685
- type_uri = res_spec .el_type_uri if rid else res_spec .type_uri
690
+ type_uri = None
691
+ if rid :
692
+ # if we have a resource ID (from path or payload), use element URI
693
+ type_uri = res_spec .el_type_uri or res_spec .type_uri
694
+ elif request and request .method == 'POST' and not res_spec .singleton :
695
+ # if it's a POST to a non-singleton resource
696
+ # (even if failed, so no rid yet)
697
+ # the intent is an element, so use element URI
698
+ type_uri = res_spec .el_type_uri or res_spec .type_uri
699
+
700
+ # Fallback: If no specific logic applied, or if it's a singleton
701
+ if type_uri is None :
702
+ type_uri = res_spec .type_uri
703
+
686
704
rid = _make_uuid (rid or res_parent_id or taxonomy .UNKNOWN )
687
705
target = OpenStackResource (project_id = project_id , id = rid ,
688
706
typeURI = type_uri , name = name )
0 commit comments