Class: Puppet::Util::Storage
- Includes:
- Puppet::Util, Singleton
- Defined in:
- lib/vendor/puppet/util/storage.rb
Overview
a class for storing state
Constant Summary
Constants included from Puppet::Util
AbsolutePathPosix, AbsolutePathWindows
Class Method Summary collapse
-
.cache(object) ⇒ Object
Return a hash that will be stored to disk.
- .clear ⇒ Object
- .init ⇒ Object
- .load ⇒ Object
- .state ⇒ Object
- .stateinspect ⇒ Object
- .store ⇒ Object
Instance Method Summary collapse
-
#initialize ⇒ Storage
constructor
A new instance of Storage.
Methods included from Puppet::Util
absolute_path?, activerecord_version, benchmark, binread, chuser, classproxy, #execfail, #execpipe, execute, execute_posix, execute_windows, logmethods, memory, path_to_uri, proxy, replace_file, safe_posix_fork, symbolize, symbolizehash, symbolizehash!, synchronize_on, thinmark, #threadlock, uri_to_path, wait_for_output, which, withumask
Methods included from POSIX
#get_posix_field, #gid, #idfield, #methodbyid, #methodbyname, #search_posix_field, #uid
Constructor Details
#initialize ⇒ Storage
Returns a new instance of Storage.
15 16 17 |
# File 'lib/vendor/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/vendor/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 ⇒ Object
34 35 36 37 |
# File 'lib/vendor/puppet/util/storage.rb', line 34 def self.clear @@state.clear Storage.init end |
.init ⇒ Object
39 40 41 42 |
# File 'lib/vendor/puppet/util/storage.rb', line 39 def self.init @@state = {} @@splitchar = "\t" end |
.load ⇒ Object
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 75 76 77 78 79 |
# File 'lib/vendor/puppet/util/storage.rb', line 46 def self.load Puppet.settings.use(:main) unless FileTest.directory?(Puppet[:statedir]) unless File.exists?(Puppet[:statefile]) self.init unless !@@state.nil? return end unless File.file?(Puppet[:statefile]) Puppet.warning("Checksumfile #{Puppet[:statefile]} is not a file, ignoring") return end Puppet::Util.benchmark(:debug, "Loaded state") do Puppet::Util::FileLocking.readlock(Puppet[:statefile]) do |file| begin @@state = YAML.load(file) rescue => detail Puppet.err "Checksumfile #{Puppet[:statefile]} is corrupt (#{detail}); replacing" begin File.rename(Puppet[:statefile], Puppet[:statefile] + ".bad") rescue raise Puppet::Error, "Could not rename corrupt #{Puppet[:statefile]}; remove manually" end end end end unless @@state.is_a?(Hash) Puppet.err "State got corrupted" self.init end #Puppet.debug "Loaded state is #{@@state.inspect}" end |
.state ⇒ Object
11 12 13 |
# File 'lib/vendor/puppet/util/storage.rb', line 11 def self.state @@state end |
.stateinspect ⇒ Object
81 82 83 |
# File 'lib/vendor/puppet/util/storage.rb', line 81 def self.stateinspect @@state.inspect end |
.store ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/vendor/puppet/util/storage.rb', line 85 def self.store Puppet.debug "Storing state" Puppet.info "Creating state file #{Puppet[:statefile]}" unless FileTest.exist?(Puppet[:statefile]) Puppet::Util.benchmark(:debug, "Stored state") do Puppet::Util::FileLocking.writelock(Puppet[:statefile], 0660) do |file| file.print YAML.dump(@@state) end end end |