diff options
author | Bryan McLellan <btm@opscode.com> | 2013-09-17 12:09:42 -0700 |
---|---|---|
committer | Bryan McLellan <btm@opscode.com> | 2013-09-17 12:09:42 -0700 |
commit | e486187f2a941e9ca6c75435b55eb4e315626d7d (patch) | |
tree | a5d9b94054ad43e61de12a17e2fd54a7381ee726 | |
parent | cf23ffbdbf69bac796f8a3894826f2d43fddc877 (diff) | |
parent | edc67d17438af54387d4a178463faa16ff86a1b0 (diff) | |
download | chef-e486187f2a941e9ca6c75435b55eb4e315626d7d.tar.gz |
Merge branch 'CHEF-4248'
-rw-r--r-- | lib/chef/provider/git.rb | 1 | ||||
-rw-r--r-- | lib/chef/provider/subversion.rb | 1 | ||||
-rw-r--r-- | lib/chef/resource/deploy.rb | 13 | ||||
-rw-r--r-- | lib/chef/resource/scm.rb | 8 | ||||
-rw-r--r-- | spec/unit/provider/deploy_spec.rb | 14 | ||||
-rw-r--r-- | spec/unit/provider/git_spec.rb | 38 | ||||
-rw-r--r-- | spec/unit/resource/deploy_spec.rb | 14 | ||||
-rw-r--r-- | spec/unit/resource/scm_spec.rb | 13 |
8 files changed, 93 insertions, 9 deletions
diff --git a/lib/chef/provider/git.rb b/lib/chef/provider/git.rb index 7cda1a873a..b22004eda0 100644 --- a/lib/chef/provider/git.rb +++ b/lib/chef/provider/git.rb @@ -273,6 +273,7 @@ class Chef run_opts[:group] = @new_resource.group if @new_resource.group run_opts[:environment] = {"GIT_SSH" => @new_resource.ssh_wrapper} if @new_resource.ssh_wrapper run_opts[:log_tag] = @new_resource.to_s + run_opts[:timeout] = @new_resource.timeout if @new_resource.timeout run_opts end diff --git a/lib/chef/provider/subversion.rb b/lib/chef/provider/subversion.rb index e1f87b4dd8..3b0c202b10 100644 --- a/lib/chef/provider/subversion.rb +++ b/lib/chef/provider/subversion.rb @@ -156,6 +156,7 @@ class Chef def run_options(run_opts={}) run_opts[:user] = @new_resource.user if @new_resource.user run_opts[:group] = @new_resource.group if @new_resource.group + run_opts[:timeout] = @new_resource.timeout if @new_resource.timeout run_opts end diff --git a/lib/chef/resource/deploy.rb b/lib/chef/resource/deploy.rb index 8b614028bf..60bfbbc81c 100644 --- a/lib/chef/resource/deploy.rb +++ b/lib/chef/resource/deploy.rb @@ -398,6 +398,19 @@ class Chef ) end + # FIXME The Deploy resource may be passed to an SCM provider as its + # resource. The SCM provider knows that SCM resources can specify a + # timeout for SCM operations. The deploy resource must therefore support + # a timeout method, but the timeout it describes is for SCM operations, + # not the overall deployment. This is potentially confusing. + def timeout(arg=nil) + set_or_return( + :timeout, + arg, + :kind_of => Integer + ) + end + end end end diff --git a/lib/chef/resource/scm.rb b/lib/chef/resource/scm.rb index 781e09a2c9..7542ad9952 100644 --- a/lib/chef/resource/scm.rb +++ b/lib/chef/resource/scm.rb @@ -146,6 +146,14 @@ class Chef ) end + def timeout(arg=nil) + set_or_return( + :timeout, + arg, + :kind_of => Integer + ) + end + end end end diff --git a/spec/unit/provider/deploy_spec.rb b/spec/unit/provider/deploy_spec.rb index 56ba50b7f0..0d837f99c3 100644 --- a/spec/unit/provider/deploy_spec.rb +++ b/spec/unit/provider/deploy_spec.rb @@ -43,6 +43,20 @@ describe Chef::Provider::Deploy do @provider.should respond_to(:action_rollback) end + context "when the deploy resource has a timeout attribute" do + let(:ten_seconds) { 10 } + before { @resource.timeout(ten_seconds) } + it "relays the timeout to the scm resource" do + @provider.scm_provider.new_resource.timeout.should == ten_seconds + end + end + + context "when the deploy resource has no timeout attribute" do + it "should not set a timeout on the scm resource" do + @provider.scm_provider.new_resource.timeout.should be_nil + end + end + context "when the deploy_to dir does not exist yet" do before do FileUtils.should_receive(:mkdir_p).with(@resource.deploy_to).ordered diff --git a/spec/unit/provider/git_spec.rb b/spec/unit/provider/git_spec.rb index 763de240cc..2bf55930db 100644 --- a/spec/unit/provider/git_spec.rb +++ b/spec/unit/provider/git_spec.rb @@ -165,15 +165,35 @@ SHAS @provider.should respond_to(:revision_slug) end - it "runs a clone command with default git options" do - @resource.user "deployNinja" - @resource.ssh_wrapper "do_it_this_way.sh" - expected_cmd = "git clone \"git://github.com/opscode/chef.git\" \"/my/deploy/dir\"" - @provider.should_receive(:shell_out!).with(expected_cmd, :user => "deployNinja", - :environment =>{"GIT_SSH"=>"do_it_this_way.sh"}, - :log_tag => "git[web2.0 app]" ) - - @provider.clone + context "with an ssh wrapper" do + let(:deploy_user) { "deployNinja" } + let(:wrapper) { "do_it_this_way.sh" } + let(:expected_cmd) { 'git clone "git://github.com/opscode/chef.git" "/my/deploy/dir"' } + let(:default_options) do + { + :user => deploy_user, + :environment => { "GIT_SSH" => wrapper }, + :log_tag => "git[web2.0 app]" + } + end + before do + @resource.user deploy_user + @resource.ssh_wrapper wrapper + end + context "without a timeout set" do + it "clones a repo with default git options" do + @provider.should_receive(:shell_out!).with(expected_cmd, default_options) + @provider.clone + end + end + context "with a timeout set" do + let (:seconds) { 10 } + before { @resource.timeout(seconds) } + it "clones a repo with amended git options" do + @provider.should_receive(:shell_out!).with(expected_cmd, default_options.merge(:timeout => seconds)) + @provider.clone + end + end end it "runs a clone command with escaped destination" do diff --git a/spec/unit/resource/deploy_spec.rb b/spec/unit/resource/deploy_spec.rb index 98c9fa1581..f2f6893654 100644 --- a/spec/unit/resource/deploy_spec.rb +++ b/spec/unit/resource/deploy_spec.rb @@ -229,6 +229,20 @@ describe Chef::Resource::Deploy do @resource.keep_releases.should == 1 end + describe "when it has a timeout attribute" do + let(:ten_seconds) { 10 } + before { @resource.timeout(ten_seconds) } + it "stores this timeout" do + @resource.timeout.should == ten_seconds + end + end + + describe "when it has no timeout attribute" do + it "should have no default timeout" do + @resource.timeout.should be_nil + end + end + describe "when it has meta application root, revision, user, group, scm provider, repository cache, environment, simlinks and migrate" do before do diff --git a/spec/unit/resource/scm_spec.rb b/spec/unit/resource/scm_spec.rb index 488d335342..d88a4160e7 100644 --- a/spec/unit/resource/scm_spec.rb +++ b/spec/unit/resource/scm_spec.rb @@ -137,6 +137,19 @@ describe Chef::Resource::Scm do @resource.ssh_wrapper.should be_nil end + describe "when it has a timeout attribute" do + let(:ten_seconds) { 10 } + before { @resource.timeout(ten_seconds) } + it "stores this timeout" do + @resource.timeout.should == ten_seconds + end + end + describe "when it has no timeout attribute" do + it "should have no default timeout" do + @resource.timeout.should be_nil + end + end + describe "when it has repository, revision, user, and group" do before do @resource.destination("hell") |