Merge pull request #12992 from chrisroberts/vbox-networks-nfs
VirtualBox read networks support with hostonlynets
This commit is contained in:
commit
d8de3016ea
@ -157,11 +157,11 @@ module VagrantPlugins
|
|||||||
addr = IPAddr.new(net[:lowerip])
|
addr = IPAddr.new(net[:lowerip])
|
||||||
net[:netmask] = net[:networkmask]
|
net[:netmask] = net[:networkmask]
|
||||||
if addr.ipv4?
|
if addr.ipv4?
|
||||||
net[:ip] = addr.mask(net[:netmask]).to_s
|
net[:ip] = addr.mask(net[:netmask]).succ.to_s
|
||||||
net[:ipv6] = ""
|
net[:ipv6] = ""
|
||||||
else
|
else
|
||||||
net[:ip] = ""
|
net[:ip] = ""
|
||||||
net[:ipv6] = addr.mask(net[:netmwask]).to_s
|
net[:ipv6] = addr.mask(net[:netmwask]).succ.to_s
|
||||||
net[:ipv6_prefix] = net[:netmask]
|
net[:ipv6_prefix] = net[:netmask]
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -171,6 +171,29 @@ module VagrantPlugins
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def read_network_interfaces
|
||||||
|
return super if !use_host_only_nets?
|
||||||
|
|
||||||
|
{}.tap do |nics|
|
||||||
|
execute("showvminfo", @uuid, "--machinereadable", retryable: true).each_line do |line|
|
||||||
|
if m = line.match(/nic(?<adapter>\d+)="(?<type>.+?)"$/)
|
||||||
|
nics[m[:adapter].to_i] ||= {}
|
||||||
|
if m[:type] == "hostonlynetwork"
|
||||||
|
nics[m[:adapter].to_i][:type] = :hostonly
|
||||||
|
else
|
||||||
|
nics[m[:adapter].to_i][:type] = m[:type].to_sym
|
||||||
|
end
|
||||||
|
elsif m = line.match(/^bridgeadapter(?<adapter>\d+)="(?<network>.+?)"$/)
|
||||||
|
nics[m[:adapter].to_i] ||= {}
|
||||||
|
nics[m[:adapter].to_i][:bridge] = m[:network]
|
||||||
|
elsif m = line.match(/^hostonly-network(?<adapter>\d+)="(?<network>.+?)"$/)
|
||||||
|
nics[m[:adapter].to_i] ||= {}
|
||||||
|
nics[m[:adapter].to_i][:hostonly] = m[:network]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
# Generate list of host only networks
|
# Generate list of host only networks
|
||||||
def read_host_only_networks
|
def read_host_only_networks
|
||||||
networks = []
|
networks = []
|
||||||
|
|||||||
@ -563,6 +563,12 @@ memory=1024)
|
|||||||
expect(result.first[:netmask]).to eq(result.first[:networkmask])
|
expect(result.first[:netmask]).to eq(result.first[:networkmask])
|
||||||
expect(result.first[:status]).to eq("Up")
|
expect(result.first[:status]).to eq("Up")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should assign the address as the first in the subnet" do
|
||||||
|
result = subject.read_host_only_interfaces
|
||||||
|
ip = IPAddr.new(result.first[:lowerip]).mask(result.first[:networkmask])
|
||||||
|
expect(result.first[:ip]).to eq(ip.succ.to_s)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -586,6 +592,71 @@ memory=1024)
|
|||||||
expect(result.last[:networkmask]).to eq("255.255.255.0")
|
expect(result.last[:networkmask]).to eq("255.255.255.0")
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "#read_network_interfaces" do
|
||||||
|
before do
|
||||||
|
allow(subject)
|
||||||
|
.to receive(:execute).
|
||||||
|
with("showvminfo", any_args).
|
||||||
|
and_return(VBOX_GUEST_HOSTONLYVNETS_INFO)
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when hostonlynets is disabled" do
|
||||||
|
before do
|
||||||
|
allow(subject).to receive(:use_host_only_nets?).and_return(false)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should return two interfaces" do
|
||||||
|
valid_interfaces = subject.read_network_interfaces.find_all { |k, v|
|
||||||
|
v[:type] != :none
|
||||||
|
}
|
||||||
|
expect(valid_interfaces.size).to eq(2)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should include a nat type" do
|
||||||
|
expect(subject.read_network_interfaces.detect { |_, v| v[:type] == :nat }).to be
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should include a hostonlynetwork type with no information" do
|
||||||
|
expect(subject.read_network_interfaces[2]).to eq({type: :hostonlynetwork})
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when hostonlynets is enabled" do
|
||||||
|
before do
|
||||||
|
allow(subject).to receive(:use_host_only_nets?).and_return(true)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should return two interfaces" do
|
||||||
|
valid_interfaces = subject.read_network_interfaces.find_all { |k, v|
|
||||||
|
v[:type] != :none
|
||||||
|
}
|
||||||
|
expect(valid_interfaces.size).to eq(2)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should include a nat type" do
|
||||||
|
expect(subject.read_network_interfaces.detect { |_, v| v[:type] == :nat }).to be
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should include a hostonly type" do
|
||||||
|
expect(subject.read_network_interfaces.detect { |_, v| v[:type] == :hostonly }).to be
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should not include a hostonlynetwork type" do
|
||||||
|
expect(subject.read_network_interfaces.detect { |_, v|
|
||||||
|
v[:type] == :hostonlynetwork
|
||||||
|
}).to_not be
|
||||||
|
end
|
||||||
|
|
||||||
|
it "should include the hostonly network name" do
|
||||||
|
hostonly = subject.read_network_interfaces.values.detect { |v|
|
||||||
|
v[:type] == :hostonly
|
||||||
|
}
|
||||||
|
expect(hostonly).to be
|
||||||
|
expect(hostonly[:hostonly]).to eq("vagrantnet-vbox1")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
VBOX_VMCONFIG_FILE=%(<?xml version="1.0"?>
|
VBOX_VMCONFIG_FILE=%(<?xml version="1.0"?>
|
||||||
@ -695,3 +766,30 @@ NetworkMask: 255.255.255.0
|
|||||||
LowerIP: 192.168.22.0
|
LowerIP: 192.168.22.0
|
||||||
UpperIP: 192.168.22.0
|
UpperIP: 192.168.22.0
|
||||||
VBoxNetworkName: hostonly-vagrantnet-vbox2)
|
VBoxNetworkName: hostonly-vagrantnet-vbox2)
|
||||||
|
|
||||||
|
VBOX_GUEST_HOSTONLYVNETS_INFO=%(
|
||||||
|
natnet1="nat"
|
||||||
|
macaddress1="080027BB1475"
|
||||||
|
cableconnected1="on"
|
||||||
|
nic1="nat"
|
||||||
|
nictype1="82540EM"
|
||||||
|
nicspeed1="0"
|
||||||
|
mtu="0"
|
||||||
|
sockSnd="64"
|
||||||
|
sockRcv="64"
|
||||||
|
tcpWndSnd="64"
|
||||||
|
tcpWndRcv="64"
|
||||||
|
Forwarding(0)="ssh,tcp,127.0.0.1,2222,,22"
|
||||||
|
hostonly-network2="vagrantnet-vbox1"
|
||||||
|
macaddress2="080027FBC15B"
|
||||||
|
cableconnected2="on"
|
||||||
|
nic2="hostonlynetwork"
|
||||||
|
nictype2="82540EM"
|
||||||
|
nicspeed2="0"
|
||||||
|
nic3="none"
|
||||||
|
nic4="none"
|
||||||
|
nic5="none"
|
||||||
|
nic6="none"
|
||||||
|
nic7="none"
|
||||||
|
nic8="none"
|
||||||
|
)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user