[Pkg-puppet-devel] [SCM] Puppet packaging for Debian branch, upstream, updated. 0.25.5-639-g8f94f35

test branch puppet-dev at googlegroups.com
Wed Jul 14 10:32:34 UTC 2010


The following commit has been merged in the upstream branch:
commit 2a60e1e5eef42a1a0f11574d69f3c90be22e52ca
Author: Luke Kanies <luke at reductivelabs.com>
Date:   Thu Mar 25 14:55:51 2010 -0700

    Adding :catalog_terminus setting
    
    This will rarely be used, but it enables even more architectural
    flexibility, such as precompiling catalogs and storing them in memcached
    or equivalent.  With this setup, a single host can probably serve all
    catalogs and you would then just have as many compiling hosts as
    needed.
    
    Signed-off-by: Luke Kanies <luke at reductivelabs.com>

diff --git a/lib/puppet/application/agent.rb b/lib/puppet/application/agent.rb
index ba20347..985d87d 100644
--- a/lib/puppet/application/agent.rb
+++ b/lib/puppet/application/agent.rb
@@ -245,7 +245,10 @@ Puppet::Application.new(:agent) do
 
         Puppet::Transaction::Report.terminus_class = :rest
 
-        Puppet::Resource::Catalog.terminus_class = :rest
+        # Override the default; puppetd needs this, usually.
+        # You can still override this on the command-line with, e.g., :compiler.
+        Puppet[:catalog_terminus] = :rest
+
         Puppet::Resource::Catalog.cache_class = :yaml
 
         Puppet::Node::Facts.terminus_class = :facter
diff --git a/lib/puppet/configurer.rb b/lib/puppet/configurer.rb
index 797d934..0ff87e6 100644
--- a/lib/puppet/configurer.rb
+++ b/lib/puppet/configurer.rb
@@ -94,10 +94,14 @@ class Puppet::Configurer
 
     # Get the remote catalog, yo.  Returns nil if no catalog can be found.
     def retrieve_catalog
-        # This is a bit complicated.  We need the serialized and escaped facts,
-        # and we need to know which format they're encoded in.  Thus, we
-        # get a hash with both of these pieces of information.
-        fact_options = facts_for_uploading()
+        if Puppet::Resource::Catalog.indirection.terminus_class == :rest
+            # This is a bit complicated.  We need the serialized and escaped facts,
+            # and we need to know which format they're encoded in.  Thus, we
+            # get a hash with both of these pieces of information.
+            fact_options = facts_for_uploading()
+        else
+            fact_options = {}
+        end
 
         # First try it with no cache, then with the cache.
         unless (Puppet[:use_cached_catalog] and result = retrieve_catalog_from_cache(fact_options)) or result = retrieve_new_catalog(fact_options)
diff --git a/lib/puppet/defaults.rb b/lib/puppet/defaults.rb
index c67e9ef..701b785 100644
--- a/lib/puppet/defaults.rb
+++ b/lib/puppet/defaults.rb
@@ -149,6 +149,8 @@ module Puppet
             huge numbers that can then not be fed back into the system.  This is a hackish way to fail in a
             slightly more useful way when that happens."],
         :node_terminus => ["plain", "Where to find information about nodes."],
+        :catalog_terminus => ["compiler", "Where to get node catalogs.  This is useful to change if, for instance,
+            you'd like to pre-compile catalogs and store them in memcached or some other easily-accessed store."],
         :httplog => { :default => "$logdir/http.log",
             :owner => "root",
             :mode => 0640,
diff --git a/lib/puppet/resource/catalog.rb b/lib/puppet/resource/catalog.rb
index e63c00c..0489204 100644
--- a/lib/puppet/resource/catalog.rb
+++ b/lib/puppet/resource/catalog.rb
@@ -17,7 +17,7 @@ class Puppet::Resource::Catalog < Puppet::SimpleGraph
     class DuplicateResourceError < Puppet::Error; end
 
     extend Puppet::Indirector
-    indirects :catalog, :terminus_class => :compiler
+    indirects :catalog, :terminus_setting => :catalog_terminus
 
     include Puppet::Util::Tagging
     extend Puppet::Util::Pson
diff --git a/spec/unit/application/agent.rb b/spec/unit/application/agent.rb
index 782dcfc..9c8aa11 100755
--- a/spec/unit/application/agent.rb
+++ b/spec/unit/application/agent.rb
@@ -327,9 +327,8 @@ describe Puppet::Application[:agent] do
             @puppetd.run_setup
         end
 
-        it "should tell the catalog handler to use REST" do
-            Puppet::Resource::Catalog.expects(:terminus_class=).with(:rest)
-
+        it "should change the catalog_terminus setting to 'rest'" do
+            Puppet.expects(:[]=).with(:catalog_terminus, :rest)
             @puppetd.run_setup
         end
 
diff --git a/spec/unit/configurer.rb b/spec/unit/configurer.rb
index 6744f88..94ac452 100755
--- a/spec/unit/configurer.rb
+++ b/spec/unit/configurer.rb
@@ -289,6 +289,9 @@ describe Puppet::Configurer, "when retrieving a catalog" do
 
         @catalog = Puppet::Resource::Catalog.new
 
+        # this is the default when using a Configurer instance
+        Puppet::Resource::Catalog.indirection.stubs(:terminus_class).returns :rest
+
         @agent.stubs(:convert_catalog).returns @catalog
     end
 
@@ -312,6 +315,28 @@ describe Puppet::Configurer, "when retrieving a catalog" do
         end
     end
 
+    describe "when not using a REST terminus for catalogs" do
+        it "should not pass any facts when retrieving the catalog" do
+            @agent.expects(:facts_for_uploading).never
+            Puppet::Resource::Catalog.expects(:find).with { |name, options|
+                options[:facts].nil?
+            }.returns @catalog
+
+            @agent.retrieve_catalog
+        end
+    end
+
+    describe "when using a REST terminus for catalogs" do
+        it "should pass the prepared facts and the facts format as arguments when retrieving the catalog" do
+            @agent.expects(:facts_for_uploading).returns(:facts => "myfacts", :facts_format => :foo)
+            Puppet::Resource::Catalog.expects(:find).with { |name, options|
+                options[:facts] == "myfacts" and options[:facts_format] == :foo
+            }.returns @catalog
+
+            @agent.retrieve_catalog
+        end
+    end
+
     it "should use the Catalog class to get its catalog" do
         Puppet::Resource::Catalog.expects(:find).returns @catalog
 
@@ -326,13 +351,6 @@ describe Puppet::Configurer, "when retrieving a catalog" do
         @agent.retrieve_catalog
     end
 
-    it "should pass the prepared facts and the facts format as arguments when retrieving the catalog" do
-        @agent.expects(:facts_for_uploading).returns(:facts => "myfacts", :facts_format => :foo)
-        Puppet::Resource::Catalog.expects(:find).with { |name, options| options[:facts] == "myfacts" and options[:facts_format] == :foo }.returns @catalog
-
-        @agent.retrieve_catalog
-    end
-
     it "should default to returning a catalog retrieved directly from the server, skipping the cache" do
         Puppet::Resource::Catalog.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns @catalog
 
diff --git a/spec/unit/resource/catalog.rb b/spec/unit/resource/catalog.rb
index 6c6af24..853bf9b 100755
--- a/spec/unit/resource/catalog.rb
+++ b/spec/unit/resource/catalog.rb
@@ -830,8 +830,14 @@ describe Puppet::Resource::Catalog, "when compiling" do
             Puppet::Resource::Catalog.find(:myconfig)
         end
 
-        it "should default to the 'compiler' terminus" do
-            Puppet::Resource::Catalog.indirection.terminus_class.should == :compiler
+        it "should use the value of the 'catalog_terminus' setting to determine its terminus class" do
+            Puppet.settings[:catalog_terminus] = "rest"
+            Puppet::Resource::Catalog.indirection.terminus_class.should == :rest
+        end
+
+        it "should allow the terminus class to be set manually" do
+            Puppet::Resource::Catalog.indirection.terminus_class = :rest
+            Puppet::Resource::Catalog.indirection.terminus_class.should == :rest
         end
 
         after do

-- 
Puppet packaging for Debian



More information about the Pkg-puppet-devel mailing list