providers/virtualbox: synced folder supports the "disable" method

This commit is contained in:
Mitchell Hashimoto 2014-04-16 10:24:33 -07:00
parent ef7a230c6b
commit afb61b1466
6 changed files with 96 additions and 0 deletions

View File

@ -266,6 +266,10 @@ module VagrantPlugins
def suspend def suspend
end end
# Unshare folders.
def unshare_folders(names)
end
# Verifies that the driver is ready to accept work. # Verifies that the driver is ready to accept work.
# #
# This should raise a VagrantError if things are not ready. # This should raise a VagrantError if things are not ready.

View File

@ -478,6 +478,27 @@ module VagrantPlugins
execute("controlvm", @uuid, "savestate") execute("controlvm", @uuid, "savestate")
end end
def unshare_folders(names)
names.each do |name|
begin
execute(
"sharedfolder", "remove", @uuid,
"--name", name,
"--transient")
execute(
"setextradata", @uuid,
"VBoxInternal2/SharedFoldersEnableSymlinksCreate/#{name}")
rescue Vagrant::Errors::VBoxManageError => e
if e.extra_data[:stderr].include?("VBOX_E_FILE_ERROR")
# The folder doesn't exist. ignore.
else
raise
end
end
end
end
def verify! def verify!
# This command sometimes fails if kernel drivers aren't properly loaded # This command sometimes fails if kernel drivers aren't properly loaded
# so we just run the command and verify that it succeeded. # so we just run the command and verify that it succeeded.

View File

@ -488,6 +488,27 @@ module VagrantPlugins
execute("controlvm", @uuid, "savestate") execute("controlvm", @uuid, "savestate")
end end
def unshare_folders(names)
names.each do |name|
begin
execute(
"sharedfolder", "remove", @uuid,
"--name", name,
"--transient")
execute(
"setextradata", @uuid,
"VBoxInternal2/SharedFoldersEnableSymlinksCreate/#{name}")
rescue Vagrant::Errors::VBoxManageError => e
if e.extra_data[:stderr].include?("VBOX_E_FILE_ERROR")
# The folder doesn't exist. ignore.
else
raise
end
end
end
end
def verify! def verify!
# This command sometimes fails if kernel drivers aren't properly loaded # This command sometimes fails if kernel drivers aren't properly loaded
# so we just run the command and verify that it succeeded. # so we just run the command and verify that it succeeded.

View File

@ -512,6 +512,27 @@ module VagrantPlugins
execute("controlvm", @uuid, "savestate") execute("controlvm", @uuid, "savestate")
end end
def unshare_folders(names)
names.each do |name|
begin
execute(
"sharedfolder", "remove", @uuid,
"--name", name,
"--transient")
execute(
"setextradata", @uuid,
"VBoxInternal2/SharedFoldersEnableSymlinksCreate/#{name}")
rescue Vagrant::Errors::VBoxManageError => e
if e.extra_data[:stderr].include?("VBOX_E_FILE_ERROR")
# The folder doesn't exist. ignore.
else
raise
end
end
end
end
def verify! def verify!
# This command sometimes fails if kernel drivers aren't properly loaded # This command sometimes fails if kernel drivers aren't properly loaded
# so we just run the command and verify that it succeeded. # so we just run the command and verify that it succeeded.

View File

@ -520,6 +520,27 @@ module VagrantPlugins
execute("controlvm", @uuid, "savestate") execute("controlvm", @uuid, "savestate")
end end
def unshare_folders(names)
names.each do |name|
begin
execute(
"sharedfolder", "remove", @uuid,
"--name", name,
"--transient")
execute(
"setextradata", @uuid,
"VBoxInternal2/SharedFoldersEnableSymlinksCreate/#{name}")
rescue Vagrant::Errors::VBoxManageError => e
if e.extra_data[:stderr].include?("VBOX_E_FILE_ERROR")
# The folder doesn't exist. ignore.
else
raise
end
end
end
end
def verify! def verify!
# This command sometimes fails if kernel drivers aren't properly loaded # This command sometimes fails if kernel drivers aren't properly loaded
# so we just run the command and verify that it succeeded. # so we just run the command and verify that it succeeded.

View File

@ -63,6 +63,14 @@ module VagrantPlugins
end end
end end
def disable(machine, folders, _opts)
# TODO: unmount.
# Remove the shared folders from the VM metadata
names = folders.map { |id, _data| os_friendly_id(id) }
driver(machine).unshare_folders(names)
end
def cleanup(machine, opts) def cleanup(machine, opts)
driver(machine).clear_shared_folders if machine.id && machine.id != "" driver(machine).clear_shared_folders if machine.id && machine.id != ""
end end