Merge pull request #10409 from chrisroberts/e-vbox-ssh-port-detect
Update VirtualBox driver ssh_port helper
This commit is contained in:
commit
efbf99c451
|
@ -689,12 +689,21 @@ module VagrantPlugins
|
||||||
def ssh_port(expected_port)
|
def ssh_port(expected_port)
|
||||||
@logger.debug("Searching for SSH port: #{expected_port.inspect}")
|
@logger.debug("Searching for SSH port: #{expected_port.inspect}")
|
||||||
|
|
||||||
# Look for the forwarded port only by comparing the guest port
|
# Look for the forwarded port. Valid based on the guest port, but will do
|
||||||
read_forwarded_ports.each do |_, _, hostport, guestport|
|
# scoring based matching to determine best value when multiple results are
|
||||||
return hostport if guestport == expected_port
|
# available.
|
||||||
end
|
matches = read_forwarded_ports.map do |_, name, hostport, guestport, host_ip|
|
||||||
|
next if guestport != expected_port
|
||||||
|
match = [0, hostport]
|
||||||
|
match[0] += 1 if name == "ssh"
|
||||||
|
match[0] += 1 if name.downcase == "ssh"
|
||||||
|
match[0] += 1 if host_ip == "127.0.0.1"
|
||||||
|
match
|
||||||
|
end.compact
|
||||||
|
|
||||||
nil
|
result = matches.sort_by(&:first).last
|
||||||
|
|
||||||
|
result.last if result
|
||||||
end
|
end
|
||||||
|
|
||||||
def resume
|
def resume
|
||||||
|
|
|
@ -79,4 +79,57 @@ describe VagrantPlugins::ProviderVirtualBox::Driver::Version_5_0 do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "#ssh_port" do
|
||||||
|
let(:forwards) {
|
||||||
|
[[1, "ssh", 2222, 22, "127.0.0.1"],
|
||||||
|
[1, "ssh", 8080, 80, ""]]
|
||||||
|
}
|
||||||
|
|
||||||
|
before { allow(subject).to receive(:read_forwarded_ports).and_return(forwards) }
|
||||||
|
|
||||||
|
it "should return the host port" do
|
||||||
|
expect(subject.ssh_port(22)).to eq(2222)
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when multiple matches are available" do
|
||||||
|
let(:forwards) {
|
||||||
|
[[1, "ssh", 2222, 22, "127.0.0.1"],
|
||||||
|
[1, "", 2221, 22, ""]]
|
||||||
|
}
|
||||||
|
|
||||||
|
it "should choose localhost port forward" do
|
||||||
|
expect(subject.ssh_port(22)).to eq(2222)
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when multiple named matches are available" do
|
||||||
|
let(:forwards) {
|
||||||
|
[[1, "ssh", 2222, 22, "127.0.0.1"],
|
||||||
|
[1, "SSH", 2221, 22, "127.0.0.1"]]
|
||||||
|
}
|
||||||
|
|
||||||
|
it "should choose lowercased name forward" do
|
||||||
|
expect(subject.ssh_port(22)).to eq(2222)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when only ports are defined" do
|
||||||
|
let(:forwards) {
|
||||||
|
[[1, "", 2222, 22, ""]]
|
||||||
|
}
|
||||||
|
|
||||||
|
it "should return the host port" do
|
||||||
|
expect(subject.ssh_port(22)).to eq(2222)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
context "when no matches are available" do
|
||||||
|
let(:forwards) { [] }
|
||||||
|
|
||||||
|
it "should return nil" do
|
||||||
|
expect(subject.ssh_port(22)).to be_nil
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue