diff --git a/plugins/guests/darwin/cap/mount_vmware_shared_folder.rb b/plugins/guests/darwin/cap/mount_vmware_shared_folder.rb new file mode 100644 index 000000000..7b932cd43 --- /dev/null +++ b/plugins/guests/darwin/cap/mount_vmware_shared_folder.rb @@ -0,0 +1,36 @@ +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 diff --git a/plugins/guests/darwin/plugin.rb b/plugins/guests/darwin/plugin.rb index ff437f866..a8884f6f0 100644 --- a/plugins/guests/darwin/plugin.rb +++ b/plugins/guests/darwin/plugin.rb @@ -31,6 +31,11 @@ module VagrantPlugins Cap::MountNFSFolder end + guest_capability("darwin", "mount_vmware_shared_folder") do + require_relative "cap/mount_vmware_shared_folder" + Cap::MountVmwareSharedFolder + end + guest_capability("darwin", "shell_expand_guest_path") do require_relative "cap/shell_expand_guest_path" Cap::ShellExpandGuestPath