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"}
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
81 82 83 |
# File 'lib/mcollective/facts/base.rb', line 81 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 65 66 67 68 |
# 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.clear tfacts.each_pair do |key,value| @facts[key.to_s] = value.to_s end @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
71 72 73 |
# File 'lib/mcollective/facts/base.rb', line 71 def get_facts get_fact(nil) end |
#has_fact?(fact) ⇒ Boolean
Returns true if we know about a specific fact, false otherwise
76 77 78 |
# File 'lib/mcollective/facts/base.rb', line 76 def has_fact?(fact) get_fact(nil).include?(fact) end |