lib/vagrant-notify/action/start_server.rb in vagrant-notify-0.5.1 vs lib/vagrant-notify/action/start_server.rb in vagrant-notify-0.5.2
- old
+ new
@@ -12,31 +12,33 @@
end
def call(env)
@env = env
- port = next_available_port
id = env[:machine].id
+ provider_name = env[:machine].provider_name
dir = File.expand_path('../../', __FILE__)
return if env[:machine].config.notify.enable == false
+ port = next_available_port(env[:machine].config.notify.bind_ip)
+
if which('ruby')
- env[:notify_data][:pid] = Process.spawn("ruby #{dir}/server.rb #{id} #{port}")
+ env[:notify_data][:pid] = Process.spawn("ruby #{dir}/server.rb #{id} #{port} #{env[:machine].config.notify.bind_ip} #{provider_name}")
env[:notify_data][:port] = port
- env[:machine].ui.success("Started vagrant-notify-server pid: #{env[:notify_data][:pid]}")
sleep 5
+ Process.detach(env[:notify_data][:pid].to_i)
else
env[:machine].ui.error("Unable to spawn TCPServer daemon, ruby not found in $PATH")
end
@app.call env
end
- def next_available_port
+ def next_available_port(bind_ip)
# Determine a list of usable ports for us to use
usable_ports = Set.new(@env[:machine].config.vm.usable_port_range)
# Pass one, remove all defined host ports from usable ports
with_forwarded_ports do |options|
@@ -44,20 +46,20 @@
end
# Pass two, remove ports used by other processes
with_forwarded_ports do |options|
host_port = options[:host]
- usable_ports.delete(options[:host]) if is_port_open?("127.0.0.1", host_port)
+ usable_ports.delete(options[:host]) if is_port_open?(bind_ip, host_port)
end
# If we have no usable ports then we can't use the plugin
raise 'No usable ports available!' if usable_ports.empty?
# Set the port up to be the last one since vagrant's port collision handler
# will use the first as in:
# https://github.com/mitchellh/vagrant/blob/master/lib/vagrant/action/builtin/handle_forwarded_port_collisions.rb#L84
usable_ports.to_a.sort.reverse.find do |port|
- return port unless is_port_open?("127.0.0.1", port)
+ return port unless is_port_open?(bind_ip, port)
end
end
def with_forwarded_ports
@env[:machine].config.vm.networks.each do |type, options|