Class: MCollective::Facts::Base
- Inherits:
-
Object
- Object
- MCollective::Facts::Base
- Defined in:
- lib/mcollective/facts/base.rb
Overview
A base class for fact providers, to make a new fully functional fact provider inherit from this and simply provide a self.get_facts method that returns a hash like:
{"foo" => "bar",
"bar" => "baz"}
Direct Known Subclasses
Class Method Summary collapse
-
.inherited(klass) ⇒ Object
Registers new fact sources into the plugin manager.
Instance Method Summary collapse
-
#force_reload? ⇒ Boolean
Plugins can override this to provide forced fact invalidation.
-
#get_fact(fact = nil) ⇒ Object
Returns the value of a single fact.
-
#get_facts ⇒ Object
Returns all facts.
-
#has_fact?(fact) ⇒ Boolean
Returns true if we know about a specific fact, false otherwise.
-
#initialize ⇒ Base
constructor
A new instance of Base.
Constructor Details
#initialize ⇒ Base
Returns a new instance of Base.
10 11 12 13 14 |
# File 'lib/mcollective/facts/base.rb', line 10 def initialize @facts = {} @last_good_facts = {} @last_facts_load = 0 end |
Class Method Details
.inherited(klass) ⇒ Object
Registers new fact sources into the plugin manager
17 18 19 |
# File 'lib/mcollective/facts/base.rb', line 17 def self.inherited(klass) PluginManager << {:type => "facts_plugin", :class => klass.to_s} end |
Instance Method Details
#force_reload? ⇒ Boolean
Plugins can override this to provide forced fact invalidation
77 78 79 |
# File 'lib/mcollective/facts/base.rb', line 77 def force_reload? false end |
#get_fact(fact = nil) ⇒ Object
Returns the value of a single fact
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/mcollective/facts/base.rb', line 22 def get_fact(fact=nil) config = Config.instance cache_time = config.fact_cache_time || 300 Thread.exclusive do begin if (Time.now.to_i - @last_facts_load > cache_time.to_i ) || force_reload? Log.debug("Resetting facter cache, now: #{Time.now.to_i} last-known-good: #{@last_facts_load}") tfacts = load_facts_from_source # Force reset to last known good state on empty facts raise "Got empty facts" if tfacts.empty? @facts = normalize_facts(tfacts) @last_good_facts = @facts.clone @last_facts_load = Time.now.to_i else Log.debug("Using cached facts now: #{Time.now.to_i} last-known-good: #{@last_facts_load}") end rescue Exception => e Log.error("Failed to load facts: #{e.class}: #{e}") # Avoid loops where failing fact loads cause huge CPU # loops, this way it only retries once every cache_time # seconds @last_facts_load = Time.now.to_i # Revert to last known good state @facts = @last_good_facts.clone end end # If you do not supply a specific fact all facts will be returned if fact.nil? return @facts else @facts.include?(fact) ? @facts[fact] : nil end end |
#get_facts ⇒ Object
Returns all facts
67 68 69 |
# File 'lib/mcollective/facts/base.rb', line 67 def get_facts get_fact(nil) end |
#has_fact?(fact) ⇒ Boolean
Returns true if we know about a specific fact, false otherwise
72 73 74 |
# File 'lib/mcollective/facts/base.rb', line 72 def has_fact?(fact) get_fact(nil).include?(fact) end |