From 9fbb69f9d4de0e618954bc18b7501e300317022a Mon Sep 17 00:00:00 2001 From: Luke Kanies Date: Wed, 24 Mar 2010 00:04:47 -0700 Subject: Adding support for only using cached catalogs This basically allows a sysadmin to control when a client will compile a new catalog - with this option enabled, the client will use the cached catalog as long as it has one, only recompiling when run with the option disabled. Signed-off-by: Luke Kanies --- lib/puppet/configurer.rb | 2 +- lib/puppet/defaults.rb | 4 ++++ spec/unit/configurer.rb | 22 +++++++++++++++++++++- 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 -- cgit