Fixes issue #5377. Check that Upstart is not just installed but currently actively running before attempting to emit an event after mounting shared folders. Only requires the binary be named upstart, not that it lives in /sbin.
46 lines
1.6 KiB
Ruby
46 lines
1.6 KiB
Ruby
require "vagrant/util/retryable"
|
|
|
|
module VagrantPlugins
|
|
module GuestLinux
|
|
module Cap
|
|
class MountNFS
|
|
extend Vagrant::Util::Retryable
|
|
|
|
def self.mount_nfs_folder(machine, ip, folders)
|
|
folders.each do |name, opts|
|
|
# Expand the guest path so we can handle things like "~/vagrant"
|
|
expanded_guest_path = machine.guest.capability(
|
|
:shell_expand_guest_path, opts[:guestpath])
|
|
|
|
# Do the actual creating and mounting
|
|
machine.communicate.sudo("mkdir -p #{expanded_guest_path}")
|
|
|
|
# Mount
|
|
hostpath = opts[:hostpath].dup
|
|
hostpath.gsub!("'", "'\\\\''")
|
|
|
|
# Figure out any options
|
|
mount_opts = ["vers=#{opts[:nfs_version]}"]
|
|
mount_opts << "udp" if opts[:nfs_udp]
|
|
if opts[:mount_options]
|
|
mount_opts = opts[:mount_options].dup
|
|
end
|
|
|
|
mount_command = "mount -o '#{mount_opts.join(",")}' #{ip}:'#{hostpath}' #{expanded_guest_path}"
|
|
retryable(on: Vagrant::Errors::LinuxNFSMountFailed, tries: 8, sleep: 3) do
|
|
machine.communicate.sudo(mount_command,
|
|
error_class: Vagrant::Errors::LinuxNFSMountFailed)
|
|
end
|
|
|
|
# Emit an upstart event if we can
|
|
if machine.communicate.test("test -x /sbin/initctl && test 'upstart' = $(basename $(sudo readlink /proc/1/exe))")
|
|
machine.communicate.sudo(
|
|
"/sbin/initctl emit --no-wait vagrant-mounted MOUNTPOINT=#{expanded_guest_path}")
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|