diff options
Diffstat (limited to 'lib/puppet')
-rw-r--r-- | lib/puppet/storage.rb | 67 | ||||
-rw-r--r-- | lib/puppet/util.rb | 15 |
2 files changed, 45 insertions, 37 deletions
diff --git a/lib/puppet/storage.rb b/lib/puppet/storage.rb index da6061738..a1ca9e1cc 100644 --- a/lib/puppet/storage.rb +++ b/lib/puppet/storage.rb @@ -1,3 +1,5 @@ +require 'yaml' + module Puppet # a class for storing state class Storage @@ -31,28 +33,26 @@ module Puppet Puppet.info "Statefile %s does not exist" % Puppet[:checksumfile] return end - begin #Puppet.debug "Loading statefile %s" % Puppet[:checksumfile] - Puppet::Util.lock(Puppet[:checksumfile]) { - File.open(Puppet[:checksumfile]) { |file| - file.each { |line| - myclass, key, value = line.split(@@splitchar) - - begin - @@state[eval(myclass)][key] = Marshal::load(value) - rescue => detail - raise Puppet::Error, - "Failed to load value for %s::%s => %s" % [ - myclass,key,detail - ], caller - end - } - } + Puppet::Util.lock(Puppet[:checksumfile]) { |file| + #@@state = Marshal.load(file) + @@state = YAML.load(file) + #File.open(Puppet[:checksumfile]) { |file| + # file.each { |line| + # line.chomp! + # myclass, key, value = line.split(@@splitchar) +# +# begin +# @@state[eval(myclass)][key] = Marshal::load(value) +# rescue => detail +# raise Puppet::Error, +# "Failed to load value for %s::%s => %s" % [ +# myclass,key,detail +# ], caller +# end +# } + #} } - rescue => detail - Puppet.err "Could not read %s" % Puppet[:checksumfile] - raise - end #Puppet.debug "Loaded state is %s" % @@state.inspect end @@ -61,8 +61,7 @@ module Puppet unless myclass.is_a? Class myclass = myclass.class end - result = @@state[myclass] - return result + return @@state[myclass.to_s] end def self.store @@ -81,18 +80,20 @@ module Puppet Puppet.info "Creating state file %s" % Puppet[:checksumfile] end - Puppet::Util.lock(Puppet[:checksumfile]) { - File.open(Puppet[:checksumfile], File::CREAT|File::WRONLY, 0600) { |file| - @@state.each { |klass, thash| - thash.each { |key,value| - mvalue = Marshal::dump(value) - file.puts([klass,key,mvalue].join(@@splitchar)) - } - } - } + Puppet::Util.lock(Puppet[:checksumfile], File::CREAT|File::WRONLY, 0600) { |file| + file.print YAML.dump(@@state) + #file.puts(Marshal::dump(@@state)) + #File.open(Puppet[:checksumfile], File::CREAT|File::WRONLY, 0600) { |file| + # @@state.each { |klass, thash| + # thash.each { |key,value| + # Puppet.warning "Storing: %s %s %s" % + # [klass, key.inspect, value.inspect] + # mvalue = Marshal::dump(value) + # file.puts([klass,key,mvalue].join(@@splitchar)) + # } + # } + #} } - - #Puppet.debug "Stored state is %s" % @@state.inspect end end end diff --git a/lib/puppet/util.rb b/lib/puppet/util.rb index ec9b6e1fe..d1878f592 100644 --- a/lib/puppet/util.rb +++ b/lib/puppet/util.rb @@ -86,13 +86,20 @@ module Util end # Create a lock file while something is happening - def self.lock(file) - lock = file + ".lock" + def self.lock(*opts) + lock = opts[0] + ".lock" while File.exists?(lock) - Puppet.debug "%s is locked" % file + #Puppet.debug "%s is locked" % opts[0] sleep 0.1 end - yield + File.open(lock, "w") { |f| f.print " "; f.flush } + begin + File.open(*opts) { |file| yield file } + rescue + raise + ensure + File.delete(lock) + end end # Create instance methods for each of the log levels. This allows |