class VagrantPlugins::SyncedFolderSSHFS::HostPathFixCommon

Class that contains common function that are called by both HostPathFix and HostPathUnfix classes.

Public Class Methods

new() click to toggle source
# File lib/vagrant-sshfs/action_hostpath_fixup.rb, line 14
def initialize()
  @logger = Log4r::Logger.new("vagrant::synced_folders::sshfs")
end

Public Instance Methods

fix(data) click to toggle source
# File lib/vagrant-sshfs/action_hostpath_fixup.rb, line 18
def fix(data)
  # If this is an arbitrary host mount we need to set the hostpath
  # to something that will pass the config checks that assume the
  # hostpath is coming from the vagrant host and not from an arbitrary
  # host. Save off the original hostpath and then set the hostpath to
  # "." to pass the checks.
  if data[:ssh_host]
    data[:hostpath_orig] = data[:hostpath]
    data[:hostpath] = "."
  end
end
loop_and_fix_unfix(env, fix) click to toggle source

Loop through synced folder entries and either fix or unfix based on the fix arg

# File lib/vagrant-sshfs/action_hostpath_fixup.rb, line 43
def loop_and_fix_unfix(env, fix)

  opts = {
    cached: !!env[:synced_folders_cached],
    config: env[:synced_folders_config],
  }

  @logger.debug("SyncedFolders loading from cache: #{opts[:cached]}")
  folders = synced_folders(env[:machine], **opts)

  folders.each do |impl_name, fs|
    next if impl_name != :sshfs
    @logger.debug("Synced Folder Implementation: #{impl_name}")

    fs.each do |id, data|

      # replace data with a copy since we may delete/add new data to the config
      data = data.dup

      if fix
          @logger.debug("fixup host path before:  - #{id}: #{data[:hostpath]} => #{data[:guestpath]}")
          fix(data)
          @logger.debug("fixup host path after:  - #{id}: #{data[:hostpath]} => #{data[:guestpath]}")
      else
          @logger.debug("unfixup host path before:  - #{id}: #{data[:hostpath]} => #{data[:guestpath]}")
          unfix(data)
          @logger.debug("fixup host path after:  - #{id}: #{data[:hostpath]} => #{data[:guestpath]}")
      end

      # Replace the entry in the config with the updated one
      env[:machine].config.vm.synced_folders.delete(id)
      env[:machine].config.vm.synced_folder(
          data[:hostpath],
          data[:guestpath],
          data)
    end
  end
end
unfix(data) click to toggle source
# File lib/vagrant-sshfs/action_hostpath_fixup.rb, line 30
def unfix(data)
  # If this is a reverse mounted folder or an arbitrary host mount
  # then we'll set "hostpath_exact" so they don't try to create a
  # folder on the host in Vagrant::Action::Builtin::SyncedFolders.
  if data[:ssh_host]
    data[:hostpath_exact] = true
    data[:hostpath] = data[:hostpath_orig]
    data.delete(:hostpath_orig)
  end
end