summaryrefslogtreecommitdiffstats
path: root/lib/puppet
diff options
context:
space:
mode:
Diffstat (limited to 'lib/puppet')
-rw-r--r--lib/puppet/storage.rb67
-rw-r--r--lib/puppet/util.rb15
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