diff --git a/plugins/kernel_v2/config/vm.rb b/plugins/kernel_v2/config/vm.rb index 336db1cd3..c41c02f0c 100644 --- a/plugins/kernel_v2/config/vm.rb +++ b/plugins/kernel_v2/config/vm.rb @@ -469,7 +469,11 @@ module VagrantPlugins def validate(machine) errors = _detected_errors - errors << I18n.t("vagrant.config.vm.box_missing") if !box + + if !box && !machine.provider_options[:box_optional] + errors << I18n.t("vagrant.config.vm.box_missing") + end + errors << I18n.t("vagrant.config.vm.hostname_invalid_characters") if \ @hostname && @hostname !~ /^[a-z0-9][-.a-z0-9]+$/i diff --git a/test/unit/plugins/kernel_v2/config/vm_test.rb b/test/unit/plugins/kernel_v2/config/vm_test.rb index fce61679f..7e1ecb883 100644 --- a/test/unit/plugins/kernel_v2/config/vm_test.rb +++ b/test/unit/plugins/kernel_v2/config/vm_test.rb @@ -28,6 +28,7 @@ describe VagrantPlugins::Kernel_V2::VMConfig do env.stub(root_path: nil) machine.stub(env: env) machine.stub(provider_config: nil) + machine.stub(provider_options: {}) subject.box = "foo" end @@ -44,6 +45,21 @@ describe VagrantPlugins::Kernel_V2::VMConfig do end end + describe "#box" do + it "is required" do + subject.box = nil + subject.finalize! + assert_invalid + end + + it "is not required if the provider says so" do + machine.provider_options[:box_optional] = true + subject.box = nil + subject.finalize! + assert_valid + end + end + context "#box_check_update" do it "defaults to true" do subject.finalize!