Merge pull request #10911 from chrisroberts/f-plugin-loading
Support loading machine configuration without provider validation
This commit is contained in:
commit
7c6b2963c3
|
@ -955,7 +955,7 @@ module Vagrant
|
|||
provider = guess_provider
|
||||
vagrantfile.machine_names.each do |mname|
|
||||
ldp = @local_data_path.join("machines/#{mname}/#{provider}") if @local_data_path
|
||||
plugins << vagrantfile.machine_config(mname, guess_provider, boxes, ldp)[:config]
|
||||
plugins << vagrantfile.machine_config(mname, guess_provider, boxes, ldp, false)[:config]
|
||||
end
|
||||
result = plugins.reverse.inject(Vagrant::Util::HashWithIndifferentAccess.new) do |memo, val|
|
||||
Vagrant::Util::DeepMerge.deep_merge(memo, val.vagrant.plugins)
|
||||
|
|
|
@ -112,7 +112,7 @@ module Vagrant
|
|||
# @param [Pathname] data_path Machine data path
|
||||
# @return [Hash<Symbol, Object>] Various configuration parameters for a
|
||||
# machine. See the main documentation body for more info.
|
||||
def machine_config(name, provider, boxes, data_path=nil)
|
||||
def machine_config(name, provider, boxes, data_path=nil, validate_provider=true)
|
||||
keys = @keys.dup
|
||||
|
||||
sub_machine = @config.vm.defined_vms[name]
|
||||
|
@ -127,7 +127,7 @@ module Vagrant
|
|||
box_formats = nil
|
||||
if provider != nil
|
||||
provider_plugin = Vagrant.plugin("2").manager.providers[provider]
|
||||
if !provider_plugin
|
||||
if !provider_plugin && validate_provider
|
||||
providers = Vagrant.plugin("2").manager.providers.to_hash.keys
|
||||
if providers
|
||||
providers_str = providers.join(', ')
|
||||
|
@ -145,18 +145,22 @@ module Vagrant
|
|||
machine: name, provider: provider, providers: providers_str
|
||||
end
|
||||
|
||||
provider_cls = provider_plugin[0]
|
||||
provider_options = provider_plugin[1]
|
||||
box_formats = provider_options[:box_format] || provider
|
||||
if validate_provider
|
||||
provider_cls = provider_plugin[0]
|
||||
provider_options = provider_plugin[1]
|
||||
box_formats = provider_options[:box_format] || provider
|
||||
|
||||
# Test if the provider is usable or not
|
||||
begin
|
||||
provider_cls.usable?(true)
|
||||
rescue Errors::VagrantError => e
|
||||
raise Errors::ProviderNotUsable,
|
||||
machine: name.to_s,
|
||||
provider: provider.to_s,
|
||||
message: e.to_s
|
||||
# Test if the provider is usable or not
|
||||
begin
|
||||
provider_cls.usable?(true)
|
||||
rescue Errors::VagrantError => e
|
||||
raise Errors::ProviderNotUsable,
|
||||
machine: name.to_s,
|
||||
provider: provider.to_s,
|
||||
message: e.to_s
|
||||
end
|
||||
else
|
||||
box_formats = provider
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -368,6 +368,38 @@ describe Vagrant::Vagrantfile do
|
|||
to raise_error(Vagrant::Errors::ProviderNotUsable)
|
||||
end
|
||||
|
||||
context "when provider validation is ignored" do
|
||||
before do
|
||||
configure do |config|
|
||||
config.vm.box = "base"
|
||||
config.vm.box_version = "1.0"
|
||||
config.vm.define :guest1
|
||||
config.vm.define :guest2
|
||||
|
||||
config.vm.provider "custom" do |_, c|
|
||||
c.ssh.port = 123
|
||||
end
|
||||
end
|
||||
|
||||
iso_env.box3("base", "1.0", :custom, vagrantfile: <<-VF)
|
||||
Vagrant.configure("2") do |config|
|
||||
config.vagrant.plugins = "vagrant-custom"
|
||||
end
|
||||
VF
|
||||
end
|
||||
|
||||
it "should not raise an error if provider is not found" do
|
||||
expect { subject.machine_config(:guest1, :custom, boxes, nil, false) }.
|
||||
not_to raise_error
|
||||
end
|
||||
|
||||
it "should return configuration from box Vagrantfile" do
|
||||
config = subject.machine_config(:guest1, :custom, boxes, nil, false)[:config]
|
||||
expect(config.vagrant.plugins).to be_a(Hash)
|
||||
expect(config.vagrant.plugins.keys).to include("vagrant-custom")
|
||||
end
|
||||
end
|
||||
|
||||
context "local box metadata file" do
|
||||
let(:data_path) { double(:data_path) }
|
||||
let(:meta_file) { double(:meta_file) }
|
||||
|
|
Loading…
Reference in New Issue