summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBryan McLellan <btm@opscode.com>2013-09-17 12:09:42 -0700
committerBryan McLellan <btm@opscode.com>2013-09-17 12:09:42 -0700
commite486187f2a941e9ca6c75435b55eb4e315626d7d (patch)
treea5d9b94054ad43e61de12a17e2fd54a7381ee726
parentcf23ffbdbf69bac796f8a3894826f2d43fddc877 (diff)
parentedc67d17438af54387d4a178463faa16ff86a1b0 (diff)
downloadchef-e486187f2a941e9ca6c75435b55eb4e315626d7d.tar.gz
Merge branch 'CHEF-4248'
-rw-r--r--lib/chef/provider/git.rb1
-rw-r--r--lib/chef/provider/subversion.rb1
-rw-r--r--lib/chef/resource/deploy.rb13
-rw-r--r--lib/chef/resource/scm.rb8
-rw-r--r--spec/unit/provider/deploy_spec.rb14
-rw-r--r--spec/unit/provider/git_spec.rb38
-rw-r--r--spec/unit/resource/deploy_spec.rb14
-rw-r--r--spec/unit/resource/scm_spec.rb13
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")