Lonnie VanZandt b897fd7365 Scrub Guest Paths for Windows Rsync leaving Dirty Paths for Winrm Mkdir
Windows offers no out-of-the-box rsync utility. By far, the most
commonly used external utilities for Windows rsync are built with the
GNU Cygwin libraries. The cost for this convenience is that rsync on
Windows has to be provided paths that begin “/cygdrive/c” rather than
“c:/“ like other Windows-API utilities. Compounding the situation,
rsync doesn’t create paths/to/sub/targets and so the vagrant plugin
code, when performing an rsync, is responsible for creating
intermediate directories in guest paths if there are any. Furthermore,
the mkdir utility in Windows is not another Cygwin utility like rsync
but the routine mkdir of Windows command.com. Therefore, while rsync
needs the /cygwin paths, mkdir uses the Windows paths. Later, the
chef_solo.rp provisioner running within the guest will expect to find
Windows-style paths in its solo.rb configuration file. Due to all this,
vagrant has to keep track of both the original, possibly dirty Windows
guest path and the cygwin-scrubbed guest path.
2015-08-18 10:56:13 -06:00

89 lines
2.2 KiB
Ruby

require "vagrant"
module VagrantPlugins
module GuestWindows
autoload :Errors, File.expand_path("../errors", __FILE__)
class Plugin < Vagrant.plugin("2")
name "Windows guest."
description "Windows guest support."
config("windows") do
require_relative "config"
Config
end
guest("windows") do
require_relative "guest"
init!
Guest
end
guest_capability(:windows, :change_host_name) do
require_relative "cap/change_host_name"
Cap::ChangeHostName
end
guest_capability(:windows, :configure_networks) do
require_relative "cap/configure_networks"
Cap::ConfigureNetworks
end
guest_capability(:windows, :halt) do
require_relative "cap/halt"
Cap::Halt
end
guest_capability(:windows, :mount_virtualbox_shared_folder) do
require_relative "cap/mount_shared_folder"
Cap::MountSharedFolder
end
guest_capability(:windows, :mount_vmware_shared_folder) do
require_relative "cap/mount_shared_folder"
Cap::MountSharedFolder
end
guest_capability(:windows, :mount_parallels_shared_folder) do
require_relative "cap/mount_shared_folder"
Cap::MountSharedFolder
end
guest_capability(:windows, :wait_for_reboot) do
require_relative "cap/reboot"
Cap::Reboot
end
guest_capability(:windows, :choose_addressable_ip_addr) do
require_relative "cap/choose_addressable_ip_addr"
Cap::ChooseAddressableIPAddr
end
guest_capability(:windows, :mount_smb_shared_folder) do
require_relative "cap/mount_shared_folder"
Cap::MountSharedFolder
end
guest_capability(:windows, :rsync_scrub_guestpath) do
require_relative "cap/rsync"
Cap::RSync
end
guest_capability(:windows, :rsync_pre) do
require_relative "cap/rsync"
Cap::RSync
end
protected
def self.init!
return if defined?(@_init)
I18n.load_path << File.expand_path(
"templates/locales/guest_windows.yml", Vagrant.source_root)
I18n.reload!
@_init = true
end
end
end
end