diff options
author | Ben Lindsey <ben.lindsey@gmail.com> | 2012-01-30 23:33:36 -0800 |
---|---|---|
committer | Bryan McLellan <btm@opscode.com> | 2012-06-21 10:54:53 -0700 |
commit | 1fb20592554753db83e2dbdce44341befffcbfab (patch) | |
tree | 391ec3cefd12e8a3892ae6b45dd034a1e6eb7b53 | |
parent | fd3e92da0bfbab5019815b22126f18e1bf43ec42 (diff) | |
download | chef-1fb20592554753db83e2dbdce44341befffcbfab.tar.gz |
implemented a keep_releases configuration setting for Chef::Provider::Deploy [CHEF-2374]
-rw-r--r-- | chef/lib/chef/provider/deploy.rb | 3 | ||||
-rw-r--r-- | chef/lib/chef/resource/deploy.rb | 9 | ||||
-rw-r--r-- | chef/spec/unit/provider/deploy_spec.rb | 11 | ||||
-rw-r--r-- | chef/spec/unit/resource/deploy_spec.rb | 14 |
4 files changed, 36 insertions, 1 deletions
diff --git a/chef/lib/chef/provider/deploy.rb b/chef/lib/chef/provider/deploy.rb index 9d24a4dbd0..16ebd80e48 100644 --- a/chef/lib/chef/provider/deploy.rb +++ b/chef/lib/chef/provider/deploy.rb @@ -194,7 +194,8 @@ class Chef end def cleanup! - all_releases[0..-6].each do |old_release| + chop = -1 - @new_resource.keep_releases + all_releases[0..chop].each do |old_release| Chef::Log.info "#{@new_resource} removing old release #{old_release}" FileUtils.rm_rf(old_release) release_deleted(old_release) diff --git a/chef/lib/chef/resource/deploy.rb b/chef/lib/chef/resource/deploy.rb index 0993c91e6b..037c172183 100644 --- a/chef/lib/chef/resource/deploy.rb +++ b/chef/lib/chef/resource/deploy.rb @@ -75,6 +75,7 @@ class Chef @provider = Chef::Provider::Deploy::Timestamped @allowed_actions.push(:force_deploy, :deploy, :rollback) @additional_remotes = Hash[] + @keep_releases = 5 end # where the checked out/cloned code goes @@ -295,6 +296,14 @@ class Chef ) end + # The number of old release directories to keep around after cleanup + def keep_releases(arg=nil) + [set_or_return( + :keep_releases, + arg, + :kind_of => [ Integer ]), 1].max + end + # An array of paths, relative to your app's root, to be purged from a # SCM clone/checkout before symlinking. Use this to get rid of files and # directories you want to be shared between releases. diff --git a/chef/spec/unit/provider/deploy_spec.rb b/chef/spec/unit/provider/deploy_spec.rb index c33716e397..690e1b5454 100644 --- a/chef/spec/unit/provider/deploy_spec.rb +++ b/chef/spec/unit/provider/deploy_spec.rb @@ -382,6 +382,17 @@ describe Chef::Provider::Deploy do @provider.cleanup! end + it "removes all but a certain number of releases when the resource has a keep_releases" do + @resource.keep_releases 7 + all_releases = ["/my/deploy/dir/20040815162342", "/my/deploy/dir/20040700000000", + "/my/deploy/dir/20040600000000", "/my/deploy/dir/20040500000000", + "/my/deploy/dir/20040400000000", "/my/deploy/dir/20040300000000", + "/my/deploy/dir/20040200000000", "/my/deploy/dir/20040100000000"].sort! + @provider.stub!(:all_releases).and_return(all_releases) + FileUtils.should_receive(:rm_rf).with("/my/deploy/dir/20040100000000") + @provider.cleanup! + end + it "fires a callback for :release_deleted when deleting an old release" do all_releases = ["/my/deploy/dir/20040815162342", "/my/deploy/dir/20040700000000", "/my/deploy/dir/20040600000000", "/my/deploy/dir/20040500000000", diff --git a/chef/spec/unit/resource/deploy_spec.rb b/chef/spec/unit/resource/deploy_spec.rb index c4ff963ad7..7809a4a233 100644 --- a/chef/spec/unit/resource/deploy_spec.rb +++ b/chef/spec/unit/resource/deploy_spec.rb @@ -215,4 +215,18 @@ describe Chef::Resource::Deploy do @resource.provider.should == Chef::Provider::Deploy::Revision end + it "defaults keep_releases to 5" do + @resource.keep_releases.should == 5 + end + + it "allows keep_releases to be set via integer" do + @resource.keep_releases 10 + @resource.keep_releases.should == 10 + end + + it "enforces a minimum keep_releases of 1" do + @resource.keep_releases 0 + @resource.keep_releases.should == 1 + end + end |