class Puppet::Util::Storage

a class for storing state

Public Class Methods

cache(object) click to toggle source

Return a hash that will be stored to disk. It’s worth noting here that we use the object’s full path, not just the name/type combination. At the least, this is useful for those non-isomorphic types like exec, but it also means that if an object changes locations in the configuration it will lose its cache.

# File lib/puppet/util/storage.rb, line 24
def self.cache(object)
  if object.is_a?(Symbol)
    name = object
  else
    name = object.to_s
  end

  @@state[name] ||= {}
end
clear() click to toggle source
# File lib/puppet/util/storage.rb, line 34
def self.clear
  @@state.clear
end
init() click to toggle source
# File lib/puppet/util/storage.rb, line 38
def self.init
  @@state = {}
end
load() click to toggle source
# File lib/puppet/util/storage.rb, line 44
def self.load
  Puppet.settings.use(:main) unless FileTest.directory?(Puppet[:statedir])
  filename = Puppet[:statefile]

  unless Puppet::FileSystem.exist?(filename)
    self.init if @@state.nil?
    return
  end
  unless File.file?(filename)
    Puppet.warning("Checksumfile #{filename} is not a file, ignoring")
    return
  end
  Puppet::Util.benchmark(:debug, "Loaded state") do
    begin
      @@state = Puppet::Util::Yaml.load_file(filename)
    rescue Puppet::Util::Yaml::YamlLoadError => detail
      Puppet.err "Checksumfile #{filename} is corrupt (#{detail}); replacing"

      begin
        File.rename(filename, filename + ".bad")
      rescue
        raise Puppet::Error, "Could not rename corrupt #{filename}; remove manually", detail.backtrace
      end
    end
  end

  unless @@state.is_a?(Hash)
    Puppet.err "State got corrupted"
    self.init
  end
end
new() click to toggle source
# File lib/puppet/util/storage.rb, line 15
def initialize
  self.class.load
end
state() click to toggle source
# File lib/puppet/util/storage.rb, line 11
def self.state
  @@state
end
stateinspect() click to toggle source
# File lib/puppet/util/storage.rb, line 76
def self.stateinspect
  @@state.inspect
end
store() click to toggle source
# File lib/puppet/util/storage.rb, line 80
def self.store
  Puppet.debug "Storing state"

  Puppet.info "Creating state file #{Puppet[:statefile]}" unless Puppet::FileSystem.exist?(Puppet[:statefile])

  Puppet::Util.benchmark(:debug, "Stored state") do
    Puppet::Util::Yaml.dump(@@state, Puppet[:statefile])
  end
end