class LegacyFacter::Util::DirectoryLoader
Constants
- EXTERNAL_FACT_WEIGHT
This value makes it highly likely that external facts will take precedence over all other facts
Attributes
directories[R]
Directory for fact loading
Public Class Methods
new(dir = LegacyFacter::Util::Config.external_facts_dirs, weight = EXTERNAL_FACT_WEIGHT)
click to toggle source
# File lib/facter/custom_facts/util/directory_loader.rb, line 34 def initialize(dir = LegacyFacter::Util::Config.external_facts_dirs, weight = EXTERNAL_FACT_WEIGHT) @directories = [dir].flatten @weight = weight @log ||= Facter::Log.new(self) end
Public Instance Methods
load(collection)
click to toggle source
Load facts from files in fact directory using the relevant parser classes to parse them.
# File lib/facter/custom_facts/util/directory_loader.rb, line 42 def load(collection) weight = @weight searched_facts, cached_facts = load_directory_entries(collection) load_cached_facts(collection, cached_facts, weight) load_searched_facts(collection, searched_facts, weight) end
Private Instance Methods
entries()
click to toggle source
# File lib/facter/custom_facts/util/directory_loader.rb, line 109 def entries dirs = @directories.select { |directory| File.directory?(directory) }.map do |directory| Dir.entries(directory).map { |directory_entry| File.join(directory, directory_entry) } end dirs.flatten.select { |f| should_parse?(f) } rescue Errno::ENOENT [] end
file_blocked?(file)
click to toggle source
# File lib/facter/custom_facts/util/directory_loader.rb, line 122 def file_blocked?(file) if Facter::Options[:blocked_facts].include? file Facter.debug("External fact file #{file} blocked.") return true end false end
load_cached_facts(collection, cached_facts, weight)
click to toggle source
# File lib/facter/custom_facts/util/directory_loader.rb, line 74 def load_cached_facts(collection, cached_facts, weight) cached_facts.each do |cached_fact| collection.add(cached_fact.name, value: cached_fact.value, fact_type: :external, file: cached_fact.file) { has_weight(weight) } end end
load_directory_entries(_collection)
click to toggle source
# File lib/facter/custom_facts/util/directory_loader.rb, line 54 def load_directory_entries(_collection) cm = Facter::CacheManager.new facts = [] entries.each do |file| basename = File.basename(file) next if file_blocked?(basename) if facts.find { |f| f.name == basename } && cm.fact_cache_enabled?(basename) Facter.log_exception(Exception.new("Caching is enabled for group \"#{basename}\" while "\ 'there are at least two external facts files with the same filename')) else searched_fact = Facter::SearchedFact.new(basename, nil, [], nil, :file) searched_fact.file = file facts << searched_fact end end cm.resolve_facts(facts) end
load_searched_facts(collection, searched_facts, weight)
click to toggle source
# File lib/facter/custom_facts/util/directory_loader.rb, line 81 def load_searched_facts(collection, searched_facts, weight) searched_facts.each do |fact| parser = LegacyFacter::Util::Parser.parser_for(fact.file) next if parser.nil? data = resolve_fact(fact, parser) if data == false LegacyFacter.warn "Could not interpret fact file #{fact.file}" elsif (data == {}) || data.nil? @log.debug("Fact file #{fact.file} was parsed but no key=>value data was returned") else data.each do |p, v| collection.add(p, value: v, fact_type: :external, file: fact.file) { has_weight(weight) } end end end end
resolve_fact(fact, parser)
click to toggle source
# File lib/facter/custom_facts/util/directory_loader.rb, line 101 def resolve_fact(fact, parser) data = nil fact_name = File.basename(fact.file) Facter::Framework::Benchmarking::Timer.measure(fact_name) { data = parser.results } data end
should_parse?(file)
click to toggle source
# File lib/facter/custom_facts/util/directory_loader.rb, line 118 def should_parse?(file) File.basename(file) !~ /^\./ end