class Ohai::Runner
Attributes
failed_plugins[R]
logger[R]
transport_connection[RW]
Public Class Methods
new(controller, safe_run = false)
click to toggle source
safe_run: set to true if this runner will run plugins in safe-mode. default false.
# File lib/ohai/runner.rb, line 33 def initialize(controller, safe_run = false) @provides_map = controller.provides_map @safe_run = safe_run @failed_plugins = [] @logger = controller.logger.with_child @logger.metadata = { subsystem: "runner" } end
Public Instance Methods
fetch_plugins(attributes)
click to toggle source
@param [Array] attributes
@return [Array]
# File lib/ohai/runner.rb, line 113 def fetch_plugins(attributes) @provides_map.find_closest_providers_for(attributes) end
get_cycle(plugins, cycle_start)
click to toggle source
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
# File lib/ohai/runner.rb, line 120 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)
click to toggle source
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.
@param [Ohai::DSL::Plugin] plugin
@return void
# File lib/ohai/runner.rb, line 49 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, SystemExit # 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 #{"%f" % elapsed.truncate(6)} seconds to run.") end
run_v7_plugin(plugin)
click to toggle source
@param [Ohai::DSL::Plugin] plugin
@return void
# File lib/ohai/runner.rb, line 74 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? next_plugin.transport_connection = transport_connection @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