51 lines
1.4 KiB
Ruby
51 lines
1.4 KiB
Ruby
module Vagrant
|
|
module Actions
|
|
module VM
|
|
class Boot < Base
|
|
def prepare
|
|
@runner.env.config.vm.share_folder("v-root",
|
|
@runner.env.config.vm.project_directory,
|
|
@runner.env.root_path,
|
|
:rsync => @runner.env.config.vm.rsync_project_directory)
|
|
end
|
|
|
|
def execute!
|
|
@runner.invoke_around_callback(:boot) do
|
|
# Startup the VM
|
|
boot
|
|
|
|
# Wait for it to complete booting, or error if we could
|
|
# never detect it booted up successfully
|
|
if !wait_for_boot
|
|
error_and_exit(:vm_failed_to_boot)
|
|
end
|
|
end
|
|
end
|
|
|
|
def boot
|
|
logger.info "Booting VM..."
|
|
@runner.vm.start(@runner.env.config.vm.boot_mode)
|
|
end
|
|
|
|
def wait_for_boot(sleeptime=5)
|
|
logger.info "Waiting for VM to boot..."
|
|
|
|
@runner.env.config.ssh.max_tries.to_i.times do |i|
|
|
logger.info "Trying to connect (attempt ##{i+1} of #{@runner.env.config[:ssh][:max_tries]})..."
|
|
|
|
if @runner.ssh.up?
|
|
logger.info "VM booted and ready for use!"
|
|
return true
|
|
end
|
|
|
|
sleep sleeptime
|
|
end
|
|
|
|
logger.info "Failed to connect to VM! Failed to boot?"
|
|
false
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|