| Server IP : 77.68.64.21 / Your IP : 216.73.217.59 Web Server : Apache System : Linux hp3-wp-1011352.hostingp3.local 3.10.0-1160.144.1.el7.tuxcare.els9.x86_64 #1 SMP Fri Jul 10 17:06:31 UTC 2026 x86_64 User : csh2516497 ( 2094697) PHP Version : 8.3.30 Disable Function : shell_exec,exec,system,popen,set_time_limit MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/share/ruby/vendor_ruby/facter/util/ |
Upload File : |
require 'facter'
require 'facter/util/fact'
require 'facter/util/loader'
# Manage which facts exist and how we access them. Largely just a wrapper
# around a hash of facts.
#
# @api private
class Facter::Util::Collection
def initialize(internal_loader, external_loader)
@facts = Hash.new
@internal_loader = internal_loader
@external_loader = external_loader
end
# Return a fact object by name.
def [](name)
value(name)
end
# Define a new fact or extend an existing fact.
#
# @param name [Symbol] The name of the fact to define
# @param options [Hash] A hash of options to set on the fact
#
# @return [Facter::Util::Fact] The fact that was defined
def define_fact(name, options = {}, &block)
fact = create_or_return_fact(name, options)
if block_given?
fact.instance_eval(&block)
end
fact
rescue => e
Facter.log_exception(e, "Unable to add fact #{name}: #{e}")
end
# Add a resolution mechanism for a named fact. This does not distinguish
# between adding a new fact and adding a new way to resolve a fact.
#
# @param name [Symbol] The name of the fact to define
# @param options [Hash] A hash of options to set on the fact and resolution
#
# @return [Facter::Util::Fact] The fact that was defined
def add(name, options = {}, &block)
fact = create_or_return_fact(name, options)
fact.add(options, &block)
return fact
end
include Enumerable
# Iterate across all of the facts.
def each
load_all
@facts.each do |name, fact|
value = fact.value
unless value.nil?
yield name.to_s, value
end
end
end
# Return a fact by name.
def fact(name)
name = canonicalize(name)
# Try to load the fact if necessary
load(name) unless @facts[name]
# Try HARDER
internal_loader.load_all unless @facts[name]
if @facts.empty?
Facter.warnonce("No facts loaded from #{internal_loader.search_path.join(File::PATH_SEPARATOR)}")
end
@facts[name]
end
# Flush all cached values.
def flush
@facts.each { |name, fact| fact.flush }
@external_facts_loaded = nil
end
# Return a list of all of the facts.
def list
load_all
return @facts.keys
end
def load(name)
internal_loader.load(name)
load_external_facts
end
# Load all known facts.
def load_all
internal_loader.load_all
load_external_facts
end
def internal_loader
@internal_loader
end
def external_loader
@external_loader
end
# Return a hash of all of our facts.
def to_hash
@facts.inject({}) do |h, ary|
value = ary[1].value
if ! value.nil?
# For backwards compatibility, convert the fact name to a string.
h[ary[0].to_s] = value
end
h
end
end
def value(name)
if fact = fact(name)
fact.value
end
end
private
def create_or_return_fact(name, options)
name = canonicalize(name)
fact = @facts[name]
if fact.nil?
fact = Facter::Util::Fact.new(name, options)
@facts[name] = fact
else
fact.extract_ldapname_option!(options)
end
fact
end
def canonicalize(name)
name.to_s.downcase.to_sym
end
def load_external_facts
if ! @external_facts_loaded
@external_facts_loaded = true
external_loader.load(self)
end
end
end