ManageIQ/manageiq-providers-nuage

View on GitHub
app/models/manageiq/providers/nuage/network_manager/event_target_parser.rb

Summary

Maintainability
A
0 mins
Test Coverage
C
76%
class ManageIQ::Providers::Nuage::NetworkManager::EventTargetParser
  attr_reader :ems_event

  # @param ems_event [EmsEvent] EmsEvent object
  def initialize(ems_event)
    @ems_event = ems_event
  end

  # Parses all targets that are present in the EmsEvent given in the initializer
  #
  # @return [Array] Array of InventoryRefresh::Target objects
  def parse
    parse_ems_event_targets(ems_event)
  end

  private

  # Parses list of InventoryRefresh::Target out of the given EmsEvent
  #
  # @param event [EmsEvent] EmsEvent object
  # @return [Array] Array of InventoryRefresh::Target objects
  def parse_ems_event_targets(event)
    target_collection = InventoryRefresh::TargetCollection.new(:manager => event.ext_management_system, :event => event)

    $nuage_log.debug(
      [
        'target:', event.full_data['entityType'], '-', event.full_data['type'], '-',
        event.full_data['entities'][0]['name'], '-', event.full_data['entities'][0]['ID']
      ].join(' ')
    )

    case event.full_data["entityType"]
    when 'enterprise'
      add_targets(target_collection, :cloud_tenants, event.full_data['entities'])
    when 'subnet'
      add_targets(target_collection, :cloud_subnets, event.full_data['entities'], :options => { :kind => 'L3' })
    when 'l2domain'
      add_targets(target_collection, :cloud_subnets, event.full_data['entities'], :options => { :kind => 'L2' })
    when 'policygroup'
      add_targets(target_collection, :security_groups, event.full_data['entities'])
    when 'domain'
      add_targets(target_collection, :network_routers, event.full_data['entities'],
                  :options => { :operation => event_operation(event) })
    when 'sharednetworkresource'
      add_targets(target_collection, :cloud_networks, event.full_data['entities'])
    when 'floatingip'
      add_targets(target_collection, :floating_ips, event.full_data['entities'])
    when 'vport'
      add_targets(target_collection, :network_ports, event.full_data['entities'])
    when 'subnettemplate'
      add_targets(target_collection, :cloud_subnet_templates, event.full_data['entities'],
                  :options => { :operation => event_operation(event) })
    when 'zonetemplate'
      add_targets(target_collection, :zone_templates, event.full_data['entities'],
                  :options => { :operation => event_operation(event) })
    when 'zone'
      add_targets(target_collection, :zones, event.full_data['entities'],
                  :options => { :operation => event_operation(event) })
    end

    target_collection.targets
  end

  def add_targets(target_collection, association, entities, key: 'ID', options: {})
    return unless entities.respond_to?(:each)
    entities.each do |obj|
      next if obj[key].to_s.empty?
      target_collection.add_target(:association => association, :manager_ref => {:ems_ref => obj[key]}, :options => options)
    end
  end

  def event_operation(event)
    event.full_data['type'].to_s.upcase
  end
end