Basing pervasive low-level behaviour changes on the application name isn't a
good idea, but if we're going to do it we need to remember to update the test
when we rename the application.  Further, if we optimize around such low-level
tests (as we did when implementing file-streaming) we need to carry the tests
over into the new data paths.

This commit addresses both of these isues, restoring 0.25.x stand-alone file
serving by adjusting the process-name test in the indirector to recognize
"apply" as standalone (and thus not use http to fetch the files) and by adding
a branch to the file streaming code to do the same when fetching the content.

I am not certain that this change is globally correct; there may be other
related problems that will not be fixed (and may in fact be exacerbated) by
this patch.

Signed-off-by: Markus Roberts <[email protected]>
---
 lib/puppet/file_serving/indirection_hooks.rb |    4 ++--
 lib/puppet/type/file/content.rb              |    2 ++
 lib/puppet/type/file/source.rb               |   10 ++++++++++
 spec/shared_behaviours/file_serving.rb       |   13 ++++++++++++-
 4 files changed, 26 insertions(+), 3 deletions(-)

diff --git a/lib/puppet/file_serving/indirection_hooks.rb 
b/lib/puppet/file_serving/indirection_hooks.rb
index 7e0c179..a85e90e 100644
--- a/lib/puppet/file_serving/indirection_hooks.rb
+++ b/lib/puppet/file_serving/indirection_hooks.rb
@@ -19,8 +19,8 @@ module Puppet::FileServing::IndirectionHooks
     return PROTOCOL_MAP["file"] if request.key =~ /^#{::File::SEPARATOR}/
     return PROTOCOL_MAP["file"] if request.protocol == "file"
 
-    # We're heading over the wire the protocol is 'puppet' and we've got a 
server name or we're not named 'puppet'
-    if request.protocol == "puppet" and (request.server or 
Puppet.settings[:name] != "puppet")
+    # We're heading over the wire the protocol is 'puppet' and we've got a 
server name or we're not named 'apply' or 'puppet'
+    if request.protocol == "puppet" and (request.server or 
!["puppet","apply"].include?(Puppet.settings[:name]))
       return PROTOCOL_MAP["puppet"]
     end
 
diff --git a/lib/puppet/type/file/content.rb b/lib/puppet/type/file/content.rb
index 0d0bb55..f5b65d3 100755
--- a/lib/puppet/type/file/content.rb
+++ b/lib/puppet/type/file/content.rb
@@ -166,6 +166,8 @@ module Puppet
         yield source_or_content
       elsif source_or_content.nil?
         yield read_file_from_filebucket
+      elsif Puppet.settings[:name] == "apply"
+        yield source_or_content.content
       elsif source_or_content.local?
         chunk_file_from_disk(source_or_content) { |chunk| yield chunk }
       else
diff --git a/lib/puppet/type/file/source.rb b/lib/puppet/type/file/source.rb
index 0e7aac7..7d03de2 100755
--- a/lib/puppet/type/file/source.rb
+++ b/lib/puppet/type/file/source.rb
@@ -94,6 +94,16 @@ module Puppet
       metadata && metadata.checksum
     end
 
+    # Look up (if necessary) and return remote content.
+    cached_attr(:content) do
+      raise Puppet::DevError, "No source for content was stored with the 
metadata" unless metadata.source
+
+      unless tmp = Puppet::FileServing::Content.find(metadata.source)
+        fail "Could not find any content at %s" % metadata.source
+      end
+      tmp.content
+    end
+
     # Copy the values from the source to the resource.  Yay.
     def copy_source_values
       devfail "Somehow got asked to copy source values without any metadata" 
unless metadata
diff --git a/spec/shared_behaviours/file_serving.rb 
b/spec/shared_behaviours/file_serving.rb
index c86453a..5f5b2b0 100644
--- a/spec/shared_behaviours/file_serving.rb
+++ b/spec/shared_behaviours/file_serving.rb
@@ -15,7 +15,7 @@ describe "Puppet::FileServing::Files", :shared => true do
     @test_class.find(uri)
   end
 
-  it "should use the rest terminus when the 'puppet' URI scheme is used, no 
host name is present, and the process name is not 'puppet'" do
+  it "should use the rest terminus when the 'puppet' URI scheme is used, no 
host name is present, and the process name is not 'puppet' or 'apply'" do
     uri = "puppet:///fakemod/my/file"
     Puppet.settings.stubs(:value).returns "foo"
     Puppet.settings.stubs(:value).with(:name).returns("puppetd")
@@ -35,6 +35,17 @@ describe "Puppet::FileServing::Files", :shared => true do
     @test_class.find(uri)
   end
 
+  it "should use the file_server terminus when the 'puppet' URI scheme is 
used, no host name is present, and the process name is 'apply'" do
+    uri = "puppet:///fakemod/my/file"
+    Puppet::Node::Environment.stubs(:new).returns(stub("env", :name => 
"testing", :module => nil, :modulepath => []))
+    Puppet.settings.stubs(:value).returns ""
+    Puppet.settings.stubs(:value).with(:name).returns("apply")
+    Puppet.settings.stubs(:value).with(:fileserverconfig).returns("/whatever")
+    @indirection.terminus(:file_server).expects(:find)
+    @indirection.terminus(:file_server).stubs(:authorized?).returns(true)
+    @test_class.find(uri)
+  end
+
   it "should use the file terminus when the 'file' URI scheme is used" do
     uri = "file:///fakemod/my/file"
     @indirection.terminus(:file).expects(:find)
-- 
1.7.0.4

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Developers" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/puppet-dev?hl=en.

Reply via email to