summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Pereira <pereira.m@gmail.com>2016-05-05 17:00:08 -0400
committerMichael Pereira <pereira.m@gmail.com>2016-05-05 21:22:27 -0400
commit0717a698b941335ed49e31044d44dc874b1bf107 (patch)
tree44895a0f261364efba6270c4f8cc62bb084edb84
parent4634f7769c6d5acc488fd149680d4c3eab63276c (diff)
downloadchef-0717a698b941335ed49e31044d44dc874b1bf107.tar.gz
Handle numeric id for the user value in the git resource
-rw-r--r--lib/chef/provider/git.rb11
-rw-r--r--spec/unit/provider/git_spec.rb36
2 files changed, 46 insertions, 1 deletions
diff --git a/lib/chef/provider/git.rb b/lib/chef/provider/git.rb
index 82f5ca2ba5..427f0f5882 100644
--- a/lib/chef/provider/git.rb
+++ b/lib/chef/provider/git.rb
@@ -301,7 +301,16 @@ class Chef
# user who is executing `git` not the user running Chef.
env["HOME"] = begin
require "etc"
- Etc.getpwnam(@new_resource.user).dir
+ case @new_resource.user
+ when String
+ Etc.getpwnam(@new_resource.user).dir
+ when Integer
+ Etc.getpwuid(@new_resource.user).dir
+ else
+ Chef::Log.error("The `owneuser` parameter of the #@new_resource resource is set to an invalid value (#{new_resource.owner.inspect})")
+ raise ArgumentError, "cannot resolve #{new_resource.owner.inspect} to uid, owner must be a string or integer"
+ end
+
rescue ArgumentError # user not found
raise Chef::Exceptions::User, "Could not determine HOME for specified user '#{@new_resource.user}' for resource '#{@new_resource.name}'"
end
diff --git a/spec/unit/provider/git_spec.rb b/spec/unit/provider/git_spec.rb
index 97f04a5a77..48d710450b 100644
--- a/spec/unit/provider/git_spec.rb
+++ b/spec/unit/provider/git_spec.rb
@@ -267,6 +267,42 @@ SHAS
end
end
+ context "with a user id" do
+ let(:deploy_user) { 123 }
+ let(:expected_cmd) { 'git clone "git://github.com/opscode/chef.git" "/my/deploy/dir"' }
+ let(:default_options) do
+ {
+ :user => 123,
+ :environment => { "HOME" => "/home/deployNinja" },
+ :log_tag => "git[web2.0 app]",
+ }
+ end
+ before do
+ @resource.user deploy_user
+ allow(Etc).to receive(:getpwuid).and_return(double("Struct::Passwd", :name => @resource.user, :dir => "/home/deployNinja"))
+ end
+ context "with a specific home" do
+ let (:override_home) do
+ { "HOME" => "/home/masterNinja" }
+ end
+ let(:overrided_options) do
+ {
+ :user => 123,
+ :environment => { "HOME" => "/home/masterNinja" },
+ :log_tag => "git[web2.0 app]",
+ }
+ end
+ before do
+ @resource.environment(override_home)
+ end
+ before { @resource.environment(override_home) }
+ it "clones a repo with amended git options with specific home" do
+ expect(@provider).to receive(:shell_out!).with(expected_cmd, overrided_options)
+ @provider.clone
+ end
+ end
+ end
+
it "runs a clone command with escaped destination" do
@resource.user "deployNinja"
allow(Etc).to receive(:getpwnam).and_return(double("Struct::Passwd", :name => @resource.user, :dir => "/home/deployNinja"))