vaguerent/plugins/commands/serve/util/service_info.rb
2022-04-25 12:26:35 -05:00

49 lines
1.6 KiB
Ruby

module VagrantPlugins
module CommandServe
module Util
# Adds service info helper to be used with services
module ServiceInfo
def with_info(context, broker:, &block)
if !context.metadata["plugin_name"]
raise KeyError,
"plugin name not defined (metadata content: #{context.metadata.inspect})"
end
info = Service::ServiceInfo.new(
plugin_name: context.metadata["plugin_name"],
broker: broker
)
if context.metadata["plugin_manager"] && info.broker
Service::ServiceInfo.manager_tracker.activate do
client = Client::PluginManager.load(
context.metadata["plugin_manager"],
broker: info.broker
)
Vagrant.plugin("2").enable_remote_manager(client)
end
end
Thread.current.thread_variable_set(:service_info, info)
return if !block_given?
yield info
ensure
Service::ServiceInfo.manager_tracker.deactivate do
Vagrant.plugin("2").disable_remote_manager
end
Thread.current.thread_variable_set(:service_info, nil)
end
def with_plugin(context, plugins, broker:, &block)
with_info(context, broker: broker) do |info|
plugin_name = info.plugin_name
plugin = plugins[plugin_name.to_s.to_sym].to_a.first
if !plugin
raise NameError, "Failed to locate plugin named #{plugin_name}"
end
yield plugin if block_given?
end
end
end
end
end
end