summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorLuke Kanies <luke@madstop.com>2007-09-22 17:22:07 -0500
committerLuke Kanies <luke@madstop.com>2007-09-22 17:22:07 -0500
commite552c83b2875dab60a5508bfae352e7aa9235746 (patch)
tree3b7555352428bb701bc072be86a0535ca7fb02d6 /lib
parentd6e91ae78698bdbec818d383574f4c279735e172 (diff)
downloadpuppet-e552c83b2875dab60a5508bfae352e7aa9235746.tar.gz
puppet-e552c83b2875dab60a5508bfae352e7aa9235746.tar.xz
puppet-e552c83b2875dab60a5508bfae352e7aa9235746.zip
Adding the base file terminus. This will, at the least,
be used as the back end for filebuckets and the certificate authority.
Diffstat (limited to 'lib')
-rw-r--r--lib/puppet/indirector/file.rb40
1 files changed, 40 insertions, 0 deletions
diff --git a/lib/puppet/indirector/file.rb b/lib/puppet/indirector/file.rb
new file mode 100644
index 000000000..75fcf1ddf
--- /dev/null
+++ b/lib/puppet/indirector/file.rb
@@ -0,0 +1,40 @@
+require 'puppet/indirector/terminus'
+
+# An empty terminus type, meant to just return empty objects.
+class Puppet::Indirector::File < Puppet::Indirector::Terminus
+ def destroy(file)
+ raise Puppet::Error.new("File %s does not exist; cannot destroy" % [file.name]) unless File.exist?(file.path)
+
+ begin
+ File.unlink(file.path)
+ rescue => detail
+ raise Puppet::Error, "Could not remove %s: %s" % [file.path, detail]
+ end
+ end
+
+ def find(path)
+ return nil unless File.exist?(path)
+
+ begin
+ content = File.read(path)
+ rescue => detail
+ raise Puppet::Error, "Could not retrieve path %s: %s" % [path, detail]
+ end
+
+ file = model.new(path)
+ file.content = content
+ return file
+ end
+
+ def save(file)
+ dir = File.dirname(file.path)
+
+ raise Puppet::Error.new("Cannot save %s; parent directory %s does not exist" % [file.name, dir]) unless File.directory?(dir)
+
+ begin
+ File.open(file.path, "w") { |f| f.print file.content }
+ rescue => detail
+ raise Puppet::Error, "Could not write %s: %s" % [file.path, detail]
+ end
+ end
+end