From d8d5a66fa587a93d1a7b2e0430237176193386c7 Mon Sep 17 00:00:00 2001 From: Seth Vargo Date: Thu, 9 Jul 2015 12:34:04 -0600 Subject: [PATCH] Add a function to get to the "original" environment with Vagrant This function only works when used with the official Vagrant installer. --- lib/vagrant.rb | 16 ++++++++++++++++ test/unit/vagrant_test.rb | 19 +++++++++++++++++++ 2 files changed, 35 insertions(+) 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