Module: Ohai::Hints

Defined in:
lib/ohai/hints.rb

Overview

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.

Class Method Summary collapse

Class Method Details

.hint?(name) ⇒ Boolean

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

Parameters:

  • name (String)

    the name of the hint (not the path)

Returns:

  • (Boolean)


51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# 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) ⇒ Object

parse the JSON contents of a hint file. Return an empty hash if the file has no JSON content

Parameters:

  • filename (String)

    the hint file path



37
38
39
40
41
42
43
44
45
# 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_hintsObject

clear out any known hints in the @hints variable



30
31
32
# File 'lib/ohai/hints.rb', line 30

def self.refresh_hints
  @hints = {}
end