lib/vagrant-notify/action.rb
require_relative 'action/check_provider'
require_relative 'action/install_command'
require_relative 'action/notify_provisioning_status'
require_relative 'action/prepare_data'
require_relative 'action/server_is_running'
require_relative 'action/set_shared_folder'
require_relative 'action/start_server'
require_relative 'action/stop_server'
module Vagrant
module Notify
module Action
class << self
Call = Vagrant::Action::Builtin::Call
def action_start_server
Vagrant::Action::Builder.new.tap do |b|
b.use Call, CheckProvider do |env, b2|
next if !env[:result]
b2.use PrepareData
b2.use Call, ServerIsRunning do |env2, b3|
if env2[:result]
env[:machine].ui.success("vagrant-notify-server pid: #{env2[:notify_data][:pid]}")
else
# TODO: b3.use CheckServerPortCollision
b3.use StartServer
b3.use PrepareData
b3.use Call, ServerIsRunning do |env3, b4|
if env3[:result]
env3[:machine].ui.success("vagrant-notify-server pid: #{env3[:notify_data][:pid]}")
else
env3[:machine].ui.error("Unable to start notification server using #{env3[:notify_data][:bind_ip]}")
env3[:notify_data][:pid] = env3[:notify_data][:port] = env3[:notify_data][:bind_ip] = nil
end
end
end
# Always install the command to make sure we can fix stale ips
# on the guest machine
b3.use InstallCommand
end
end
end
end
def action_stop_server
Vagrant::Action::Builder.new.tap do |b|
b.use Call, CheckProvider do |env, b2|
next if !env[:result]
b2.use PrepareData
b2.use Call, ServerIsRunning do |env2, b3|
if env2[:result]
b3.use StopServer
# TODO: b3.use RestoreCommandBackup
else
# TODO: b3.use MessageServerStopped
end
end
end
end
end
def action_status_server
Vagrant::Action::Builder.new.tap do |b|
b.use Call, CheckProvider do |env, b2|
next if !env[:result]
b2.use PrepareData
b2.use Call, ServerIsRunning do |env2, b3|
if env2[:result]
env[:machine].ui.success("vagrant-notify-server pid: #{env2[:notify_data][:pid]}")
else
if env[:machine].config.notify.enable == false
env[:machine].ui.error("No vagrant-notify server detected. Disabled in Vagrantfile")
else
env[:machine].ui.error("No vagrant-notify server detected.")
end
end
end
end
end
end
end
end
end
end