[Pkg-puppet-devel] [SCM] Puppet packaging for Debian branch, experimental, updated. debian/2.6.8-1-844-g7ec39d5
Daniel Pittman
daniel at puppetlabs.com
Tue May 10 08:19:07 UTC 2011
The following commit has been merged in the experimental branch:
commit 45adc1a1e482be74d2db9f97e7a4d3be5834ccf2
Author: Luke Kanies <luke at puppetlabs.com>
Date: Thu Apr 28 00:44:43 2011 +0200
(#7279) Adding some basic file actions
Add the ability to download a file into the local filebucket using a puppet
URI or from disk. Also, the ability to store into the filebucket.
These provide at least basic UI for moving data around using the filebucket
service, and act as an example of how further work can be done.
Also, update the code to eliminate a couple of redundant checks on arguments,
and add some basic testing around the actions. Mostly only that they exist,
at this point.
Reviewed-By: Daniel Pittman <daniel at puppetlabs.com>
diff --git a/lib/puppet/face/file/download.rb b/lib/puppet/face/file/download.rb
new file mode 100644
index 0000000..f5413d4
--- /dev/null
+++ b/lib/puppet/face/file/download.rb
@@ -0,0 +1,36 @@
+# Download a specified file into the local filebucket.
+Puppet::Face.define(:file, '0.0.1') do
+ action :download do |*args|
+ when_invoked do |sum, options|
+ if sum =~ /^puppet:\/\// # it's a puppet url
+ require 'puppet/file_serving'
+ require 'puppet/file_serving/content'
+ raise "Could not find metadata for #{sum}" unless content = Puppet::FileServing::Content.indirection.find(sum)
+ file = Puppet::FileBucket::File.new(content.content)
+ else
+ tester = Object.new
+ tester.extend(Puppet::Util::Checksums)
+
+ type = tester.sumtype(sum)
+ sumdata = tester.sumdata(sum)
+
+ key = "#{type}/#{sumdata}"
+
+ Puppet::FileBucket::File.indirection.terminus_class = :file
+ if Puppet::FileBucket::File.indirection.find(key)
+ Puppet.info "Content for '#{sum}' already exists"
+ return
+ end
+
+ Puppet::FileBucket::File.indirection.terminus_class = :rest
+ raise "Could not download content for '#{sum}'" unless file = Puppet::FileBucket::File.indirection.find(key)
+ end
+
+
+ Puppet::FileBucket::File.indirection.terminus_class = :file
+ Puppet.notice "Saved #{sum} to filebucket"
+ Puppet::FileBucket::File.indirection.save file
+ return nil
+ end
+ end
+end
diff --git a/lib/puppet/face/file/store.rb b/lib/puppet/face/file/store.rb
new file mode 100644
index 0000000..4c9523b
--- /dev/null
+++ b/lib/puppet/face/file/store.rb
@@ -0,0 +1,12 @@
+# Store a specified file in our filebucket.
+Puppet::Face.define(:file, '0.0.1') do
+ action :store do |*args|
+ when_invoked do |path, options|
+ file = Puppet::FileBucket::File.new(File.read(path))
+
+ Puppet::FileBucket::File.indirection.terminus_class = :file
+ Puppet::FileBucket::File.indirection.save file
+ file.checksum
+ end
+ end
+end
diff --git a/spec/shared_behaviours/an_indirector_face.rb b/spec/shared_behaviours/an_indirector_face.rb
new file mode 100644
index 0000000..cba74b6
--- /dev/null
+++ b/spec/shared_behaviours/an_indirector_face.rb
@@ -0,0 +1,6 @@
+shared_examples_for "an indirector face" do
+ [:find, :search, :save, :destroy, :info].each do |action|
+ it { should be_action action }
+ it { should respond_to action }
+ end
+end
diff --git a/spec/unit/face/file_spec.rb b/spec/unit/face/file_spec.rb
index a362923..c3f0572 100755
--- a/spec/unit/face/file_spec.rb
+++ b/spec/unit/face/file_spec.rb
@@ -3,5 +3,10 @@ require 'spec_helper'
require 'puppet/face'
describe Puppet::Face[:file, '0.0.1'] do
- it "should actually have some tests..."
+ it_should_behave_like "an indirector face"
+
+ [:download, :store].each do |action|
+ it { should be_action action }
+ it { should respond_to action }
+ end
end
--
Puppet packaging for Debian
More information about the Pkg-puppet-devel
mailing list