diff --git a/lib/vagrant.rb b/lib/vagrant.rb index eba026c51..3ae4c1154 100644 --- a/lib/vagrant.rb +++ b/lib/vagrant.rb @@ -227,6 +227,22 @@ module Vagrant requirements: requirements.join(", "), version: VERSION end + + # This allows plugin developers to access the original environment before + # Vagrant even ran. This is useful when shelling out, especially to other + # Ruby processes. + # + # @return [Hash] + def self.original_env + {}.tap do |h| + ENV.each do |k,v| + if k.start_with?("VAGRANT_OLD_ENV") + key = k.sub(/^VAGRANT_OLD_ENV_/, "") + h[key] = v + end + end + end + end end # Default I18n to load the en locale diff --git a/test/unit/vagrant_test.rb b/test/unit/vagrant_test.rb index ec317a628..06f7489ca 100644 --- a/test/unit/vagrant_test.rb +++ b/test/unit/vagrant_test.rb @@ -98,4 +98,23 @@ describe Vagrant do to raise_error(Vagrant::Errors::VagrantVersionBad) end end + + describe "original_env" do + before do + ENV["VAGRANT_OLD_ENV_foo"] = "test" + ENV["VAGRANT_OLD_ENV_bar"] = "test" + end + + after do + ENV["VAGRANT_OLD_ENV_foo"] = "test" + ENV["VAGRANT_OLD_ENV_bar"] = "test" + end + + it "should return the original environment" do + expect(Vagrant.original_env).to eq( + "foo" => "test", + "bar" => "test", + ) + end + end end