class MCollective::Facts::Yaml_facts

A factsource that reads a hash of facts from a YAML file

Multiple files can be specified seperated with a : in the config file, they will be merged with later files overriding earlier ones in the list.

Public Class Methods

new() click to toggle source
# File plugins/mcollective/facts/yaml_facts.rb, line 11
def initialize
    @yaml_file_mtimes = {}

    super
end

Public Instance Methods

force_reload?() click to toggle source

force fact reloads when the mtime on the yaml file change

# File plugins/mcollective/facts/yaml_facts.rb, line 39
def force_reload?
    config = Config.instance

    fact_files = config.pluginconf["yaml"].split(":")

    fact_files.each do |file|
        @yaml_file_mtimes[file] ||= File.stat(file).mtime
        mtime = File.stat(file).mtime

        if mtime > @yaml_file_mtimes[file]
            @yaml_file_mtimes[file] = mtime

            Log.debug("Forcing fact reload due to age of #{file}")

            return true
        end
    end

    false
end
load_facts_from_source() click to toggle source
# File plugins/mcollective/facts/yaml_facts.rb, line 17
def load_facts_from_source
    config = Config.instance

    fact_files = config.pluginconf["yaml"].split(":")
    facts = {}

    fact_files.each do |file|
        begin
            if File.exist?(file)
                facts.merge!(YAML.load_file(file))
            else
                raise("Can't find YAML file to load: #{file}")
            end
        rescue Exception => e
            Log.error("Failed to load yaml facts from #{file}: #{e.class}: #{e}")
        end
    end

    facts
end