class Ohai::Runner
Attributes
failed_plugins[R]
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 29 def initialize(controller, safe_run = false) @provides_map = controller.provides_map @safe_run = safe_run @failed_plugins = [] end
Public Instance Methods
fetch_plugins(attributes)
click to toggle source
# File lib/ohai/runner.rb, line 100 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 107 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.
# File lib/ohai/runner.rb, line 38 def run_plugin(plugin) elapsed = Benchmark.measure do unless plugin.kind_of?(Ohai::DSL::Plugin) raise Ohai::Exceptions::InvalidPlugin, "Invalid plugin #{plugin} (must be an Ohai::DSL::Plugin or subclass)" end begin case plugin.version when :version7 run_v7_plugin(plugin) when :version6 run_v6_plugin(plugin) else raise Ohai::Exceptions::InvalidPlugin, "Invalid plugin version #{plugin.version} for plugin #{plugin}" end rescue Ohai::Exceptions::Error raise rescue SystemExit # abort or exit from plug-in should exit Ohai with failure code raise rescue Exception, Errno::ENOENT => e Ohai::Log.debug("Plugin #{plugin.name} threw exception #{e.inspect} #{e.backtrace.join("\n")}") end end Ohai::Log.debug("Plugin #{plugin.name} took #{elapsed.total} seconds to run.") end
run_v6_plugin(plugin)
click to toggle source
# File lib/ohai/runner.rb, line 64 def run_v6_plugin(plugin) return true if plugin.has_run? @safe_run ? plugin.safe_run : plugin.run end
run_v7_plugin(plugin)
click to toggle source
# File lib/ohai/runner.rb, line 70 def run_v7_plugin(plugin) 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