Merge pull request #10255 from chrisroberts/e-base-mac-vbox
Allow automatic mac address assignment with virtuabox provider
This commit is contained in:
commit
64987daf06
|
@ -10,11 +10,14 @@ module VagrantPlugins
|
|||
# If we cloned, we don't need a base mac, it is already set!
|
||||
return @app.call(env) if env[:machine].config.vm.clone
|
||||
|
||||
raise Vagrant::Errors::VMBaseMacNotSpecified if !env[:machine].config.vm.base_mac
|
||||
|
||||
# Create the proc which we want to use to modify the virtual machine
|
||||
env[:ui].info I18n.t("vagrant.actions.vm.match_mac.matching")
|
||||
env[:machine].provider.driver.set_mac_address(env[:machine].config.vm.base_mac)
|
||||
if env[:machine].config.vm.base_mac
|
||||
# Create the proc which we want to use to modify the virtual machine
|
||||
env[:ui].info I18n.t("vagrant.actions.vm.match_mac.matching")
|
||||
env[:machine].provider.driver.set_mac_address(env[:machine].config.vm.base_mac)
|
||||
else
|
||||
env[:ui].info I18n.t("vagrant.actions.vm.match_mac.generating")
|
||||
env[:machine].provider.driver.set_mac_address(nil)
|
||||
end
|
||||
|
||||
@app.call(env)
|
||||
end
|
||||
|
|
|
@ -635,6 +635,7 @@ module VagrantPlugins
|
|||
end
|
||||
|
||||
def set_mac_address(mac)
|
||||
mac = "auto" if !mac
|
||||
execute("modifyvm", @uuid, "--macaddress1", mac, retryable: true)
|
||||
end
|
||||
|
||||
|
|
|
@ -2177,6 +2177,7 @@ en:
|
|||
manually for more verbose error output.
|
||||
match_mac:
|
||||
matching: Matching MAC address for NAT networking...
|
||||
generating: Generating MAC address for NAT networking...
|
||||
no_base_mac: |-
|
||||
No base MAC address was specified. This is required for the NAT networking
|
||||
to work properly (and hence port forwarding, SSH, etc.). Specifying this
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
require_relative "../base"
|
||||
|
||||
describe VagrantPlugins::ProviderVirtualBox::Action::MatchMACAddress do
|
||||
let(:ui) { double("ui") }
|
||||
let(:machine) { double("machine", config: config, provider: double("provider", driver: driver)) }
|
||||
let(:driver) { double("driver") }
|
||||
let(:env) {
|
||||
{machine: machine, ui: ui}
|
||||
}
|
||||
let(:app) { double("app") }
|
||||
let(:config) { double("config", vm: vm) }
|
||||
let(:vm) { double("vm", clone: clone, base_mac: base_mac) }
|
||||
let(:clone) { false }
|
||||
let(:base_mac) { "00:00:00:00:00:00" }
|
||||
|
||||
let(:subject) { described_class.new(app, env) }
|
||||
|
||||
before do
|
||||
allow(ui).to receive(:info)
|
||||
allow(app).to receive(:call)
|
||||
end
|
||||
|
||||
after { subject.call(env) }
|
||||
|
||||
it "should set the mac address" do
|
||||
expect(driver).to receive(:set_mac_address).with(base_mac)
|
||||
end
|
||||
|
||||
context "when clone is true" do
|
||||
let(:clone) { true }
|
||||
|
||||
it "should not set mac address" do
|
||||
expect(driver).not_to receive(:set_mac_address)
|
||||
end
|
||||
end
|
||||
|
||||
context "when base_mac is falsey" do
|
||||
let(:base_mac) { nil }
|
||||
|
||||
it "should set mac address" do
|
||||
expect(driver).to receive(:set_mac_address).with(base_mac)
|
||||
end
|
||||
end
|
||||
end
|
|
@ -5,7 +5,7 @@ describe VagrantPlugins::ProviderVirtualBox::Driver::Version_5_0 do
|
|||
|
||||
let(:vbox_version) { "5.0.0" }
|
||||
|
||||
subject { VagrantPlugins::ProviderVirtualBox::Driver::Meta.new(uuid) }
|
||||
subject { VagrantPlugins::ProviderVirtualBox::Driver::Version_5_0.new(uuid) }
|
||||
|
||||
it_behaves_like "a version 4.x virtualbox driver"
|
||||
|
||||
|
@ -40,4 +40,24 @@ describe VagrantPlugins::ProviderVirtualBox::Driver::Version_5_0 do
|
|||
|
||||
end
|
||||
end
|
||||
|
||||
describe "#set_mac_address" do
|
||||
let(:mac) { "00:00:00:00:00:00" }
|
||||
|
||||
after { subject.set_mac_address(mac) }
|
||||
|
||||
it "should modify vm and set mac address" do
|
||||
expect(subprocess).to receive(:execute).with("VBoxManage", "modifyvm", anything, "--macaddress1", mac, anything).
|
||||
and_return(subprocess_result(exit_code: 0))
|
||||
end
|
||||
|
||||
context "when mac address is falsey" do
|
||||
let(:mac) { nil }
|
||||
|
||||
it "should modify vm and set mac address to automatic value" do
|
||||
expect(subprocess).to receive(:execute).with("VBoxManage", "modifyvm", anything, "--macaddress1", "auto", anything).
|
||||
and_return(subprocess_result(exit_code: 0))
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue