class Loom::Facts::FactSet
A factset is created by running each registered Loom::Facts::Provider
and calling Provider+collect_facts+. See ./fact_file_provider.rb and lib/loomext/facts/facter_provider.rb for examples of fact providers.
Constants
- InvalidFactName
- InvalidFactValue
- UnmarshalableError
Attributes
host_spec[R]
Public Class Methods
create_for_host(host_spec, shell, loom_config)
click to toggle source
# File lib/loom/facts/fact_set.rb, line 27 def create_for_host(host_spec, shell, loom_config) fact_map = {} fact_providers = Provider.create_fact_providers(host_spec, shell, loom_config) fact_providers.each do |provider| next if Provider.disabled_for_host?(host_spec, provider.class) namespace = provider.namespace Loom.log.debug { "loading facts from provider => #{provider}[#{namespace}]" } provider_facts = {} begin provider.collect_facts.each do |k, v| k = k.to_sym provider_facts[k] = v end if namespace if fact_map[namespace] Loom.log.warn "overriding fact[#{namespace}] with namespace" end fact_map[namespace] = provider_facts else provider_facts.each do |k, v| if fact_map[k] Loom.log.warn "overriding fact[#{k}]" end Loom.log.debug5(self) { "adding fact => #{k}=#{v.to_s}" } fact_map[k] = v end end rescue => e Loom.log.error "error executing fact provider #{provider.class} => #{e.message}" Loom.log.debug(self) { e.backtrace.join("\n\t") } provider.disable(host_spec) end end FactSet.new host_spec, fact_map end
new(host_spec, fact_map)
click to toggle source
# File lib/loom/facts/fact_set.rb, line 68 def initialize(host_spec, fact_map) raise unless fact_map.is_a? Hash validate_facts fact_map @fact_map = YAML.load(fact_map.to_yaml).reduce({}) do |memo, tuple| memo[tuple.first.to_sym] = tuple.last memo end @host_spec = host_spec end
Public Instance Methods
facts()
click to toggle source
# File lib/loom/facts/fact_set.rb, line 120 def facts @fact_map.dup end
get(fact_name)
click to toggle source
# File lib/loom/facts/fact_set.rb, line 109 def get(fact_name) v = @fact_map[fact_name.to_sym] dup = v.dup rescue v if dup.nil? Loom::Facts::EMPTY else dup end end
Also aliased as: []
hostname()
click to toggle source
# File lib/loom/facts/fact_set.rb, line 94 def hostname Loom.log.debug(<<NB `facts.hostname ` is actually the name by which SSH knows the host, not necessarily the actual host name. e.g. it may be an ip address, /etc/hosts alias, or ssh config alias. Use `facts.sshname` for the same value without this warning. NB ) sshname end
merge(facts)
click to toggle source
# File lib/loom/facts/fact_set.rb, line 81 def merge(facts) facts = case facts when FactSet facts.facts when Hash facts else raise "unable to merge facts => #{facts.class}:#{facts}" end merged_facts = @fact_map.merge facts FactSet.new @host_spec, merged_facts end
sshname()
click to toggle source
# File lib/loom/facts/fact_set.rb, line 105 def sshname host_spec.hostname end
to_s()
click to toggle source
# File lib/loom/facts/fact_set.rb, line 124 def to_s @fact_map.to_a.map { |tuple| tuple.join "=" }.join "\n" end
Private Instance Methods
validate_fact_name(name)
click to toggle source
# File lib/loom/facts/fact_set.rb, line 137 def validate_fact_name(name) raise InvalidFactName, name unless name.eql? YAML.load(name.to_yaml) end
validate_fact_value(value)
click to toggle source
# File lib/loom/facts/fact_set.rb, line 141 def validate_fact_value(value) raise InvalidFactValue, value unless value.eql? YAML.load(value.to_yaml) end
validate_facts(fact_map)
click to toggle source
# File lib/loom/facts/fact_set.rb, line 129 def validate_facts(fact_map) fact_map.each do |k, v| validate_fact_name k.to_sym validate_fact_value v end raise UnmarshalableError unless fact_map.eql? YAML.load(fact_map.to_yaml) end