vaguerent/plugins/guests/esxi/cap/mount_nfs_folder.rb
Leo Simons fec14cf04c Use -f argument to rm to force-remove files.
When using pty=true, removing files using sudo may request confirmation,
which will hang the connection.

Similarly, sometimes assumptions about file existence may be wrong and
in those cases it seems better to continue on as long as the file does
not exist, so -f makes sense there, too.
2014-08-29 10:51:31 +02:00

41 lines
1.4 KiB
Ruby

module VagrantPlugins
module GuestEsxi
module Cap
class MountNFSFolder
extend Vagrant::Util::Retryable
def self.mount_nfs_folder(machine, ip, folders)
folders.each do |name, opts|
guestpath = opts[:guestpath]
volume = guestpath.gsub("/", "_")
machine.communicate.tap do |comm|
if comm.test("localcli storage nfs list | grep '^#{volume}'")
comm.execute("localcli storage nfs remove -v #{volume}")
end
mount_command = "localcli storage nfs add -H #{ip} -s '#{opts[:hostpath]}' -v '#{volume}'"
retryable(on: Vagrant::Errors::LinuxNFSMountFailed, tries: 5, sleep: 2) do
comm.execute(mount_command,
error_class: Vagrant::Errors::LinuxNFSMountFailed)
end
# symlink vmfs volume to :guestpath
if comm.test("test -L '#{guestpath}'")
comm.execute("rm -f '#{guestpath}'")
end
if comm.test("test -d '#{guestpath}'")
comm.execute("rmdir '#{guestpath}'")
end
dir = File.dirname(guestpath)
if !comm.test("test -d '#{dir}'")
comm.execute("mkdir -p '#{dir}'")
end
comm.execute("ln -s '/vmfs/volumes/#{volume}' '#{guestpath}'")
end
end
end
end
end
end
end