class Puppet::Node::Facts

Manage a given node’s facts. This either accepts facts and stores them, or returns facts for a given node.

Attributes

name[RW]
values[RW]

Public Instance Methods

==(other) click to toggle source
# File lib/puppet/node/facts.rb, line 76
def ==(other)
  return false unless self.name == other.name
  strip_internal == other.send(:strip_internal)
end
add_local_facts() click to toggle source
# File lib/puppet/node/facts.rb, line 28
def add_local_facts
  values["clientcert"] = Puppet.settings[:certname]
  values["clientversion"] = Puppet.version.to_s
  values["clientnoop"] = Puppet.settings[:noop]
end
add_timestamp() click to toggle source

Add internal data to the facts for storage.

# File lib/puppet/node/facts.rb, line 118
def add_timestamp
  self.timestamp = Time.now
end
initialize_from_hash(data) click to toggle source
# File lib/puppet/node/facts.rb, line 41
def initialize_from_hash(data)
  @name = data['name']
  @values = data['values']
  # Timestamp will be here in YAML
  timestamp = data['values']['_timestamp']
  @values.delete_if do |key, val|
    key =~ /^_/
  end

  #Timestamp will be here in pson
  timestamp ||= data['timestamp']
  timestamp = Time.parse(timestamp) if timestamp.is_a? String
  self.timestamp = timestamp

  self.expiration = data['expiration']
  if expiration.is_a? String
    self.expiration = Time.parse(expiration)
  end
end
sanitize() click to toggle source

Sanitize fact values by converting everything not a string, boolean numeric, array or hash into strings.

# File lib/puppet/node/facts.rb, line 70
def sanitize
  values.each do |fact, value|
    values[fact] = sanitize_fact value
  end
end
stringify() click to toggle source

Convert all fact values into strings.

# File lib/puppet/node/facts.rb, line 62
def stringify
  values.each do |fact, value|
    values[fact] = value.to_s
  end
end
strip_internal() click to toggle source

Strip out that internal data.

# File lib/puppet/node/facts.rb, line 131
def strip_internal
  newvals = values.dup
  newvals.find_all { |name, value| name.to_s =~ /^_/ }.each { |name, value| newvals.delete(name) }
  newvals
end
timestamp() click to toggle source
# File lib/puppet/node/facts.rb, line 126
def timestamp
  self.values['_timestamp']
end
timestamp=(time) click to toggle source
# File lib/puppet/node/facts.rb, line 122
def timestamp=(time)
  self.values['_timestamp'] = time
end
to_data_hash() click to toggle source
# File lib/puppet/node/facts.rb, line 92
def to_data_hash
  result = {
    'name' => name,
    'values' => strip_internal,
  }

  if timestamp
    if timestamp.is_a? Time
      result['timestamp'] = timestamp.iso8601(9)
    else
      result['timestamp'] = timestamp
    end
  end

  if expiration
    if expiration.is_a? Time
      result['expiration'] = expiration.iso8601(9)
    else
      result['expiration'] = expiration
    end
  end

  result
end

Public Class Methods

from_data_hash(data) click to toggle source
# File lib/puppet/node/facts.rb, line 81
def self.from_data_hash(data)
  new_facts = allocate
  new_facts.initialize_from_hash(data)
  new_facts
end
from_pson(data) click to toggle source
# File lib/puppet/node/facts.rb, line 87
def self.from_pson(data)
  Puppet.deprecation_warning("from_pson is being removed in favour of from_data_hash.")
  self.from_data_hash(data)
end
new(name, values = {}) click to toggle source
# File lib/puppet/node/facts.rb, line 34
def initialize(name, values = {})
  @name = name
  @values = values

  add_timestamp
end