vaguerent/plugins/guests/darwin/cap/mount_vmware_shared_folder.rb
Timothy Sutton 300d151608 Darwin guest: mount_vmware_shared_folder cap for use with vmware_fusion provider
- It's not clear whether it's possible to mount individual shares
  using 'mount -t vmhgfs', as the vagrant-vmware-fusion provider now does
  for Linux guests. Any mount from '.host', even if not a valid share
  name, succeeds and mounts _all_ shares in their respective directories
  at the root of the mountpoint. Instead, we symlink each directory from
  its place in '/Volumes/VMware Shared Folders'
2013-08-06 10:17:12 -04:00

37 lines
1.2 KiB
Ruby

module VagrantPlugins
module GuestDarwin
module Cap
class MountVmwareSharedFolder
# we seem to be unable to ask 'mount -t vmhgfs' to mount the roots
# of specific shares, so instead we symlink from what is already
# mounted by the guest tools
# (ie. the behaviour of the VMware_fusion provider prior to 0.8.x)
def self.mount_vmware_shared_folder(machine, name, guestpath, options)
machine.communicate.tap do |comm|
# clear prior symlink
if comm.test("sudo test -L \"#{guestpath}\"")
comm.sudo("rm \"#{guestpath}\"")
end
# clear prior directory if exists
if comm.test("sudo test -d \"#{guestpath}\"")
comm.sudo("rm -Rf \"#{guestpath}\"")
end
# create intermediate directories if needed
intermediate_dir = File.dirname(guestpath)
if !comm.test("sudo test -d \"#{intermediate_dir}\"")
comm.sudo("mkdir -p \"#{intermediate_dir}\"")
end
# finally make the symlink
comm.sudo("ln -s \"/Volumes/VMware Shared Folders/#{name}\" \"#{guestpath}\"")
end
end
end
end
end
end