diff --git a/app/models/manageiq/providers/openstack/network_manager/event_target_parser.rb b/app/models/manageiq/providers/openstack/network_manager/event_target_parser.rb index 7a3836e64b..046d09a13e 100644 --- a/app/models/manageiq/providers/openstack/network_manager/event_target_parser.rb +++ b/app/models/manageiq/providers/openstack/network_manager/event_target_parser.rb @@ -24,23 +24,23 @@ def parse_ems_event_targets(ems_event) # there's almost always a tenant id regardless of event type collect_identity_tenant_references!(target_collection) - target_type = if ems_event.event_type.start_with?("floatingip.") + target_type = case resource_type + when "floatingip" :floating_ips - elsif ems_event.event_type.start_with?("router.") + when "router" :network_routers - elsif ems_event.event_type.start_with?("port.") + when "port" :network_ports - elsif ems_event.event_type.start_with?("network.") + when "network" :cloud_networks - elsif ems_event.event_type.start_with?("subnet.") + when "subnet" :cloud_subnets - elsif ems_event.event_type.start_with?("security_group.") + when "security_group" :security_groups - elsif ems_event.event_type.start_with?("security_group_rule.") + when "security_group_rule" :firewall_rules end - resource_id = event_payload['resource_id'] if resource_id add_target(target_collection, target_type, resource_id) elsif target_type == :security_groups @@ -73,4 +73,12 @@ def add_target(target_collection, association, ref) def event_payload @event_payload ||= ManageIQ::Providers::Openstack::EventParserCommon.message_content(ems_event).fetch('payload', {}) end + + def resource_type + @resource_type ||= ems_event.event_type.split(".").first + end + + def resource_id + @resource_id ||= event_payload.dig(resource_type, "id") || event_payload["resource_id"] + end end diff --git a/spec/models/manageiq/providers/openstack/network_manager/event_target_parser_spec.rb b/spec/models/manageiq/providers/openstack/network_manager/event_target_parser_spec.rb index 5ba3652f38..199515e966 100644 --- a/spec/models/manageiq/providers/openstack/network_manager/event_target_parser_spec.rb +++ b/spec/models/manageiq/providers/openstack/network_manager/event_target_parser_spec.rb @@ -13,7 +13,33 @@ oslo_message_text = "with#{"out" unless oslo_message} oslo_message" it "parses network events #{oslo_message_text}" do - payload = {"resource_id" => "network_id_test"} + payload = { + "network" => { + "id" => "network_id_test", + "name" => "network", + "tenant_id" => "tenant_id_test", + "admin_state_up" => true, + "mtu" => 1442, + "status" => "ACTIVE", + "subnets" => [], + "shared" => false, + "project_id" => "project_id_test", + "port_security_enabled" => true, + "router:external" => false, + "provider:network_type" => "geneve", + "provider:physical_network" => nil, + "provider:segmentation_id" => 1160, + "is_default" => false, + "availability_zone_hints" => [], + "availability_zones" => [], + "ipv4_address_scope" => nil, + "ipv6_address_scope" => nil, + "description" => "", + "tags" => [], + "revision_number" => 1 + } + } + ems_event = create_ems_event(@manager, "network.create.end", oslo_message, payload) parsed_targets = described_class.new(ems_event).parse