module Ohai::Hints

Ohai hints are json files on disk that give ohai a hint to things that are often difficult to discover like certain clouds. Previously they were used for just about every cloud, but we've since discoverd better ways to auto-detect these clouds. They are generally dropped off by the knife plugins for those clouds during bootstrap, but may also be manually dropped off and consumed by 3rd party plugins.

Public Class Methods

hint?(name) click to toggle source

retrieve hint contents given a hint name. Looks up in @hints variable first. Attempts to load from file in config's :hints_path if not already cached. Saves the contents to the hash if the file was successfully parsed @param name [String] the name of the hint (not the path)

# File lib/ohai/hints.rb, line 51
def self.hint?(name)
  @hints ||= {}
  return @hints[name] if @hints[name]
  Ohai.config[:hints_path].each do |path|
    filename = File.join(path, "#{name}.json")
    next unless File.exist?(filename)
    Ohai::Log.trace("Found hint #{name}.json at #{filename}")
    @hints[name] = parse_hint_file(filename)
  end

  Ohai::Log.trace("Did not find hint #{name}.json in the hint path(s): #{Ohai.config[:hints_path].join(', ')} ") unless @hints.key?(name)
  @hints[name]
end
parse_hint_file(filename) click to toggle source

parse the JSON contents of a hint file. Return an empty hash if the file has no JSON content @param filename [String] the hint file path

# File lib/ohai/hints.rb, line 37
def self.parse_hint_file(filename)
  json_parser = FFI_Yajl::Parser.new
  hash = json_parser.parse(File.read(filename))
  hash || {} # hint
  # should exist because the file did, even if it didn't
  # contain anything
rescue FFI_Yajl::ParseError => e
  Ohai::Log.error("Could not parse hint file at #{filename}: #{e.message}")
end
refresh_hints() click to toggle source

clear out any known hints in the @hints variable

# File lib/ohai/hints.rb, line 30
def self.refresh_hints
  @hints = {}
end