gem_package and --user-install

Hi all,

I can’t seem to figure out a way to use gem_package with --user-install option but install gem to another user’s home directory (local user for example).

gem_package = node[‘my_cookbook’][‘gem_package’]
gems = gem_package[‘gems’]
gem_binary = gem_package[‘gem_binary’]
remove_options = gem_package[‘remove_options’]
install_options = gem_package[‘install_options’]
source = gem_package[‘source’]

gems.each { |gem_name, gem_info|
gem_ver = gem_info[‘ver’]

gem_package “Remove old versions of #{gem_name} gem” do
package_name "#{gem_name}"
action :remove
ignore_failure true
gem_binary gem_binary
options remove_options
not_if %Q[#{gem_binary} list | grep “#{gem_name} (#{gem_ver})”]
end

gem_package “Install specified version of #{gem_name} gem” do
package_name "#{gem_name}"
version "#{gem_ver}"
options "–clear-sources --source #{source} #{install_options}"
action :install
gem_binary gem_binary
not_if %Q[#{gem_binary} list | grep “#{gem_name} .*#{gem_ver}”]
end
}

The gem resource produces the right command but needs to be run as local and not root so files end up in wrong directory.

/usr/bin/gem install gem_name -q --no-rdoc --no-ri -v “3.15.0” --clear-sources --source http://gemserver.chef.orion.altus.bblabs.rim.net/ --user-install

Is an execute block only way to do this using “user” attribute?
For some reason I thought it was common functionality that you can change which user runs a resource in chef. However after checking docs it seem you can only reference :user in guards.

Am I missing something obvious?

-Phil

Philip Oliva
Senior Infrastructure Software Developer
BlackBerry Ltd.
"Fail quick, fail often, recover quickly"
http://ca.linkedin.com/pub/philip-oliva/67/74/10

Correct way is to use Bundler with specified vendor/gems directory.

2015-07-28 0:29 GMT+03:00 Phil Oliva poliva@blackberry.com:

Hi all,

I can’t seem to figure out a way to use gem_package with --user-install
option but install gem to another user’s home directory (local user for
example).

gem_package = node[‘my_cookbook’]['gem_package']

gems = gem_package['gems']

gem_binary = gem_package['gem_binary']

remove_options = gem_package['remove_options']

install_options = gem_package['install_options']

source = gem_package['source']

gems.each { |gem_name, gem_info|

gem_ver = gem_info['ver']

gem_package "Remove old versions of #{gem_name} gem" do

package_name "#{gem_name}"

action :remove

ignore_failure true

gem_binary gem_binary

options remove_options

not_if %Q[#{gem_binary} list | grep "#{gem_name} (#{gem_ver})"]

end

gem_package "Install specified version of #{gem_name} gem" do

package_name "#{gem_name}"

version "#{gem_ver}"

options "--clear-sources --source #{source} #{install_options}"

action :install

gem_binary gem_binary

not_if %Q[#{gem_binary} list | grep "#{gem_name} .*#{gem_ver}"]

end

}

The gem resource produces the right command but needs to be run as local
and not root so files end up in wrong directory.

/usr/bin/gem install gem_name -q --no-rdoc --no-ri -v "3.15.0"
--clear-sources --source http://gemserver.chef.orion.altus.bblabs.rim.net/
--user-install

Is an execute block only way to do this using “user” attribute?

For some reason I thought it was common functionality that you can change
which user runs a resource in chef. However after checking docs it seem you
can only reference :user in guards.

Am I missing something obvious?

-Phil

Philip Oliva

Senior Infrastructure Software Developer

BlackBerry Ltd.

“Fail quick, fail often, recover quickly”

http://ca.linkedin.com/pub/philip-oliva/67/74/10
http://ca.linkedin.com/pub/philip-oliva/67/74/10