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
|
provider = guess_provider
|
||||||
vagrantfile.machine_names.each do |mname|
|
vagrantfile.machine_names.each do |mname|
|
||||||
ldp = @local_data_path.join("machines/#{mname}/#{provider}") if @local_data_path
|
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
|
end
|
||||||
result = plugins.reverse.inject(Vagrant::Util::HashWithIndifferentAccess.new) do |memo, val|
|
result = plugins.reverse.inject(Vagrant::Util::HashWithIndifferentAccess.new) do |memo, val|
|
||||||
Vagrant::Util::DeepMerge.deep_merge(memo, val.vagrant.plugins)
|
Vagrant::Util::DeepMerge.deep_merge(memo, val.vagrant.plugins)
|
||||||
|
|
|
@ -112,7 +112,7 @@ module Vagrant
|
||||||
# @param [Pathname] data_path Machine data path
|
# @param [Pathname] data_path Machine data path
|
||||||
# @return [Hash<Symbol, Object>] Various configuration parameters for a
|
# @return [Hash<Symbol, Object>] Various configuration parameters for a
|
||||||
# machine. See the main documentation body for more info.
|
# 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
|
keys = @keys.dup
|
||||||
|
|
||||||
sub_machine = @config.vm.defined_vms[name]
|
sub_machine = @config.vm.defined_vms[name]
|
||||||
|
@ -127,7 +127,7 @@ module Vagrant
|
||||||
box_formats = nil
|
box_formats = nil
|
||||||
if provider != nil
|
if provider != nil
|
||||||
provider_plugin = Vagrant.plugin("2").manager.providers[provider]
|
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
|
providers = Vagrant.plugin("2").manager.providers.to_hash.keys
|
||||||
if providers
|
if providers
|
||||||
providers_str = providers.join(', ')
|
providers_str = providers.join(', ')
|
||||||
|
@ -145,18 +145,22 @@ module Vagrant
|
||||||
machine: name, provider: provider, providers: providers_str
|
machine: name, provider: provider, providers: providers_str
|
||||||
end
|
end
|
||||||
|
|
||||||
provider_cls = provider_plugin[0]
|
if validate_provider
|
||||||
provider_options = provider_plugin[1]
|
provider_cls = provider_plugin[0]
|
||||||
box_formats = provider_options[:box_format] || provider
|
provider_options = provider_plugin[1]
|
||||||
|
box_formats = provider_options[:box_format] || provider
|
||||||
|
|
||||||
# Test if the provider is usable or not
|
# Test if the provider is usable or not
|
||||||
begin
|
begin
|
||||||
provider_cls.usable?(true)
|
provider_cls.usable?(true)
|
||||||
rescue Errors::VagrantError => e
|
rescue Errors::VagrantError => e
|
||||||
raise Errors::ProviderNotUsable,
|
raise Errors::ProviderNotUsable,
|
||||||
machine: name.to_s,
|
machine: name.to_s,
|
||||||
provider: provider.to_s,
|
provider: provider.to_s,
|
||||||
message: e.to_s
|
message: e.to_s
|
||||||
|
end
|
||||||
|
else
|
||||||
|
box_formats = provider
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -368,6 +368,38 @@ describe Vagrant::Vagrantfile do
|
||||||
to raise_error(Vagrant::Errors::ProviderNotUsable)
|
to raise_error(Vagrant::Errors::ProviderNotUsable)
|
||||||
end
|
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
|
context "local box metadata file" do
|
||||||
let(:data_path) { double(:data_path) }
|
let(:data_path) { double(:data_path) }
|
||||||
let(:meta_file) { double(:meta_file) }
|
let(:meta_file) { double(:meta_file) }
|
||||||
|
|
Loading…
Reference in New Issue