Error message is given if there are no auto ports available.

This commit is contained in:
Mitchell Hashimoto 2010-05-27 17:37:48 -07:00
parent 7fa0303925
commit 61bcc761bc
4 changed files with 19 additions and 1 deletions

View File

@ -46,6 +46,10 @@ module Vagrant
range = runner.env.config.vm.auto_port_range.to_a range = runner.env.config.vm.auto_port_range.to_a
range -= used_ports range -= used_ports
if range.empty?
raise ActionException.new(:vm_port_auto_empty, :vm_name => @runner.name, :name => name, :options => options)
end
# Set the port up to be the first one and add that port to # Set the port up to be the first one and add that port to
# the used list. # the used list.
options[:hostport] = range.shift options[:hostport] = range.shift

View File

@ -197,6 +197,13 @@
The vagrant virtual environment you are trying to suspend must be running to be suspended. The vagrant virtual environment you are trying to suspend must be running to be suspended.
:vm_not_suspended: |- :vm_not_suspended: |-
The vagrant virtual environment you are trying to resume is not in a suspended state. The vagrant virtual environment you are trying to resume is not in a suspended state.
:vm_port_auto_empty: |-
Vagrant found a port collision for the specified port and virtual machine.
While this port was marked to be auto-corrected, the ports in the
auto-correction range are all also used.
VM: <%= vm_name %>
Forwarded port: <%= name %> (<%= options[:guestport] %> => <%= options[:hostport] %>)
:vm_port_collision: |- :vm_port_collision: |-
Vagrant cannot forward the specified ports on this VM, since they Vagrant cannot forward the specified ports on this VM, since they
would collide with another VirtualBox virtual machine's forwarded would collide with another VirtualBox virtual machine's forwarded

View File

@ -101,6 +101,7 @@ class Test::Unit::TestCase
action = action_klass.new(mock_vm, *args) action = action_klass.new(mock_vm, *args)
stub_default_action_dependecies(action) stub_default_action_dependecies(action)
mock_vm.stubs(:name).returns("foo")
mock_vm.stubs(:vm).returns(vm) mock_vm.stubs(:vm).returns(vm)
mock_vm.stubs(:vm=) mock_vm.stubs(:vm=)
mock_vm.stubs(:invoke_callback) mock_vm.stubs(:invoke_callback)

View File

@ -72,7 +72,6 @@ class ForwardPortsActionTest < Test::Unit::TestCase
@used_ports = [1,2,3] @used_ports = [1,2,3]
@runner.env.config.vm.auto_port_range = (1..5) @runner.env.config.vm.auto_port_range = (1..5)
@auto_port_range = @runner.env.config.vm.auto_port_range.to_a
end end
should "raise an exception if auto forwarding is disabled" do should "raise an exception if auto forwarding is disabled" do
@ -94,6 +93,13 @@ class ForwardPortsActionTest < Test::Unit::TestCase
@action.handle_collision(@name, @options, @used_ports) @action.handle_collision(@name, @options, @used_ports)
assert @used_ports.include?(4) assert @used_ports.include?(4)
end end
should "raise an exception if there are no auto ports available" do
@runner.env.config.vm.auto_port_range = (1..3)
assert_raises(Vagrant::Actions::ActionException) {
@action.handle_collision(@name, @options, @used_ports)
}
end
end end
context "execution" do context "execution" do