summaryrefslogtreecommitdiffstats
path: root/lib/puppet
diff options
context:
space:
mode:
authorLuke Kanies <luke@madstop.com>2005-07-20 22:08:51 +0000
committerLuke Kanies <luke@madstop.com>2005-07-20 22:08:51 +0000
commit8ec8c8d73c0a784c62a01767ac06e01f08742d10 (patch)
tree3c43a257fdef139ca83fa151749d7207515a0dca /lib/puppet
parenta33d5d44d92894c12c485f7de49d324cd1a2eb23 (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.rb10
-rw-r--r--lib/puppet/type/pfile.rb78
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