Class: Puppet::Util::Storage

Inherits:
Object
  • Object
show all
Includes:
Puppet::Util, Singleton
Defined in:
lib/puppet/util/storage.rb

Overview

a class for storing state

Constant Summary

Constants included from Puppet::Util

AbsolutePathPosix, AbsolutePathWindows, DEFAULT_POSIX_MODE, DEFAULT_WINDOWS_MODE

Constants included from POSIX

POSIX::LOCALE_ENV_VARS, POSIX::USER_ENV_VARS

Constants included from SymbolicFileMode

Puppet::Util::SymbolicFileMode::SetGIDBit, Puppet::Util::SymbolicFileMode::SetUIDBit, Puppet::Util::SymbolicFileMode::StickyBit, Puppet::Util::SymbolicFileMode::SymbolicMode, Puppet::Util::SymbolicFileMode::SymbolicSpecialToBit

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Puppet::Util

absolute_path?, benchmark, chuser, clear_environment, default_env, deterministic_rand, deterministic_rand_int, exit_on_fail, get_env, get_environment, logmethods, merge_environment, path_to_uri, pretty_backtrace, replace_file, safe_posix_fork, set_env, symbolizehash, thinmark, uri_encode, uri_query_encode, uri_to_path, which, withenv, withumask

Methods included from POSIX

#get_posix_field, #gid, #idfield, #methodbyid, #methodbyname, #search_posix_field, #uid

Methods included from SymbolicFileMode

#normalize_symbolic_mode, #symbolic_mode_to_int, #valid_symbolic_mode?

Constructor Details

#initializeStorage

Returns a new instance of Storage.



15
16
17
# File 'lib/puppet/util/storage.rb', line 15

def initialize
  self.class.load
end

Class Method Details

.cache(object) ⇒ Object

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.



24
25
26
27
28
29
30
31
32
# 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

.clearObject



34
35
36
# File 'lib/puppet/util/storage.rb', line 34

def self.clear
  @@state.clear
end

.initObject



38
39
40
# File 'lib/puppet/util/storage.rb', line 38

def self.init
  @@state = {}
end

.loadObject



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
69
70
71
72
73
74
# 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") % { filename: filename })
    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") % { filename: filename, detail: detail }

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

  unless @@state.is_a?(Hash)
    Puppet.err _("State got corrupted")
    self.init
  end
end

.stateObject



11
12
13
# File 'lib/puppet/util/storage.rb', line 11

def self.state
  @@state
end

.stateinspectObject



76
77
78
# File 'lib/puppet/util/storage.rb', line 76

def self.stateinspect
  @@state.inspect
end

.storeObject



80
81
82
83
84
85
86
87
88
# File 'lib/puppet/util/storage.rb', line 80

def self.store
  Puppet.debug "Storing state"

  Puppet.info _("Creating state file %{file}") % { 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