Class: Facter::Util::Fact
- Inherits:
-
Object
- Object
- Facter::Util::Fact
- Defined in:
- lib/facter/custom_facts/util/fact.rb
Instance Attribute Summary collapse
- #ldapname ⇒ String deprecated Deprecated.
-
#name ⇒ String
readonly
The name of the fact.
-
#options ⇒ Object
Fact options e.g.
-
#used_resolution_weight ⇒ Object
Weight of the resolution that was used to obtain the fact value.
Instance Method Summary collapse
-
#add(options = {}, &block) ⇒ Facter::Util::Resolution
private
Adds a new resolution.
-
#define_resolution(resolution_name, options = {}, &block) ⇒ Facter::Util::Resolution
Define a new named resolution or return an existing resolution with the given name.
- #extract_ldapname_option!(options) ⇒ Object deprecated private Deprecated.
-
#flush ⇒ void
private
Flushes any cached values.
-
#initialize(name, options = {}) ⇒ Fact
constructor
private
Creates a new fact, with no resolution mechanisms.
-
#resolution(name) ⇒ Facter::Util::Resolution?
Retrieve an existing resolution by name.
-
#value ⇒ Object
Returns the value for this fact.
Constructor Details
#initialize(name, options = {}) ⇒ Fact
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Creates a new fact, with no resolution mechanisms. See Facter.add for the public API for creating facts.
33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/facter/custom_facts/util/fact.rb', line 33 def initialize(name, = {}) @name = name.to_s.downcase.intern @options = Facter::Utils.deep_copy() extract_ldapname_option!() @ldapname ||= @name.to_s @resolves = [] @searching = false @used_resolution_weight = 0 @value = nil end |
Instance Attribute Details
#ldapname ⇒ String
18 19 20 |
# File 'lib/facter/custom_facts/util/fact.rb', line 18 def ldapname @ldapname end |
#name ⇒ String (readonly)
The name of the fact
14 15 16 |
# File 'lib/facter/custom_facts/util/fact.rb', line 14 def name @name end |
#options ⇒ Object
Fact options e.g. fact_type
21 22 23 |
# File 'lib/facter/custom_facts/util/fact.rb', line 21 def @options end |
#used_resolution_weight ⇒ Object
Weight of the resolution that was used to obtain the fact value
24 25 26 |
# File 'lib/facter/custom_facts/util/fact.rb', line 24 def used_resolution_weight @used_resolution_weight end |
Instance Method Details
#add(options = {}, &block) ⇒ Facter::Util::Resolution
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Adds a new resolution. This requires a block, which will then be evaluated in the context of the new resolution.
57 58 59 60 |
# File 'lib/facter/custom_facts/util/fact.rb', line 57 def add( = {}, &block) @options = Facter::Utils.deep_copy(@options.merge()) define_resolution(nil, , &block) end |
#define_resolution(resolution_name, options = {}, &block) ⇒ Facter::Util::Resolution
Define a new named resolution or return an existing resolution with the given name.
70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/facter/custom_facts/util/fact.rb', line 70 def define_resolution(resolution_name, = {}, &block) resolution_type = .delete(:type) || :simple resolve = create_or_return_resolution(resolution_name, resolution_type) resolve.() unless .empty? resolve.evaluate(&block) if block resolve rescue StandardError => e LegacyFacter .log_exception(e, "Unable to add resolve #{resolution_name.inspect} for fact #{@name}: #{e.}") end |
#extract_ldapname_option!(options) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
137 138 139 140 141 142 |
# File 'lib/facter/custom_facts/util/fact.rb', line 137 def extract_ldapname_option!() return unless [:ldapname] LegacyFacter.warnonce('ldapname is deprecated and will be removed in a future version') self.ldapname = .delete(:ldapname) end |
#flush ⇒ void
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
This method returns an undefined value.
Flushes any cached values.
101 102 103 104 |
# File 'lib/facter/custom_facts/util/fact.rb', line 101 def flush @resolves.each(&:flush) @value = nil end |
#resolution(name) ⇒ Facter::Util::Resolution?
Retrieve an existing resolution by name
90 91 92 93 94 |
# File 'lib/facter/custom_facts/util/fact.rb', line 90 def resolution(name) return nil if name.nil? @resolves.find { |resolve| resolve.name == name } end |
#value ⇒ Object
Returns the value for this fact. This searches all resolutions by suitability and weight (see Resolution). If no suitable resolution is found, it returns nil.
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/facter/custom_facts/util/fact.rb', line 111 def value return @value if @value if @resolves.empty? LegacyFacter.debug format('No resolves for %<name>s', name: @name) return nil end searching do suitable_resolutions = sort_by_weight(find_suitable_resolutions(@resolves)) Facter::Framework::Benchmarking::Timer.measure(@name) do @value = find_first_real_value(suitable_resolutions) end announce_when_no_suitable_resolution(suitable_resolutions) announce_when_no_value_found(@value) @value = resolve_value end @value end |