+1

On Oct 16, 2009, at 10:23 AM, Rein Henrichs wrote:

>
> Wrap Puppet::Settings.use in a block that disables noop mode during  
> the
> execution of the block and ensures that noop returns to its original
> value afterwards. This allows internal puppet catalog operations like
> ssl directory creation to occur even when puppet is run in --noop  
> mode.
> This should actually solve a broader class of related bugs.
>
> Signed-off-by: Rein Henrichs <[email protected]>
> ---
> lib/puppet/util/settings.rb           |   10 +++++++++-
> spec/integration/bin/puppetmasterd.rb |   26 ++++++++++++++++++++++++ 
> ++
> spec/unit/util/settings.rb            |   17 +++++++++++++++++
> 3 files changed, 52 insertions(+), 1 deletions(-)
>
> diff --git a/lib/puppet/util/settings.rb b/lib/puppet/util/settings.rb
> index 3e3bc7f..c0e6e02 100644
> --- a/lib/puppet/util/settings.rb
> +++ b/lib/puppet/util/settings.rb
> @@ -157,6 +157,14 @@ class Puppet::Util::Settings
>         set_value(str, value, :cli)
>     end
>
> +    def without_noop
> +        old_noop = value(:noop,:cli)
> +        set_value(:noop, false, :cli)
> +        yield
> +    ensure
> +        set_value(:noop, old_noop, :cli)
> +    end
> +
>     def include?(name)
>         name = name.intern if name.is_a? String
>         @config.include?(name)
> @@ -632,7 +640,7 @@ Generated on #{Time.now}.
>                 return
>             end
>
> -            begin
> +            without_noop do
>                 catalog.host_config = false
>                 catalog.apply do |transaction|
>                     if transaction.any_failed?
> diff --git a/spec/integration/bin/puppetmasterd.rb b/spec/ 
> integration/bin/puppetmasterd.rb
> index b5a3f96..5b3a29f 100755
> --- a/spec/integration/bin/puppetmasterd.rb
> +++ b/spec/integration/bin/puppetmasterd.rb
> @@ -107,4 +107,30 @@ describe "puppetmasterd" do
>     end
>
>     it "should exit with return code 1 after parsing if --parseonly  
> is set and there are errors"
> +
> +    describe "when run for the first time" do
> +        before do
> +            @ssldir = File.join(@dir, 'ssl')
> +            FileUtils.rm_r(@ssldir) if File.exists?(@ssldir)
> +        end
> +
> +        describe "with noop" do
> +            it "should create its ssl directory" do
> +                File.directory?(@ssldir).should be_false
> +                start(' --noop')
> +
> +                sleep 0.5
> +                File.directory?(@ssldir).should be_true
> +            end
> +        end
> +
> +        describe "without noop" do
> +            it "should create its ssl directory" do
> +                File.directory?(@ssldir).should be_false
> +                start
> +                sleep 0.5
> +                File.directory?(@ssldir).should be_true
> +            end
> +        end
> +    end
> end
> diff --git a/spec/unit/util/settings.rb b/spec/unit/util/settings.rb
> index ae8aaac..5b54fa4 100755
> --- a/spec/unit/util/settings.rb
> +++ b/spec/unit/util/settings.rb
> @@ -712,6 +712,7 @@ describe Puppet::Util::Settings do
>         before do
>             @settings = Puppet::Util::Settings.new
>             @settings.stubs(:service_user_available?).returns true
> +            @settings.setdefaults :main, :noop => [false, ""]
>             @settings.setdefaults :main, :maindir => ["/maindir",  
> "a"], :seconddir => ["/seconddir", "a"]
>             @settings.setdefaults :main, :user => ["suser",  
> "doc"], :group => ["sgroup", "doc"]
>             @settings.setdefaults :other, :otherdir => {:default =>  
> "/otherdir", :desc => "a", :owner => "service", :group =>  
> "service", :mode => 0755}
> @@ -993,4 +994,20 @@ describe Puppet::Util::Settings do
>
>         it "should cache the result"
>     end
> +
> +    describe "#without_noop" do
> +        before do
> +            @settings = Puppet::Util::Settings.new
> +            @settings.setdefaults :main, :noop => [true, ""]
> +        end
> +
> +        it "should set noop to false for the duration of the block"  
> do
> +            @settings.without_noop  
> { @settings.value(:noop, :cli).should be_false }
> +        end
> +
> +        it "should ensure that noop is returned to its previous  
> value" do
> +            @settings.without_noop { raise } rescue nil
> +            @settings.value(:noop, :cli).should be_true
> +        end
> +    end
> end
> -- 
> 1.6.4.2
>
>
> >


-- 
Experience is that marvelous thing that enables you recognize a
mistake when you make it again. -- F. P. Jones
---------------------------------------------------------------------
Luke Kanies | http://reductivelabs.com | http://madstop.com


--~--~---------~--~----~------------~-------~--~----~
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