summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/puppet/configurer.rb2
-rw-r--r--lib/puppet/defaults.rb4
-rwxr-xr-xspec/unit/configurer.rb22
3 files changed, 26 insertions, 2 deletions
diff --git a/lib/puppet/configurer.rb b/lib/puppet/configurer.rb
index 3b4f9ec90..797d93456 100644
--- a/lib/puppet/configurer.rb
+++ b/lib/puppet/configurer.rb
@@ -100,7 +100,7 @@ class Puppet::Configurer
fact_options = facts_for_uploading()
# First try it with no cache, then with the cache.
- unless result = retrieve_new_catalog(fact_options)
+ unless (Puppet[:use_cached_catalog] and result = retrieve_catalog_from_cache(fact_options)) or result = retrieve_new_catalog(fact_options)
if ! Puppet[:usecacheonfailure]
Puppet.warning "Not using cache on failed catalog"
return nil
diff --git a/lib/puppet/defaults.rb b/lib/puppet/defaults.rb
index 2f397f495..c67e9efd7 100644
--- a/lib/puppet/defaults.rb
+++ b/lib/puppet/defaults.rb
@@ -561,6 +561,10 @@ module Puppet
new configurations, where you want to fix the broken configuration
rather than reverting to a known-good one."
],
+ :use_cached_catalog => [false,
+ "Whether to only use the cached catalog rather than compiling a new catalog
+ on every run. Puppet can be run with this enabled by default and then selectively
+ disabled when a recompile is desired."],
:ignorecache => [false,
"Ignore cache and always recompile the configuration. This is
useful for testing new configurations, where the local cache may in
diff --git a/spec/unit/configurer.rb b/spec/unit/configurer.rb
index 48a197a37..6744f885d 100755
--- a/spec/unit/configurer.rb
+++ b/spec/unit/configurer.rb
@@ -292,6 +292,26 @@ describe Puppet::Configurer, "when retrieving a catalog" do
@agent.stubs(:convert_catalog).returns @catalog
end
+ describe "and configured to only retrieve a catalog from the cache" do
+ before do
+ Puppet.settings[:use_cached_catalog] = true
+ end
+
+ it "should first look in the cache for a catalog" do
+ Puppet::Resource::Catalog.expects(:find).with { |name, options| options[:ignore_terminus] == true }.returns @catalog
+ Puppet::Resource::Catalog.expects(:find).with { |name, options| options[:ignore_cache] == true }.never
+
+ @agent.retrieve_catalog.should == @catalog
+ end
+
+ it "should compile a new catalog if none is found in the cache" do
+ Puppet::Resource::Catalog.expects(:find).with { |name, options| options[:ignore_terminus] == true }.returns nil
+ Puppet::Resource::Catalog.expects(:find).with { |name, options| options[:ignore_cache] == true }.returns @catalog
+
+ @agent.retrieve_catalog.should == @catalog
+ end
+ end
+
it "should use the Catalog class to get its catalog" do
Puppet::Resource::Catalog.expects(:find).returns @catalog
@@ -300,7 +320,7 @@ describe Puppet::Configurer, "when retrieving a catalog" do
it "should use its certname to retrieve the catalog" do
Facter.stubs(:value).returns "eh"
- Puppet.expects(:[]).with(:certname).returns "myhost.domain.com"
+ Puppet.settings[:certname] = "myhost.domain.com"
Puppet::Resource::Catalog.expects(:find).with { |name, options| name == "myhost.domain.com" }.returns @catalog
@agent.retrieve_catalog