class Facter::InternalFactManager
Public Instance Methods
resolve_facts(searched_facts)
click to toggle source
# File lib/facter/framework/core/fact/internal/internal_fact_manager.rb, line 7 def resolve_facts(searched_facts) internal_searched_facts = filter_internal_facts(searched_facts) resolved_facts = if Options[:sequential] @@log.debug('Resolving facts sequentially') resolve_sequentially(internal_searched_facts) else @@log.debug('Resolving fact in parallel') threads = start_threads(internal_searched_facts) join_threads(threads, internal_searched_facts) end nil_resolved_facts = resolve_nil_facts(searched_facts) resolved_facts.concat(nil_resolved_facts) end
Private Instance Methods
filter_internal_facts(searched_facts)
click to toggle source
# File lib/facter/framework/core/fact/internal/internal_fact_manager.rb, line 26 def filter_internal_facts(searched_facts) searched_facts.select { |searched_fact| %i[core legacy].include? searched_fact.type } end
join_threads(threads, searched_facts)
click to toggle source
# File lib/facter/framework/core/fact/internal/internal_fact_manager.rb, line 69 def join_threads(threads, searched_facts) resolved_facts = threads.map(&:value) resolved_facts.compact! resolved_facts.flatten! FactAugmenter.augment_resolved_facts(searched_facts, resolved_facts) end
resolve_fact(searched_fact)
click to toggle source
# File lib/facter/framework/core/fact/internal/internal_fact_manager.rb, line 77 def resolve_fact(searched_fact) fact = CoreFact.new(searched_fact) fact.create rescue StandardError => e @@log.log_exception(e) nil end
resolve_nil_facts(searched_facts)
click to toggle source
# File lib/facter/framework/core/fact/internal/internal_fact_manager.rb, line 30 def resolve_nil_facts(searched_facts) resolved_facts = [] searched_facts.select { |fact| fact.type == :nil }.each do |fact| resolved_facts << ResolvedFact.new(fact.name, nil, :nil, fact.name) end resolved_facts end
resolve_sequentially(searched_facts)
click to toggle source
# File lib/facter/framework/core/fact/internal/internal_fact_manager.rb, line 39 def resolve_sequentially(searched_facts) resolved_facts = [] searched_facts .uniq { |searched_fact| searched_fact.fact_class.name } .each do |searched_fact| begin fact = CoreFact.new(searched_fact) fact_value = fact.create resolved_facts << fact_value unless fact_value.nil? rescue StandardError => e @@log.log_exception(e) end end resolved_facts.flatten! FactAugmenter.augment_resolved_facts(searched_facts, resolved_facts) end
start_threads(searched_facts)
click to toggle source
# File lib/facter/framework/core/fact/internal/internal_fact_manager.rb, line 58 def start_threads(searched_facts) # only resolve a fact once, even if multiple search facts depend on that fact searched_facts .uniq { |searched_fact| searched_fact.fact_class.name } .map do |searched_fact| Thread.new do resolve_fact(searched_fact) end end end