diff --git a/plugins/kernel_v2/config/vm.rb b/plugins/kernel_v2/config/vm.rb index 4b35495aa..40f287529 100644 --- a/plugins/kernel_v2/config/vm.rb +++ b/plugins/kernel_v2/config/vm.rb @@ -371,8 +371,14 @@ module VagrantPlugins # Load it up config = config_class.new - blocks.each do |b| - b.call(config, Vagrant::Config::V2::DummyConfig.new) + begin + blocks.each do |b| + b.call(config, Vagrant::Config::V2::DummyConfig.new) + end + rescue Exception => e + raise Vagrant::Errors::VagrantfileLoadError, + path: "", + message: e.message end config.finalize! diff --git a/test/unit/plugins/kernel_v2/config/vm_test.rb b/test/unit/plugins/kernel_v2/config/vm_test.rb index f12d94f22..9c2d7b852 100644 --- a/test/unit/plugins/kernel_v2/config/vm_test.rb +++ b/test/unit/plugins/kernel_v2/config/vm_test.rb @@ -114,6 +114,34 @@ describe VagrantPlugins::Kernel_V2::VMConfig do end end + describe "#provider and #get_provider_config" do + it "compiles the configurations for a provider" do + subject.provider "virtualbox" do |vb| + vb.gui = true + end + + subject.provider "virtualbox" do |vb| + vb.name = "foo" + end + + subject.finalize! + + config = subject.get_provider_config(:virtualbox) + expect(config.name).to eq("foo") + expect(config.gui).to be_true + end + + it "raises an exception if there is a problem loading" do + subject.provider "virtualbox" do |vb| + # Purposeful bad variable + vm.foo = "bar" + end + + expect { subject.finalize! }. + to raise_error(Vagrant::Errors::VagrantfileLoadError) + end + end + describe "#provision" do it "stores the provisioners" do subject.provision("shell", inline: "foo")