class HashiCorp::VagrantVMwareDesktop::Action::ShareFolders
This takes the configured synced folders on the VM and shares them into the VMware guest.
Public Class Methods
new(app, env)
click to toggle source
# File lib/vagrant-vmware-desktop/action/share_folders.rb, line 15 def initialize(app, env) @app = app @logger = Log4r::Logger.new("hashicorp::provider::vmware::shared_folders") end
Public Instance Methods
call(env)
click to toggle source
# File lib/vagrant-vmware-desktop/action/share_folders.rb, line 20 def call(env) # Move on first so that the machine is powered on @app.call(env) shared_folders = {} env[:machine].config.vm.synced_folders.each do |id, data| data = scoped_hash_override(data, :vmware) # Ignore disabled shared folders if data[:disabled] @logger.info("Disabled shared folder, ignoring: #{id}") next end # Ignore NFS shared folders as well next if data[:nfs] # Use it! shared_folders[id] = data end if shared_folders.empty? @logger.info("No shared folders. Doing nothing.") return end # Verify that the machine can actually support sharing folders # if we can. if env[:machine].guest.capability?(:verify_vmware_hgfs) @logger.info("Verifying HGFS is on the guest...") if !env[:machine].guest.capability(:verify_vmware_hgfs) raise Errors::GuestMissingHGFS end end # Get the SSH info which we'll use later ssh_info = env[:machine].ssh_info # short guestpaths first, so we don't step on ourselves shared_folders = shared_folders.dup.sort_by do |id, data| if data[:guestpath] data[:guestpath].length else # A long enough path to just do this at the end. 10000 end end @logger.info("Preparing shared folders with VMX...") env[:ui].info I18n.t("hashicorp.vagrant_vmware_desktop.sharing_folders") env[:machine].provider.driver.enable_shared_folders shared_folders.each do |id, data| id = id.gsub('/', env[:machine].provider_config.shared_folder_special_char) path = File.expand_path(data[:hostpath], env[:root_path]) guestpath = data[:guestpath] env[:ui].info(I18n.t("hashicorp.vagrant_vmware_desktop.sharing_folder_single", hostpath: path, guestpath: guestpath)) env[:machine].provider.driver.share_folder(id, path) # Remove trailing slashes guestpath = guestpath.gsub(/\/+$/, "") # Calculate the owner and group data[:owner] ||= ssh_info[:username] data[:group] ||= ssh_info[:username] # Mount it! env[:machine].guest.capability( :mount_vmware_shared_folder, id, data[:guestpath], data) end end