diff options
| author | Luke Kanies <luke@madstop.com> | 2005-07-20 22:08:51 +0000 |
|---|---|---|
| committer | Luke Kanies <luke@madstop.com> | 2005-07-20 22:08:51 +0000 |
| commit | 8ec8c8d73c0a784c62a01767ac06e01f08742d10 (patch) | |
| tree | 3c43a257fdef139ca83fa151749d7207515a0dca /lib/puppet | |
| parent | a33d5d44d92894c12c485f7de49d324cd1a2eb23 (diff) | |
sources now pass all tests
git-svn-id: https://reductivelabs.com/svn/puppet/library/trunk@433 980ebf18-57e1-0310-9a29-db15c13687c0
Diffstat (limited to 'lib/puppet')
| -rw-r--r-- | lib/puppet/type.rb | 10 | ||||
| -rw-r--r-- | lib/puppet/type/pfile.rb | 78 |
2 files changed, 67 insertions, 21 deletions
diff --git a/lib/puppet/type.rb b/lib/puppet/type.rb index 4f937334d..212e47773 100644 --- a/lib/puppet/type.rb +++ b/lib/puppet/type.rb @@ -605,8 +605,12 @@ class Type < Puppet::Element # point to State objects # further, the lists of valid states and parameters are defined # at the class level - @states = Hash.new(false) - @parameters = Hash.new(false) + unless defined? @states + @states = Hash.new(false) + end + unless defined? @parameters + @parameters = Hash.new(false) + end @noop = false @@ -820,7 +824,7 @@ class Type < Puppet::Element # now record how many changes we've resulted in Puppet::Metric.add(self.class,self,:changes,changes.length) if changes.length > 0 - Puppet.info "%s resulted in %s changes" % + Puppet.info "%s: %s change(s)" % [self.name, changes.length] end return changes.flatten diff --git a/lib/puppet/type/pfile.rb b/lib/puppet/type/pfile.rb index 6ddcaa94a..bde232845 100644 --- a/lib/puppet/type/pfile.rb +++ b/lib/puppet/type/pfile.rb @@ -121,9 +121,19 @@ module Puppet self.parent.delete(self.name) return else - File.open(self.parent[:path]) { |file| - sum = Digest::MD5.hexdigest(file.read) - } + begin + File.open(self.parent[:path]) { |file| + sum = Digest::MD5.hexdigest(file.read) + } + rescue Errno::EACCES => detail + Puppet.notice "Cannot checksum %s: permission denied" % + self.parent.name + self.parent.delete(self.class.name) + rescue => detail + Puppet.notice "Cannot checksum %s: %s" % + detail + self.parent.delete(self.class.name) + end end when "md5lite": if FileTest.directory?(self.parent[:path]) @@ -537,13 +547,11 @@ module Puppet def retrieve sum = nil - unless sum = self.parent.state(:checksum) - raise Puppet::Error.new( - "Cannot copy without knowing the sum state of %s" % - self.parent.path - ) + if sum = self.parent.state(:checksum) + @is = sum.is + else + @is = -1 end - @is = sum.is end def should=(source) @@ -575,17 +583,27 @@ module Puppet end def sync + if @is == -1 + self.retrieve # try again + if @is == -1 + if @is == @should + return nil + end + end + end @backed = false + bak = self.parent[:backup] || ".puppet-bak" + # try backing ourself up before we overwrite if FileTest.file?(self.parent.name) if bucket = self.parent[:filebucket] bucket.backup(self.parent.name) @backed = true - elsif str = self.parent[:backup] + elsif self.parent[:backup] # back the file up begin FileUtils.cp(self.parent.name, - self.parent.name + self.parent[:backup]) + self.parent.name + bak) @backed = true rescue => detail # since they said they want a backup, let's error out @@ -597,6 +615,10 @@ module Puppet end end + unless self.parent[:backup] + @backed = true + end + # okay, we've now got whatever backing up done we might need # so just copy the files over if @local @@ -607,10 +629,10 @@ module Puppet if FileTest.exists?(self.parent.name) # get the file here FileUtils.cp(@source, self.parent.name + ".tmp") - if FileTest.exists?(self.parent.name + ".puppet-bak") + if FileTest.exists?(self.parent.name + bak) Puppet.warning "Deleting backup of %s" % self.parent.name - File.unlink(self.parent.name + ".puppet-bak") + File.unlink(self.parent.name + bak) end # rename the existing one File.rename( @@ -624,7 +646,10 @@ module Puppet ) # if we've made a backup, then delete the old file if @backed - File.unlink(self.parent.name + ".puppet-bak") + #Puppet.err "Unlinking backup" + File.unlink(self.parent.name + bak) + #else + #Puppet.err "Not unlinking backup" end else # the easy case @@ -674,10 +699,10 @@ module Puppet @parameters = [ :path, + :backup, :source, :recurse, - :filebucket, - :backup + :filebucket ] @name = :file @@ -690,9 +715,23 @@ module Puppet @arghash.delete(self.class.namevar) @stat = nil + @parameters = Hash.new(false) + + # default to a string, which is true + @parameters[:backup] = ".puppet-bak" super end + def parambackup=(value) + if value == false or value == "false" + @parameters[:backup] = false + elsif value == true or value == "true" + @parameters[:backup] = ".puppet-bak" + else + @parameters[:backup] = value + end + end + def newchild(path, hash = {}) if path =~ %r{^#{File::SEPARATOR}} raise Puppet::DevError.new( @@ -756,7 +795,6 @@ module Puppet [path,detail.message] ) Puppet.debug args.inspect - puts detail.stack child = nil rescue => detail Puppet.notice( @@ -764,7 +802,6 @@ module Puppet [path,detail] ) Puppet.debug args.inspect - Puppet.err detail.class child = nil end end @@ -1015,6 +1052,11 @@ module Puppet "Uh, somehow trying to manage non-dir %s" % self.name ) end + unless FileTest.readable? self.name + Puppet.notice "Cannot manage %s: permission denied" % self.name + return + end + Dir.foreach(self.name) { |file| next if file =~ /^\.\.?/ # skip . and .. # XXX it's right here |
