Class: Ohai::Runner
- Inherits:
-
Object
- Object
- Ohai::Runner
- Defined in:
- lib/ohai/runner.rb
Instance Attribute Summary collapse
-
#failed_plugins ⇒ Object
readonly
Returns the value of attribute failed_plugins.
-
#logger ⇒ Object
readonly
Returns the value of attribute logger.
Instance Method Summary collapse
- #fetch_plugins(attributes) ⇒ Array
-
#get_cycle(plugins, cycle_start) ⇒ Object
Given a list of plugins and the first plugin in the cycle, returns the list of plugin source files responsible for the cycle.
-
#initialize(controller, safe_run = false) ⇒ Runner
constructor
safe_run: set to true if this runner will run plugins in safe-mode.
-
#run_plugin(plugin) ⇒ Object
Runs plugins and any un-run dependencies.
-
#run_v7_plugin(plugin) ⇒ Object
Void.
Constructor Details
#initialize(controller, safe_run = false) ⇒ Runner
safe_run: set to true if this runner will run plugins in safe-mode. default false.
29 30 31 32 33 34 35 |
# File 'lib/ohai/runner.rb', line 29 def initialize(controller, safe_run = false) @provides_map = controller.provides_map @safe_run = safe_run @failed_plugins = [] @logger = controller.logger.with_child @logger. = { subsystem: "runner" } end |
Instance Attribute Details
#failed_plugins ⇒ Object (readonly)
Returns the value of attribute failed_plugins.
26 27 28 |
# File 'lib/ohai/runner.rb', line 26 def failed_plugins @failed_plugins end |
#logger ⇒ Object (readonly)
Returns the value of attribute logger.
26 27 28 |
# File 'lib/ohai/runner.rb', line 26 def logger @logger end |
Instance Method Details
#fetch_plugins(attributes) ⇒ Array
110 111 112 |
# File 'lib/ohai/runner.rb', line 110 def fetch_plugins(attributes) @provides_map.find_closest_providers_for(attributes) end |
#get_cycle(plugins, cycle_start) ⇒ Object
Given a list of plugins and the first plugin in the cycle, returns the list of plugin source files responsible for the cycle. Does not include plugins that aren’t a part of the cycle
117 118 119 120 121 122 |
# File 'lib/ohai/runner.rb', line 117 def get_cycle(plugins, cycle_start) cycle = plugins.drop_while { |plugin| !plugin.eql?(cycle_start) } names = [] cycle.each { |plugin| names << plugin.name } names end |
#run_plugin(plugin) ⇒ Object
Runs plugins and any un-run dependencies. If force is set to true, then this plugin and its dependencies will be run even if they have been run before.
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/ohai/runner.rb', line 45 def run_plugin(plugin) elapsed = Benchmark.realtime do unless plugin.is_a?(Ohai::DSL::Plugin) raise Ohai::Exceptions::InvalidPlugin, "Invalid plugin #{plugin} (must be an Ohai::DSL::Plugin or subclass)" end begin if plugin.version == :version7 run_v7_plugin(plugin) else raise Ohai::Exceptions::InvalidPlugin, "Invalid plugin version #{plugin.version} for plugin #{plugin}" end rescue Ohai::Exceptions::Error # rubocop: disable Lint/ShadowedException raise rescue SystemExit # abort or exit from plug-in should exit Ohai with failure code raise rescue Exception => e logger.trace("Plugin #{plugin.name} threw exception #{e.inspect} #{e.backtrace.join("\n")}") end end logger.trace("Plugin #{plugin.name} took #{elapsed} seconds to run.") end |
#run_v7_plugin(plugin) ⇒ Object
Returns void.
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/ohai/runner.rb', line 72 def run_v7_plugin(plugin) return true if plugin.optional? && !Ohai.config[:run_all_plugins] && !Ohai.config[:optional_plugins].include?(plugin.name) visited = [ plugin ] until visited.empty? next_plugin = visited.pop next if next_plugin.has_run? if visited.include?(next_plugin) raise Ohai::Exceptions::DependencyCycle, "Dependency cycle detected. Please refer to the following plugins: #{get_cycle(visited, plugin).join(", ")}" end dependency_providers = fetch_plugins(next_plugin.dependencies) # Remove the already ran plugins from dependencies if force is not set # Also remove the plugin that we are about to run from dependencies as well. dependency_providers.delete_if do |dep_plugin| dep_plugin.has_run? || dep_plugin.eql?(next_plugin) end if dependency_providers.empty? @safe_run ? next_plugin.safe_run : next_plugin.run if next_plugin.failed @failed_plugins << next_plugin.name end else visited << next_plugin << dependency_providers.first end end end |