diff --git a/lib/puppet/provider/rvm_gem/gem.rb b/lib/puppet/provider/rvm_gem/gem.rb index 0b44be55..dde040a9 100644 --- a/lib/puppet/provider/rvm_gem/gem.rb +++ b/lib/puppet/provider/rvm_gem/gem.rb @@ -106,7 +106,24 @@ def install(useversion = true) command << "--" << resource[:withopts] end - output = execute(command) + environment = {} + if envlist = resource[:environment] + envlist = [envlist] unless envlist.is_a? Array + envlist.each do |setting| + if setting =~ /^(\w+)=((.|\n)+)$/ + env_name = $1 + value = $2 + if environment.include?(env_name) || environment.include?(env_name.to_sym) + warning "Overriding environment setting '#{env_name}' with '#{value}'" + end + environment[env_name] = value + else + warning "Cannot understand environment setting #{setting.inspect}" + end + end + end + + output = execute(command, :custom_environment => environment) # Apparently some stupid gem versions don't exit non-0 on failure self.fail "Could not install: #{output.chomp}" if output.include?("ERROR") end diff --git a/lib/puppet/type/rvm_gem.rb b/lib/puppet/type/rvm_gem.rb index be864aa1..d527a90a 100644 --- a/lib/puppet/type/rvm_gem.rb +++ b/lib/puppet/type/rvm_gem.rb @@ -145,4 +145,20 @@ def retrieve isnamevar end + newparam(:environment) do + desc "Any additional environment variables you want to set for a + command. Note that if you use this to set PATH, it will override + the `path` attribute. Multiple environment variables should be + specified as an array." + + validate do |values| + values = [values] unless values.is_a? Array + values.each do |value| + unless value =~ /\w+=/ + raise ArgumentError, "Invalid environment setting '#{value}'" + end + end + end + end + end