From 0aca388e984944d1a367942766a0829310fd4f20 Mon Sep 17 00:00:00 2001 From: Adam Grare Date: Thu, 30 Aug 2018 15:32:03 -0400 Subject: [PATCH] Move Graph Refresh Settings to EMS Move inventory_object_refresh? and allow_targeted_refresh? to ext_management_system so that code outside the Refresher can get away from checking settings directly. --- app/models/ext_management_system.rb | 8 ++++++++ .../providers/base_manager/manager_refresher.rb | 9 +++++---- .../manageiq/providers/base_manager/refresher.rb | 10 +--------- .../providers/cloud_manager/provision/state_machine.rb | 8 ++++---- app/models/orchestration_stack.rb | 3 +-- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/app/models/ext_management_system.rb b/app/models/ext_management_system.rb index e60c9c3f320..a2e03a3d0dd 100644 --- a/app/models/ext_management_system.rb +++ b/app/models/ext_management_system.rb @@ -718,6 +718,14 @@ def self.display_name(number = 1) n_('Manager', 'Managers', number) end + def inventory_object_refresh? + Settings.ems_refresh.fetch_path(emstype, :inventory_object_refresh) + end + + def allow_targeted_refresh? + Settings.ems_refresh.fetch_path(emstype, :allow_targeted_refresh) + end + private def build_connection(options = {}) diff --git a/app/models/manageiq/providers/base_manager/manager_refresher.rb b/app/models/manageiq/providers/base_manager/manager_refresher.rb index b1a2aac0a37..3252fec9d29 100644 --- a/app/models/manageiq/providers/base_manager/manager_refresher.rb +++ b/app/models/manageiq/providers/base_manager/manager_refresher.rb @@ -39,7 +39,7 @@ def collect_inventory_for_targets(ems, targets) _log.info("Filtering inventory for #{target.class} [#{target_name}] id: [#{target.id}]...") - if inventory_object_refresh? + if ems.inventory_object_refresh? inventory = builder_class_for(ems.class).build_inventory(ems, target) end @@ -62,7 +62,7 @@ def parse_targeted_inventory(ems, _target, inventory) log_header = format_ems_for_logging(ems) _log.debug("#{log_header} Parsing inventory...") hashes_or_persister, = Benchmark.realtime_block(:parse_inventory) do - if inventory_object_refresh? + if ems.inventory_object_refresh? inventory.parse else parsed, _ = Benchmark.realtime_block(:parse_legacy_inventory) { parse_legacy(ems) } @@ -78,8 +78,9 @@ def parse_targeted_inventory(ems, _target, inventory) # ManagerRefresh::TargetCollection. This way we can do targeted refresh of all queued targets in 1 refresh def preprocess_targets @targets_by_ems_id.each do |ems_id, targets| + ems = @ems_by_ems_id[ems_id] + if targets.any? { |t| t.kind_of?(ExtManagementSystem) } - ems = @ems_by_ems_id[ems_id] targets_for_log = targets.map { |t| "#{t.class} [#{t.name}] id [#{t.id}] " } _log.info("Defaulting to full refresh for EMS: [#{ems.name}], id: [#{ems.id}], from targets: #{targets_for_log}") if targets.length > 1 end @@ -89,7 +90,7 @@ def preprocess_targets all_targets, sub_ems_targets = targets.partition { |x| x.kind_of?(ExtManagementSystem) } unless sub_ems_targets.blank? - if allow_targeted_refresh? + if ems.allow_targeted_refresh? # We can disable targeted refresh with a setting, then we will just do full ems refresh on any event ems_event_collection = ManagerRefresh::TargetCollection.new(:targets => sub_ems_targets, :manager_id => ems_id) diff --git a/app/models/manageiq/providers/base_manager/refresher.rb b/app/models/manageiq/providers/base_manager/refresher.rb index 51c547ce380..4891cdfe20a 100644 --- a/app/models/manageiq/providers/base_manager/refresher.rb +++ b/app/models/manageiq/providers/base_manager/refresher.rb @@ -132,7 +132,7 @@ def collect_inventory_for_targets(ems, targets) # override this method and return an array of: # [[target1, inventory_for_target1], [target2, inventory_for_target2]] - return [[ems, nil]] unless inventory_object_refresh? + return [[ems, nil]] unless ems.inventory_object_refresh? provider_module = ManageIQ::Providers::Inflector.provider_module(ems.class).name @@ -252,14 +252,6 @@ def refresher_type def format_ems_for_logging(ems) "EMS: [#{ems.name}], id: [#{ems.id}]" end - - def inventory_object_refresh? - refresher_options.try(:[], :inventory_object_refresh) - end - - def allow_targeted_refresh? - refresher_options.try(:[], :allow_targeted_refresh) - end end end end diff --git a/app/models/manageiq/providers/cloud_manager/provision/state_machine.rb b/app/models/manageiq/providers/cloud_manager/provision/state_machine.rb index 6f215512e15..79198057fda 100644 --- a/app/models/manageiq/providers/cloud_manager/provision/state_machine.rb +++ b/app/models/manageiq/providers/cloud_manager/provision/state_machine.rb @@ -51,16 +51,16 @@ def poll_clone_complete clone_task_ref = phase_context.delete(:clone_task_ref) phase_context[:new_vm_ems_ref] = clone_task_ref - manager_settings = Settings.ems_refresh[source.ext_management_system.class.ems_type] - if manager_settings && manager_settings[:inventory_object_refresh] && manager_settings[:allow_targeted_refresh] + manager = source.ext_management_system + if manager.inventory_object_refresh? && manager.allow_targeted_refresh? # Queue new targeted refresh if allowed - vm_target = ManagerRefresh::Target.new(:manager => source.ext_management_system, + vm_target = ManagerRefresh::Target.new(:manager => manager, :association => :vms, :manager_ref => {:ems_ref => clone_task_ref}) EmsRefresh.queue_refresh(vm_target) else # Otherwise queue a full refresh - EmsRefresh.queue_refresh(source.ext_management_system) + EmsRefresh.queue_refresh(manager) end signal :poll_destination_in_vmdb else diff --git a/app/models/orchestration_stack.rb b/app/models/orchestration_stack.rb index 42dca64a541..3977480958b 100644 --- a/app/models/orchestration_stack.rb +++ b/app/models/orchestration_stack.rb @@ -166,8 +166,7 @@ def self.refresh_ems(manager_id, manager_ref) raise _("Provider failed last authentication check") end - manager_settings = Settings.ems_refresh[manager.class.ems_type] - if manager_settings && manager_settings[:inventory_object_refresh] && manager_settings[:allow_targeted_refresh] + if manager.inventory_object_refresh? && manager.allow_targeted_refresh? # Queue new targeted refresh if allowed orchestration_stack_target = ManagerRefresh::Target.new(:manager => manager, :association => :orchestration_stacks,