From 2d1ed88bcdf67b9bb47ad764700a2ebfda3a019c Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Tue, 3 Jan 2012 10:18:10 -0800 Subject: [PATCH] Forwarded ports no longer require a name paramter --- CHANGELOG.md | 1 + config/default.rb | 2 +- lib/vagrant/action/vm/forward_ports.rb | 15 ++++++++++++--- lib/vagrant/config/vm.rb | 18 ++++++++++++++++-- templates/locales/en.yml | 3 ++- 5 files changed, 32 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a33dbed4a..3a75615f0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ of argument. Previously where you had `config.vm.network "33.33.33.10"` you should now put `config.vm.network :hostonly, "33.33.33.10"`. This is in order to support bridged networking, as well. + - `config.vm.forward_port` no longer requires a name parameter. - Bridged networking. `config.vm.network` with `:bridged` as the option will setup a bridged network. - `config.vm.customize` now takes a command to send to `VBoxManage`, so any diff --git a/config/default.rb b/config/default.rb index e12716f91..9b256336a 100644 --- a/config/default.rb +++ b/config/default.rb @@ -16,7 +16,7 @@ Vagrant::Config.run do |config| config.vm.auto_port_range = (2200..2250) config.vm.box_url = nil config.vm.base_mac = nil - config.vm.forward_port("ssh", 22, 2222, :auto => true) + config.vm.forward_port 22, 2222, :name => "ssh", :auto => true config.vm.boot_mode = "headless" config.vm.guest = :linux diff --git a/lib/vagrant/action/vm/forward_ports.rb b/lib/vagrant/action/vm/forward_ports.rb index 5cdd21e20..db6dd2ef2 100644 --- a/lib/vagrant/action/vm/forward_ports.rb +++ b/lib/vagrant/action/vm/forward_ports.rb @@ -33,13 +33,13 @@ module Vagrant end def forward_ports(vm) + counter = 0 ports = [] interfaces = @env[:vm].driver.read_network_interfaces @env[:vm].config.vm.forwarded_ports.each do |name, options| message_attributes = { - :name => name, :guest_port => options[:guestport], :host_port => options[:hostport], :adapter => options[:adapter] @@ -54,14 +54,23 @@ module Vagrant # Port forwarding requires the network interface to be a NAT interface, # so verify that that is the case. - if interfaces[adapter][:type] != :nat + if interfaces[options[:adapter]][:type] != :nat @env[:ui].info(I18n.t("vagrant.actions.vm.forward_ports.non_nat", message_attributes)) next end + # VirtualBox requires a unique name for the forwarded port, so we + # will give it one. + name = options[:name] + if !name + # Auto-generate the name based on a counter of every forwarded port + name = "fp#{counter}" + counter += 1 + end + # Add the options to the ports array to send to the driver later - ports << options.merge(:name => name, :adapter => adapter) + ports << options.merge(:name => name, :adapter => options[:adapter]) end @env[:vm].driver.forward_ports(ports) diff --git a/lib/vagrant/config/vm.rb b/lib/vagrant/config/vm.rb index ae124912b..d9aacd3ae 100644 --- a/lib/vagrant/config/vm.rb +++ b/lib/vagrant/config/vm.rb @@ -26,12 +26,26 @@ module Vagrant @customizations = [] end - def forward_port(name, guestport, hostport, options=nil) + def forward_port(guestport, hostport, options=nil) + if !guestport.kind_of?(Integer) + raise Errors::DeprecationError, :message => <<-MESSAGE +`config.vm.forward_port` changed in 0.9.0 where the required name +argument is now removed. Vagrant will now automatically generate +a unique name for your forwarded port. For example, to forward +port 80 to port 8080 you now do the following: + + config.vm.forward_port 80, 8080 + +Please change your configurations to match this new syntax. + MESSAGE + end + options = { + :name => nil, :guestport => guestport, :hostport => hostport, :protocol => :tcp, - :adapter => 0, + :adapter => 1, :auto => false }.merge(options || {}) diff --git a/templates/locales/en.yml b/templates/locales/en.yml index 59d54465b..6e87ff269 100644 --- a/templates/locales/en.yml +++ b/templates/locales/en.yml @@ -369,7 +369,8 @@ en: fixed_collision: Fixed port collision '%{name}'. Now on port %{new_port}. forwarding: Forwarding ports... - forwarding_entry: "-- %{name}: %{guest_port} => %{host_port} (adapter %{adapter})" + forwarding_entry: |- + -- %{guest_port} => %{host_port} (adapter %{adapter}) non_nat: |- VirtualBox adapter #%{adapter} not configured as "NAT". Skipping: '%{name}'. privileged_ports: |-