vaguerent/lib/vagrant/plugin/remote/synced_folder.rb

108 lines
3.4 KiB
Ruby

# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: BUSL-1.1
module Vagrant
module Plugin
module Remote
class SyncedFolder < V2::SyncedFolder
# Add an attribute accesor for the client
# when applied to the SyncedFolder class
attr_accessor :client
def initialize(client: nil)
if client.nil?
raise ArgumentError,
"Remote client is required for `#{self.class.name}`"
end
@client = client
@logger = Log4r::Logger.new("vagrant::remote::synced_folder::#{self.class.name}")
if client.nil?
@logger.warn("synced folder remote client is unset")
end
end
def _initialize(machine, synced_folder_type, client=nil)
if client.nil? && Manager.client
@client = Manager.client.get_plugin(
name: synced_folder_type,
type: :synced_folder,
)
else
raise "Cannot set remote client for synced folder, no manager available"
end
self
end
def initialize_capabilities!(host, hosts, capabilities, *args)
# no-op
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, folders, opts)
end
# @param [Machine] machine
# @param [Boolean] raise_error If true, should raise an exception
# if it isn't usable.
# @return [Boolean]
def usable?(machine, raise_error=false)
begin
client.usable(machine)
rescue
raise if raise_error
end
end
# @param [Machine] machine
# @param [Hash] folders Folders to remove
# @param [Hash] opts Any options for the synced folders.
def enable(machine, folders, opts)
client.enable(machine, folders, opts)
end
# @param [Machine] machine The machine to modify.
# @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 disable(machine, folders, opts)
client.disable(machine, folders, opts)
end
# @param [Machine] machine
# @param [Hash] opts
def cleanup(machine, opts)
client.cleanup(machine, opts)
end
# Executes the capability with the given name, optionally passing more
# arguments onwards to the capability. If the capability returns a value,
# it will be returned.
#
# @param [Symbol] cap_name Name of the capability
def capability(cap_name, *args)
@logger.debug("running remote synced folder capability #{cap_name} with args #{args}")
client.capability(cap_name, *args)
end
# Tests whether the given capability is possible.
#
# @param [Symbol] cap_name Capability name
# @return [Boolean]
def capability?(cap_name)
@logger.debug("checking for remote synced folder capability #{cap_name}")
client.has_capability?(cap_name)
end
def to_proto
client.proto
end
end
end
end
end