class Ohai::DSL::Plugin::VersionVII

The class for the “Version 7” plugin format we introduced in Ohai 7. This is the 2nd generation of Ohai plugin and the previous generation (V6) was removed in Ohai 14

Attributes

source[R]
version[R]

Public Class Methods

collect_data(*os_list, &block) click to toggle source

define data collection methodology per os

@param os [Array<Symbol>] the list of oses to collect data for @param block [block] the actual code to collect data for the specified os

# File lib/ohai/dsl/plugin/versionvii.rb, line 111
def self.collect_data(*os_list, &block)
  os_list = [ :default ] if os_list.empty?
  os_list.flatten.each do |os|
    Ohai::Log.warn("collect_data already defined on os '#{os}' for #{self}, last plugin seen will be used") if data_collector.key?(os)
    data_collector[os] = block
  end
end
data_collector() click to toggle source

A block per os for actually performing data collection constructed by the collect_data method

@return [Mash]

# File lib/ohai/dsl/plugin/versionvii.rb, line 70
def self.data_collector
  @data_collector ||= Mash.new
end
depends(*attrs) click to toggle source

set the attributes depended on by the plugin

@param attrs [Array]

# File lib/ohai/dsl/plugin/versionvii.rb, line 86
def self.depends(*attrs)
  attrs.each do |attr|
    depends_attrs << attr unless depends_attrs.include?(attr)
  end
end
depends_attrs() click to toggle source
# File lib/ohai/dsl/plugin/versionvii.rb, line 62
def self.depends_attrs
  @depends_attrs ||= []
end
new(data, logger) click to toggle source
Calls superclass method Ohai::DSL::Plugin::new
# File lib/ohai/dsl/plugin/versionvii.rb, line 30
def initialize(data, logger)
  super(data, logger)
  @source = self.class.sources
  @version = :version7
end
optional(opt = true) click to toggle source

set the plugin optional state

@param opt [Boolean]

# File lib/ohai/dsl/plugin/versionvii.rb, line 95
def self.optional(opt = true)
  @optional = opt
end
optional?() click to toggle source

check if the plugin is optional

@return [Boolean]

# File lib/ohai/dsl/plugin/versionvii.rb, line 102
def self.optional?
  !!@optional
end
provides(*attrs) click to toggle source

set the attributes provided by the plugin

@param attrs [Array]

# File lib/ohai/dsl/plugin/versionvii.rb, line 77
def self.provides(*attrs)
  attrs.each do |attr|
    provides_attrs << attr unless provides_attrs.include?(attr)
  end
end
provides_attrs() click to toggle source
# File lib/ohai/dsl/plugin/versionvii.rb, line 58
def self.provides_attrs
  @provides_attrs ||= []
end
sources() click to toggle source

The source of the plugin on disk. This is an array since a plugin may exist for multiple oses and this would include each of those os specific file paths

@return [Array]

# File lib/ohai/dsl/plugin/versionvii.rb, line 54
def self.sources
  @source_list ||= []
end
version() click to toggle source

return that we're a v7 plugin

@return [Symbol]

# File lib/ohai/dsl/plugin/versionvii.rb, line 46
def self.version
  :version7
end

Public Instance Methods

configuration(option, *options) click to toggle source
# File lib/ohai/dsl/plugin/versionvii.rb, line 159
def configuration(option, *options)
  return nil if plugin_config.nil? || !plugin_config.key?(option)

  value = plugin_config[option]
  options.each do |opt|
    return nil unless value.key?(opt)

    value = value[opt]
  end
  value
end
dependencies() click to toggle source

@return [Array]

# File lib/ohai/dsl/plugin/versionvii.rb, line 120
def dependencies
  self.class.depends_attrs
end
name() click to toggle source

the plugin name we use through Ohai (Foo) vs. the class name (Ohai::NamedPlugin::Foo)

@return [String]

# File lib/ohai/dsl/plugin/versionvii.rb, line 39
def name
  self.class.name.split("Ohai::NamedPlugin::")[1].to_sym
end
optional?() click to toggle source
# File lib/ohai/dsl/plugin/versionvii.rb, line 147
def optional?
  self.class.optional?
end
provides(*paths) click to toggle source
# File lib/ohai/dsl/plugin/versionvii.rb, line 151
def provides(*paths)
  logger.warn("[UNSUPPORTED OPERATION] \'provides\' is no longer supported in a \'collect_data\' context. Please specify \'provides\' before collecting plugin data. Ignoring command \'provides #{paths.join(", ")}")
end
require_plugin(*args) click to toggle source
# File lib/ohai/dsl/plugin/versionvii.rb, line 155
def require_plugin(*args)
  logger.warn("[UNSUPPORTED OPERATION] \'require_plugin\' is no longer supported. Please use \'depends\' instead.\nIgnoring plugin(s) #{args.join(", ")}")
end
run_plugin() click to toggle source
# File lib/ohai/dsl/plugin/versionvii.rb, line 124
def run_plugin
  collector = self.class.data_collector
  os = collect_os

  # :default - means any remote or local unix or windows host
  # :target  - means any remote API which is not unix/windows or otherwise rubyable (cisco switches, IPMI console, HTTP API, etc)
  #
  # Do not be confused by the fact that collectors tagged :target do not run against e.g. target-mode ubuntu boxes, that is not
  # what :target is intended for.  Also, do not be confused by the fact that collectors tagged :default do not run by default against
  # pure-target mode targets like switches.  That is all intended behavior, the names are problematic.  The :default nomenclature was
  # invented 10 years before target mode and we are stuck with it.
  #
  if collector.key?(os)
    instance_eval(&collector[os])
  elsif collector.key?(:default) && !nonruby_target?
    instance_eval(&collector[:default])
  elsif collector.key?(:target) && nonruby_target?
    instance_eval(&collector[:target])
  else
    logger.trace("Plugin #{name}: No data to collect. Skipping...")
  end
end

Private Instance Methods

fetch_plugin_config() click to toggle source
# File lib/ohai/dsl/plugin/versionvii.rb, line 177
def fetch_plugin_config
  # DMI => ["DMI"]
  # Memory => ["", "Memory"]
  # NetworkListeners => ["", "Network", "", "Listeners"]
  # SSHHostKey => ["SSH", "Host", "", "Key"]
  parts = name.to_s.split(/([A-Z][a-z]+)/)
  # ["DMI"] => ["DMI"]
  # ["", "Memory"] => ["Memory"]
  # ["", "Network", "", "Listeners"] => ["Network", "Listeners"]
  # ["SSH", "Host", "", "Key"] => ["SSH", "Host", "Key"]
  parts.delete_if(&:empty?)
  # ["DMI"] => :dmi
  # ["Memory"] => :memory
  # ["Network", "Listeners"] => :network_listeners
  # ["SSH", "Host", "Key"] => :ssh_host_key
  snake_case_name = parts.map(&:downcase).join("_").to_sym

  # Plugin names in config hashes are auto-vivified, so we check with
  # key? to avoid falsely instantiating a configuration hash.
  if Ohai.config[:plugin].key?(snake_case_name)
    Ohai.config[:plugin][snake_case_name]
  end
end
plugin_config() click to toggle source
# File lib/ohai/dsl/plugin/versionvii.rb, line 173
def plugin_config
  @plugin_config ||= fetch_plugin_config
end