82 lines
2.3 KiB
Ruby
82 lines
2.3 KiB
Ruby
# Copyright (c) HashiCorp, Inc.
|
|
# SPDX-License-Identifier: BUSL-1.1
|
|
|
|
module VagrantPlugins
|
|
module CommandServe
|
|
class Mappers
|
|
class EnvironmentFromProject < Mapper
|
|
include Util::HasLogger
|
|
|
|
def initialize
|
|
inputs = [
|
|
Input.new(type: Client::Project),
|
|
Input.new(type: Vagrant::UI::Remote),
|
|
Input.new(type: Util::Cacher)
|
|
]
|
|
super(inputs: inputs, output: Vagrant::Environment, func: method(:converter))
|
|
end
|
|
|
|
def converter(project, ui, cacher)
|
|
cid = project.resource_id
|
|
return cacher.get(cid) if cacher.registered?(cid)
|
|
logger.warn { "cache miss for environment with project resource id #{cid} cache=#{cacher} !!" }
|
|
env = Vagrant::Environment.new(ui: ui, client: project)
|
|
cacher.register(cid, env)
|
|
env
|
|
end
|
|
end
|
|
|
|
class EnvironmentToProject < Mapper
|
|
def initialize
|
|
super(
|
|
inputs: [Input.new(type: Vagrant::Environment)],
|
|
output: Client::Project,
|
|
func: method(:converter),
|
|
)
|
|
end
|
|
|
|
def converter(env)
|
|
env.client
|
|
end
|
|
end
|
|
|
|
class EnvironmentToProto < Mapper
|
|
def initialize
|
|
super(
|
|
inputs: [Input.new(type: Vagrant::Environment)],
|
|
output: SDK::Args::Project,
|
|
func: method(:converter),
|
|
)
|
|
end
|
|
|
|
def converter(env)
|
|
env.client.to_proto
|
|
end
|
|
end
|
|
|
|
class EnvironmentFromProjectNoUI < Mapper
|
|
include Util::HasLogger
|
|
|
|
def initialize
|
|
inputs = [
|
|
Input.new(type: Client::Project),
|
|
Input.new(type: Util::Cacher),
|
|
Input.new(type: Mappers)
|
|
]
|
|
super(inputs: inputs, output: Vagrant::Environment, func: method(:converter))
|
|
end
|
|
|
|
def converter(project, cacher, mapper)
|
|
cid = project.resource_id
|
|
return cacher.get(cid) if cacher.registered?(cid)
|
|
logger.warn { "cache miss for environment with project resource id #{cid} cache=#{cacher}" }
|
|
ui = mapper.map(project, to: Vagrant::UI::Remote)
|
|
env = Vagrant::Environment.new(client: project, ui: ui)
|
|
cacher.register(cid, env)
|
|
env
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|