Add Env.with_clean_env for resetting the Ruby and Rubygems environment
This commit is contained in:
parent
1c06da04e6
commit
f86189a2fe
|
@ -2,6 +2,7 @@ module Vagrant
|
|||
module Util
|
||||
autoload :Busy, 'vagrant/util/busy'
|
||||
autoload :Counter, 'vagrant/util/counter'
|
||||
autoload :Env, 'vagrant/util/env'
|
||||
autoload :HashWithIndifferentAccess, 'vagrant/util/hash_with_indifferent_access'
|
||||
autoload :Platform, 'vagrant/util/platform'
|
||||
autoload :Retryable, 'vagrant/util/retryable'
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
module Vagrant
|
||||
module Util
|
||||
class Env
|
||||
#
|
||||
# Execute the given command, removing any Ruby-specific environment
|
||||
# variables. This is an "enhanced" version of `Bundler.with_clean_env`,
|
||||
# which only removes Bundler-specific values. We need to remove all
|
||||
# values, specifically:
|
||||
#
|
||||
# - _ORIGINAL_GEM_PATH
|
||||
# - GEM_PATH
|
||||
# - GEM_HOME
|
||||
# - GEM_ROOT
|
||||
# - BUNDLE_BIN_PATH
|
||||
# - BUNDLE_GEMFILE
|
||||
# - RUBYLIB
|
||||
# - RUBYOPT
|
||||
# - RUBY_ENGINE
|
||||
# - RUBY_ROOT
|
||||
# - RUBY_VERSION
|
||||
#
|
||||
# This will escape Vagrant's environment entirely, which is required if
|
||||
# calling an executable that lives in another Ruby environment. The
|
||||
# original environment restored at the end of this call.
|
||||
#
|
||||
# @param [Proc] block
|
||||
# the block to execute with the cleaned environment
|
||||
#
|
||||
def with_clean_env(&block)
|
||||
original = ENV.to_hash
|
||||
|
||||
ENV.delete('_ORIGINAL_GEM_PATH')
|
||||
ENV.delete_if { |k,_| k.start_with?('BUNDLE_') }
|
||||
ENV.delete_if { |k,_| k.start_with?('GEM_') }
|
||||
ENV.delete_if { |k,_| k.start_with?('RUBY') }
|
||||
|
||||
yield
|
||||
ensure
|
||||
ENV.replace(original.to_hash)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -110,7 +110,7 @@ module VagrantPlugins
|
|||
# Knife is not part of the current Vagrant bundle, so it needs to run
|
||||
# in the context of the system.
|
||||
Vagrant.global_lock do
|
||||
Bundler.with_clean_env do
|
||||
Vagrant::Util::Env.with_clean_env do
|
||||
command = ["knife", deletable, "delete", "--yes", node_name]
|
||||
r = Vagrant::Util::Subprocess.execute(*command)
|
||||
if r.exit_code != 0
|
||||
|
|
Loading…
Reference in New Issue