Merge pull request #8819 from chrisroberts/fix/nfs-machine-ip-filter
Filter any machine_ip when preparing the NFS settings
This commit is contained in:
commit
ed0190cfdb
|
@ -1,3 +1,4 @@
|
||||||
|
require "ipaddr"
|
||||||
require "vagrant/action/builtin/mixin_synced_folders"
|
require "vagrant/action/builtin/mixin_synced_folders"
|
||||||
|
|
||||||
module VagrantPlugins
|
module VagrantPlugins
|
||||||
|
@ -59,6 +60,23 @@ module VagrantPlugins
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if host_ip && !machine_ip.empty?
|
||||||
|
interface = @machine.provider.driver.read_host_only_interfaces.detect do |iface|
|
||||||
|
iface[:ip] == host_ip
|
||||||
|
end
|
||||||
|
host_ipaddr = IPAddr.new("#{host_ip}/#{interface.fetch(:netmask, "0.0.0.0")}")
|
||||||
|
|
||||||
|
case machine_ip
|
||||||
|
when String
|
||||||
|
machine_ip = nil if !host_ipaddr.include?(machine_ip)
|
||||||
|
when Array
|
||||||
|
machine_ip.delete_if do |m_ip|
|
||||||
|
!host_ipaddr.include?(m_ip)
|
||||||
|
end
|
||||||
|
machine_ip = nil if machine_ip.empty?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
raise Vagrant::Errors::NFSNoHostonlyNetwork if !host_ip || !machine_ip
|
raise Vagrant::Errors::NFSNoHostonlyNetwork if !host_ip || !machine_ip
|
||||||
|
|
||||||
env[:nfs_host_ip] = host_ip
|
env[:nfs_host_ip] = host_ip
|
||||||
|
|
|
@ -47,6 +47,10 @@ describe VagrantPlugins::ProviderVirtualBox::Action::PrepareNFSSettings do
|
||||||
end
|
end
|
||||||
|
|
||||||
context "with an nfs synced folder" do
|
context "with an nfs synced folder" do
|
||||||
|
let(:host_only_interfaces) {
|
||||||
|
[{name: "vmnet2", ip: "1.2.3.4"}]
|
||||||
|
}
|
||||||
|
|
||||||
before do
|
before do
|
||||||
# We can't be on Windows, because NFS gets disabled on Windows
|
# We can't be on Windows, because NFS gets disabled on Windows
|
||||||
Vagrant::Util::Platform.stub(windows?: false)
|
Vagrant::Util::Platform.stub(windows?: false)
|
||||||
|
@ -58,9 +62,7 @@ describe VagrantPlugins::ProviderVirtualBox::Action::PrepareNFSSettings do
|
||||||
driver.stub(read_network_interfaces: {
|
driver.stub(read_network_interfaces: {
|
||||||
2 => {type: :hostonly, hostonly: "vmnet2"},
|
2 => {type: :hostonly, hostonly: "vmnet2"},
|
||||||
})
|
})
|
||||||
driver.stub(read_host_only_interfaces: [
|
driver.stub(read_host_only_interfaces: host_only_interfaces)
|
||||||
{name: "vmnet2", ip: "1.2.3.4"},
|
|
||||||
])
|
|
||||||
allow(driver).to receive(:read_guest_ip).with(1).and_return("2.3.4.5")
|
allow(driver).to receive(:read_guest_ip).with(1).and_return("2.3.4.5")
|
||||||
|
|
||||||
# override sleep to 0 so test does not take seconds
|
# override sleep to 0 so test does not take seconds
|
||||||
|
@ -68,6 +70,30 @@ describe VagrantPlugins::ProviderVirtualBox::Action::PrepareNFSSettings do
|
||||||
allow(subject).to receive(:retry_options).and_return(retry_options.merge(sleep: 0))
|
allow(subject).to receive(:retry_options).and_return(retry_options.merge(sleep: 0))
|
||||||
end
|
end
|
||||||
|
|
||||||
|
context "with host interface netmask defined" do
|
||||||
|
context "with machine IP included within host interface range" do
|
||||||
|
let(:host_only_interfaces) {
|
||||||
|
[{name: "vmnet2", ip: "2.3.4.1", netmask: "255.255.255.0"}]
|
||||||
|
}
|
||||||
|
|
||||||
|
it "sets nfs_host_ip and nfs_machine_ip properly" do
|
||||||
|
subject.call(env)
|
||||||
|
|
||||||
|
expect(env[:nfs_host_ip]).to eq("2.3.4.1")
|
||||||
|
expect(env[:nfs_machine_ip]).to eq("2.3.4.5")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
context "with machine IP included within host interface range" do
|
||||||
|
let(:host_only_interfaces) {
|
||||||
|
[{name: "vmnet2", ip: "1.2.3.4", netmask: "255.255.255.0"}]
|
||||||
|
}
|
||||||
|
|
||||||
|
it "raises an error when the machine IP is not within host interface range" do
|
||||||
|
expect{ subject.call(env) }.to raise_error(Vagrant::Errors::NFSNoHostonlyNetwork)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
it "sets nfs_host_ip and nfs_machine_ip properly" do
|
it "sets nfs_host_ip and nfs_machine_ip properly" do
|
||||||
subject.call(env)
|
subject.call(env)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue