diff options
| -rw-r--r-- | lib/puppet/face/file/download.rb | 36 | ||||
| -rw-r--r-- | lib/puppet/face/file/store.rb | 12 | ||||
| -rw-r--r-- | spec/shared_behaviours/an_indirector_face.rb | 6 | ||||
| -rwxr-xr-x | spec/unit/face/file_spec.rb | 7 |
4 files changed, 60 insertions, 1 deletions
diff --git a/lib/puppet/face/file/download.rb b/lib/puppet/face/file/download.rb new file mode 100644 index 000000000..f5413d493 --- /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 000000000..4c9523b6c --- /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 000000000..cba74b696 --- /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 a362923e3..c3f05720f 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 |
