vagrant/plugins/guests/linux/cap/mount_virtualbox_shared_fol...

44 lines
1.5 KiB
Ruby
Raw Normal View History

2013-04-04 06:01:43 +00:00
module VagrantPlugins
module GuestLinux
module Cap
class MountVirtualBoxSharedFolder
def self.mount_virtualbox_shared_folder(machine, name, guestpath, options)
expanded_guest_path = machine.guest.capability(
:shell_expand_guest_path, guestpath)
# Determine the permission string to attach to the mount command
mount_options = "-o uid=`id -u #{options[:owner]}`,gid=`getent group #{options[:group]} | cut -d: -f3`"
if options[:mount_options]
mount_options += ",#{options[:mount_options].join(",")}"
end
2013-04-04 06:01:43 +00:00
mount_command = "mount -t vboxsf #{mount_options} #{name} #{expanded_guest_path}"
# Create the guest path if it doesn't exist
machine.communicate.sudo("mkdir -p #{expanded_guest_path}")
# Attempt to mount the folder. We retry here a few times because
# it can fail early on.
attempts = 0
while true
success = true
machine.communicate.sudo(mount_command) do |type, data|
success = false if type == :stderr && data =~ /No such device/i
end
break if success
attempts += 1
raise Vagrant::Errors::LinuxMountFailed, :command => mount_command
2013-04-04 06:01:43 +00:00
sleep 2
end
# Chown the directory to the proper user
machine.communicate.sudo(
"chown `id -u #{options[:owner]}`:`getent group #{options[:group]} | cut -d: -f3` #{expanded_guest_path}")
2013-04-04 06:01:43 +00:00
end
end
end
end
end