Parent

Included Modules

Ohai::System

Attributes

data[RW]
provides_map[R]
v6_dependency_solver[R]

Public Class Methods

new() click to toggle source
# File lib/ohai/system.rb, line 42
def initialize
  @plugin_path = ""
  reset_system
end

Public Instance Methods

[](key) click to toggle source
# File lib/ohai/system.rb, line 62
def [](key)
  @data[key]
end
all_plugins(attribute_filter=nil) click to toggle source
# File lib/ohai/system.rb, line 66
def all_plugins(attribute_filter=nil)
  # Reset the system when all_plugins is called since this function
  # can be run multiple times in order to pick up any changes in the
  # config or plugins with Chef.
  reset_system

  load_plugins
  run_plugins(true, attribute_filter)
end
attributes_print(a) click to toggle source
# File lib/ohai/system.rb, line 186
def attributes_print(a)
  data = @data
  a.split("/").each do |part|
    data = data[part]
  end
  raise ArgumentError, "I cannot find an attribute named #{a}!" if data.nil?
  case data
  when Hash,Mash,Array,Fixnum
    json_pretty_print(data)
  when String
    if data.respond_to?(:lines)
      json_pretty_print(data.lines.to_a)
    else
      json_pretty_print(data.to_a)
    end
  else
    raise ArgumentError, "I can only generate JSON for Hashes, Mashes, Arrays and Strings. You fed me a #{data.class}!"
  end
end
have_v6_plugin?(name) click to toggle source
# File lib/ohai/system.rb, line 104
def have_v6_plugin?(name)
  @v6_dependency_solver.values.any? {|v6plugin| v6plugin.name == name }
end
json_pretty_print(item=nil) click to toggle source

Pretty Print this object as JSON

# File lib/ohai/system.rb, line 182
def json_pretty_print(item=nil)
  Yajl::Encoder.new(:pretty => true).encode(item || @data)
end
load_plugins() click to toggle source
# File lib/ohai/system.rb, line 76
def load_plugins
  @loader.load_all
end
pathify_v6_plugin(plugin_name) click to toggle source
# File lib/ohai/system.rb, line 108
def pathify_v6_plugin(plugin_name)
  path_components = plugin_name.split("::")
  File.join(path_components) + ".rb"
end
refresh_plugins(attribute_filter=nil) click to toggle source

Re-runs plugins that provide the attributes specified by attribute_filter. If attribute_filter is not given, re-runs all plugins.

Note that dependencies will not be re-run, so you must specify all of the attributes you want refreshed in the attribute_filter

This method takes a naive approach to v6 plugins: it simply re-runs all of them whenever called.

# File lib/ohai/system.rb, line 164
def refresh_plugins(attribute_filter=nil)
  Ohai::Hints.refresh_hints()
  @provides_map.all_plugins(attribute_filter).each do |plugin|
    plugin.reset!
  end
  run_plugins(true, attribute_filter)
end
require_plugin(plugin_ref, force=false) click to toggle source

Below APIs are from V6. Make sure that you are not breaking backwards compatibility if you are changing any of the APIs below.

# File lib/ohai/system.rb, line 118
def require_plugin(plugin_ref, force=false)
  plugins = [ ]
  # This method is only callable by version 6 plugins.
  # First we check if there exists a v6 plugin that fulfills the dependency.
  if @v6_dependency_solver.has_key? pathify_v6_plugin(plugin_ref)
    # Note that: partial_path looks like Plugin::Name
    # keys for @v6_dependency_solver are in form 'plugin/name.rb'
    plugins << @v6_dependency_solver[pathify_v6_plugin(plugin_ref)]
  else
    # While looking up V7 plugins we need to convert the plugin_ref to an attribute.
    attribute = plugin_ref.gsub("::", "/")
    begin
      plugins = @provides_map.find_providers_for([attribute])
    rescue Ohai::Exceptions::AttributeNotFound
      Ohai::Log.debug("Can not find any v7 plugin that provides #{attribute}")
      plugins = [ ]
    end
  end

  if plugins.empty?
    raise Ohai::Exceptions::DependencyNotFound, "Can not find a plugin for dependency #{plugin_ref}"
  else
    plugins.each do |plugin|
      begin
        @runner.run_plugin(plugin)
      rescue SystemExit, Interrupt
        raise
      rescue Ohai::Exceptions::DependencyCycle, Ohai::Exceptions::AttributeNotFound => e
        Ohai::Log.error("Encountered error while running plugins: #{e.inspect}")
        raise
      rescue Exception,Errno::ENOENT => e
        Ohai::Log.debug("Plugin #{plugin.name} threw exception #{e.inspect} #{e.backtrace.join("\n")}")
      end
    end
  end
end
reset_system() click to toggle source
# File lib/ohai/system.rb, line 47
def reset_system
  @data = Mash.new
  @provides_map = ProvidesMap.new

  @v6_dependency_solver = Hash.new

  @loader = Ohai::Loader.new(self)
  @runner = Ohai::Runner.new(self, true)

  Ohai::Hints.refresh_hints()

  # Remove the previously defined plugins
  recursive_remove_constants(Ohai::NamedPlugin)
end
run_plugins(safe = false, attribute_filter = nil) click to toggle source
# File lib/ohai/system.rb, line 80
def run_plugins(safe = false, attribute_filter = nil)
  # First run all the version 6 plugins
  @v6_dependency_solver.values.each do |v6plugin|
    @runner.run_plugin(v6plugin)
  end

  # Users who are migrating from ohai 6 may give one or more Ohai 6 plugin
  # names as the +attribute_filter+. In this case we return early because
  # the v7 plugin provides map will not have an entry for this plugin.
  if attribute_filter and Array(attribute_filter).all? {|filter_item| have_v6_plugin?(filter_item) }
    return true
  end

  # Then run all the version 7 plugins
  begin
    @provides_map.all_plugins(attribute_filter).each { |plugin|
      @runner.run_plugin(plugin)
    }
  rescue Ohai::Exceptions::AttributeNotFound, Ohai::Exceptions::DependencyCycle => e
    Ohai::Log.error("Encountered error while running plugins: #{e.inspect}")
    raise
  end
end
to_json() click to toggle source

Serialize this object as a hash

# File lib/ohai/system.rb, line 175
def to_json
  Yajl::Encoder.new.encode(@data)
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.