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.
41 lines
1.4 KiB
Ruby
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
|