diff --git a/lib/vagrant/vagrantfile.rb b/lib/vagrant/vagrantfile.rb index 3f3c8c826..1bf64750e 100644 --- a/lib/vagrant/vagrantfile.rb +++ b/lib/vagrant/vagrantfile.rb @@ -1,4 +1,5 @@ require "vagrant/util/template_renderer" +require "log4r" module Vagrant # This class provides a way to load and access the contents @@ -26,6 +27,7 @@ module Vagrant @keys = keys @loader = loader @config, _ = loader.load(keys) + @logger = Log4r::Logger.new("vagrant::vagrantfile") end # Returns a {Machine} for the given name and provider that @@ -195,12 +197,14 @@ module Vagrant box = boxes.find(config.vm.box, box_formats, config.vm.box_version) if box box_vagrantfile = find_vagrantfile(box.directory) - if box_vagrantfile + if box_vagrantfile && !config.vm.ignore_box_vagrantfile box_config_key = "#{boxes.object_id}_#{box.name}_#{box.provider}".to_sym @loader.set(box_config_key, box_vagrantfile) local_keys.unshift(box_config_key) config, config_warnings, config_errors = @loader.load(local_keys) + elsif box_vagrantfile && config.vm.ignore_box_vagrantfile + @logger.warn("Ignoring #{box.name} provided Vagrantfile inside box") end end end diff --git a/plugins/kernel_v2/config/vm.rb b/plugins/kernel_v2/config/vm.rb index 2214f42a5..6ed45729c 100644 --- a/plugins/kernel_v2/config/vm.rb +++ b/plugins/kernel_v2/config/vm.rb @@ -22,6 +22,7 @@ module VagrantPlugins attr_accessor :base_mac attr_accessor :boot_timeout attr_accessor :box + attr_accessor :ignore_box_vagrantfile attr_accessor :box_check_update attr_accessor :box_url attr_accessor :box_server_url @@ -51,6 +52,7 @@ module VagrantPlugins @base_mac = UNSET_VALUE @boot_timeout = UNSET_VALUE @box = UNSET_VALUE + @ignore_box_vagrantfile = UNSET_VALUE @box_check_update = UNSET_VALUE @box_download_ca_cert = UNSET_VALUE @box_download_ca_path = UNSET_VALUE @@ -377,6 +379,7 @@ module VagrantPlugins @base_mac = nil if @base_mac == UNSET_VALUE @boot_timeout = 300 if @boot_timeout == UNSET_VALUE @box = nil if @box == UNSET_VALUE + @ignore_box_vagrantfile = false if @ignore_box_vagrantfile == UNSET_VALUE if @box_check_update == UNSET_VALUE @box_check_update = !present?(ENV["VAGRANT_BOX_UPDATE_CHECK_DISABLE"]) diff --git a/test/unit/vagrant/vagrantfile_test.rb b/test/unit/vagrant/vagrantfile_test.rb index f901413f4..39e783db7 100644 --- a/test/unit/vagrant/vagrantfile_test.rb +++ b/test/unit/vagrant/vagrantfile_test.rb @@ -208,6 +208,31 @@ describe Vagrant::Vagrantfile do expect(box.name).to eq("base") end + it "does not configure box configuration if set to ignore" do + register_provider("foo") + + configure do |config| + config.vm.box = "base" + config.vm.ignore_box_vagrantfile = true + end + + iso_env.box3("base", "1.0", :foo, vagrantfile: <<-VF) + Vagrant.configure("2") do |config| + config.ssh.port = 123 + config.vm.hostname = "hello" + end + VF + + results = subject.machine_config(:default, :foo, boxes) + box = results[:box] + config = results[:config] + expect(config.vm.box).to eq("base") + expect(config.ssh.port).to eq(nil) + expect(config.vm.hostname).to eq(nil) + expect(box).to_not be_nil + expect(box.name).to eq("base") + end + it "configures with the proper box version" do register_provider("foo") diff --git a/website/source/docs/vagrantfile/machine_settings.html.md b/website/source/docs/vagrantfile/machine_settings.html.md index 7d6fe9a19..2854e5c40 100644 --- a/website/source/docs/vagrantfile/machine_settings.html.md +++ b/website/source/docs/vagrantfile/machine_settings.html.md @@ -138,6 +138,11 @@ on the guest with the configured hostname.
+`config.vm.ignore_box_vagrantfile` - If true, Vagrant will not load the the +settings found inside a boxes Vagrantfile, if present. Defaults to `false`. + +
+ `config.vm.network` - Configures [networks](/docs/networking/) on the machine. Please see the networking page for more information.