vagrant/plugins/providers/hyperv/action/sync_folders.rb

75 lines
2.4 KiB
Ruby

#-------------------------------------------------------------------------
# Copyright (c) Microsoft Open Technologies, Inc.
# All Rights Reserved. Licensed under the MIT License.
#--------------------------------------------------------------------------
require "debugger"
require "log4r"
require "vagrant/util/subprocess"
require "vagrant/util/which"
module VagrantPlugins
module HyperV
module Action
class SyncFolders
def initialize(app, env)
@app = app
@logger = Log4r::Logger.new("vagrant_hyperv::action::sync_folders")
end
def call(env)
@env = env
@app.call(env)
if env[:machine].config.vm.guest == :windows
sync_folders_to_windows
elsif env[:machine].config.vm.guest == :linux
sync_folders_to_linux
end
end
def ssh_info
@ssh_info ||= @env[:machine].ssh_info
end
def sync_folders_to_windows
@env[:machine].config.vm.synced_folders.each do |id, data|
# Ignore disabled shared folders
next if data[:disabled] || data[:smb]
hostpath = File.expand_path(data[:hostpath], @env[:root_path]).gsub("/", "\\")
guestpath = data[:guestpath].gsub("/", "\\")
options = { :guest_ip => ssh_info[:host],
:username => ssh_info[:username],
:host_path => hostpath,
:guest_path => guestpath,
:vm_id => @env[:machine].id,
:password => @env[:machine].provider_config.guest.password }
response = @env[:machine].provider.driver.execute('file_sync.ps1', options)
end
end
def sync_folders_to_linux
if ssh_info.nil?
@env[:ui].info('SSH Info not available, Aborting Sync folder')
return
end
@env[:machine].config.vm.synced_folders.each do |id, data|
# Ignore disabled shared folders
next if data[:disabled] || data[:smb]
hostpath = File.expand_path(data[:hostpath], @env[:root_path])
guestpath = data[:guestpath]
@env[:ui].info('Starting Sync folders')
begin
@env[:machine].communicate.upload(hostpath, guestpath)
rescue RuntimeError => e
@env[:ui].error(e.message)
end
end
end
end
end
end
end