Class: Ohai::Runner
- Inherits:
-
Object
- Object
- Ohai::Runner
- Defined in:
- lib/ohai/runner.rb
Instance Method Summary collapse
- #fetch_plugins(attributes) ⇒ Object
-
#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_v6_plugin(plugin) ⇒ Object
- #run_v7_plugin(plugin) ⇒ Object
Constructor Details
#initialize(controller, safe_run = false) ⇒ Runner
safe_run: set to true if this runner will run plugins in safe-mode. default false.
27 28 29 30 |
# File 'lib/ohai/runner.rb', line 27 def initialize(controller, safe_run = false) @provides_map = controller.provides_map @safe_run = safe_run end |
Instance Method Details
#fetch_plugins(attributes) ⇒ Object
89 90 91 |
# File 'lib/ohai/runner.rb', line 89 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
96 97 98 99 100 101 |
# File 'lib/ohai/runner.rb', line 96 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.
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/ohai/runner.rb', line 35 def run_plugin(plugin) 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 Exception,Errno::ENOENT => e Ohai::Log.debug("Plugin #{plugin.name} threw exception #{e.inspect} #{e.backtrace.join("\n")}") end end |
#run_v6_plugin(plugin) ⇒ Object
56 57 58 59 60 |
# File 'lib/ohai/runner.rb', line 56 def run_v6_plugin(plugin) return true if plugin.has_run? @safe_run ? plugin.safe_run : plugin.run end |
#run_v7_plugin(plugin) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/ohai/runner.rb', line 62 def run_v7_plugin(plugin) visited = [ plugin ] while !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 { |dep_plugin| dep_plugin.has_run? || dep_plugin.eql?(next_plugin) } if dependency_providers.empty? @safe_run ? next_plugin.safe_run : next_plugin.run else visited << next_plugin << dependency_providers.first end end end |