Skip to content

Commit

Permalink
Detect if user has RVM installed in rvm_shell provider. Closes sous-c…
Browse files Browse the repository at this point in the history
  • Loading branch information
fnichol committed Aug 23, 2011
1 parent e7092bb commit cd67e7f
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 9 deletions.
5 changes: 3 additions & 2 deletions libraries/chef_rvm_string_helpers.rb
Expand Up @@ -48,10 +48,11 @@ def select_gemset(ruby_string)
# Sanitizes a Ruby string so that it's more normalized.
#
# @param [String, #to_s] an RVM Ruby string
# @param [String] a specific user RVM or nil for system-wide
# @return [String] a fully qualified RVM Ruby string
def normalize_ruby_string(ruby_string)
def normalize_ruby_string(ruby_string, user = new_resource.user)
return "system" if ruby_string == "system"
StringCache.fetch(ruby_string, new_resource.user)
StringCache.fetch(ruby_string, user)
end
end
end
Expand Down
42 changes: 35 additions & 7 deletions providers/shell.rb
Expand Up @@ -24,17 +24,20 @@
include Chef::RVM::ShellHelpers

def load_current_resource
@rubie = normalize_ruby_string(select_ruby(new_resource.ruby_string))
@user_rvm = user_installed_rvm? ? new_resource.user : nil
@rubie = normalize_ruby_string(select_ruby(new_resource.ruby_string), @user_rvm)
@gemset = select_gemset(new_resource.ruby_string)
@ruby_string = @gemset.nil? ? @rubie : "#{@rubie}@#{@gemset}"
@rvm_env = ::RVM::ChefUserEnvironment.new(new_resource.user)
@rvm_env = ::RVM::ChefUserEnvironment.new(@user_rvm)
end

action :run do
user_rvm = @user_rvm

# ensure ruby is installed and gemset exists
unless env_exists?(@ruby_string)
e = rvm_environment @ruby_string do
user new_resource.user
user user_rvm
action :nothing
end
e.run_action(:create)
Expand Down Expand Up @@ -64,16 +67,21 @@ def script_wrapper(exec_action)
#{new_resource.code}
CODE

if new_resource.user
user_rvm = user_installed_rvm?
user_home = user_dir
end

s = script new_resource.name do
interpreter "bash"

if new_resource.user
user new_resource.user
if new_resource.environment
environment({ 'USER' => opts[:user], 'HOME' => user_dir }.merge(
if user_rvm && new_resource.environment
environment({ 'USER' => new_resource.user, 'HOME' => user_home }.merge(
new_resource.environment))
else
environment({ 'USER' => opts[:user], 'HOME' => user_dir })
elsif user_rvm
environment({ 'USER' => new_resource.user, 'HOME' => user_home })
end
end

Expand All @@ -89,3 +97,23 @@ def script_wrapper(exec_action)
end
s.run_action(exec_action)
end

##
# Whether or not the user has an isolated RVM installation
#
# @return [true,false] does the user have RVM installed for themselves?
def user_installed_rvm?
return false unless new_resource.user

::File.exists?("#{user_dir}/.rvm/VERSION")
end

##
# Determines the user's home directory
#
# @return [String] the path to the user's home directory
def user_dir
return nil unless new_resource.user

Etc.getpwnam(new_resource.user).dir
end

0 comments on commit cd67e7f

Please sign in to comment.