Implement synced folder prepare endpoint

This commit is contained in:
sophia 2022-02-14 12:35:00 -06:00 committed by Paul Hinze
parent 3ae69c706a
commit 87f8c9cc5e
No known key found for this signature in database
GPG Key ID: B69DEDF2D55501C0
3 changed files with 84 additions and 29 deletions

View File

@ -52,6 +52,14 @@ module Vagrant
end
end
# @param [Machine] machine
# @param [Hash] folders The folders to remove. This will not contain
# any folders that should remain.
# @param [Hash] opts Any options for the synced folders.
def prepare(machine, folders, opts)
client.prepare(machine.to_proto, folders, opts)
end
# @param [Machine] machine
# @param [Hash] folders The folders to remove. This will not contain
# any folders that should remain.

View File

@ -22,6 +22,28 @@ module VagrantPlugins
run_func(machine)
end
# Generate callback and spec for required arguments
#
# @return [SDK::FuncSpec, Proc]
def prepare_func
spec = client.prepare_spec(Empty.new)
cb = proc do |args|
client.prepare(args)
end
[spec, cb]
end
# Prepare synced folders on guest
#
# @param machine [Vagrant::Machine] Guest machine
# @param folders [Array] Synced folders
# @param opts [Hash] Options for folders
def prepare(machine, folders, opts)
spec, cb = prepare_func
cb.call(generate_funcspec_args(spec,
machine, folders, Type::Direct.new(value: opts)))
end
# Generate callback and spec for required arguments
#
# @return [SDK::FuncSpec, Proc]

View File

@ -37,20 +37,55 @@ module VagrantPlugins
end
def usable(req, ctx)
with_info(ctx, broker: broker) do |info|
plugin_name = info.plugin_name
plugins = Vagrant.plugin("2").local_manager.synced_folders
with_plugin(ctx, plugins, broker: broker) do |plugin|
target = mapper.funcspec_map(req)
project = target.project
env = Vagrant::Environment.new({client: project})
machine = env.machine(target.name.to_sym, target.provider_name.to_sym)
sf = get_synced_folder_plugin(plugin_name)
logger.debug("got sf #{sf}")
usable = sf.usable?(machine)
logger.debug("usable: #{usable}")
SDK::SyncedFolder::UsableResp.new(
usable: usable,
sf = plugin.new
usable = sf.usable?(machine)
logger.debug("usable: #{usable}")
SDK::SyncedFolder::UsableResp.new(
usable: usable,
)
end
end
def prepare_spec(*_)
SDK::FuncSpec.new(
name: "prepare_spec",
args: [
SDK::FuncSpec::Value.new(
type: "hashicorp.vagrant.sdk.Args.Target.Machine",
name: "",
),
SDK::FuncSpec::Value.new(
type: "hashicorp.vagrant.sdk.Args.Hash",
name: "",
),
SDK::FuncSpec::Value.new(
type: "hashicorp.vagrant.sdk.Args.Direct",
name: "",
),
],
)
end
def prepare(req, ctx)
plugins = Vagrant.plugin("2").local_manager.synced_folders
with_plugin(ctx, plugins, broker: broker) do |plugin|
machine, folders, opts = mapper.funcspec_map(
req,
expect: [Vagrant::Machine, Hash, Type::Direct]
)
# change the top level folders hash key to a string
folders.transform_keys!(&:to_s)
sf = plugin.new
sf.prepare(machine, folders, opts)
Empty.new
end
end
@ -75,14 +110,15 @@ module VagrantPlugins
end
def enable(req, ctx)
with_info(ctx, broker: broker) do |info|
plugin_name = info.plugin_name
plugins = Vagrant.plugin("2").local_manager.synced_folders
with_plugin(ctx, plugins, broker: broker) do |plugin|
machine, folders, opts = mapper.funcspec_map(
req.func_args,
expect: [Vagrant::Machine, Hash, Type::Direct]
)
sf = get_synced_folder_plugin(plugin_name)
# change the top level folders hash key to a string
folders.transform_keys!(&:to_s)
sf = plugin.new
sf.enable(machine, folders, opts)
Empty.new
end
@ -97,7 +133,7 @@ module VagrantPlugins
name: "",
),
SDK::FuncSpec::Value.new(
type: "hashicorp.vagrant.sdk.Args.Folder",
type: "hashicorp.vagrant.sdk.Args.Hash",
name: "",
),
SDK::FuncSpec::Value.new(
@ -109,14 +145,15 @@ module VagrantPlugins
end
def disable(req, ctx)
with_info(ctx, broker: broker) do |info|
plugin_name = info.plugin_name
plugins = Vagrant.plugin("2").local_manager.synced_folders
with_plugin(ctx, plugins, broker: broker) do |plugin|
machine, folders, opts = mapper.funcspec_map(
req.func_args,
expect: [Vagrant::Machine, Hash, Type::Direct]
)
sf = get_synced_folder_plugin(plugin_name)
# change the top level folders hash key to a string
folders.transform_keys!(&:to_s)
sf = plugin.new
sf.disable(machine, folders, opts)
Empty.new
end
@ -151,18 +188,6 @@ module VagrantPlugins
Empty.new
end
end
private
def get_synced_folder_plugin(plugin_name)
synced_folders = Vagrant.plugin("2").local_manager.synced_folders
logger.debug("got synced folders #{synced_folders}")
plugin = [plugin_name.to_s.to_sym].to_a.first
logger.debug("got plugin #{plugin}")
sf = plugin.new
logger.debug("got sf #{sf}")
sf
end
end
end
end