57 lines
1.4 KiB
Ruby
57 lines
1.4 KiB
Ruby
# Copyright (c) HashiCorp, Inc.
|
|
# SPDX-License-Identifier: BUSL-1.1
|
|
|
|
module Vagrant
|
|
class BoxCollection
|
|
# This module enables the BoxCollection for server mode
|
|
module Remote
|
|
|
|
# Add an attribute reader for the client
|
|
# when applied to the BoxCollection class
|
|
def self.prepended(klass)
|
|
klass.class_eval do
|
|
attr_reader :client
|
|
end
|
|
end
|
|
|
|
def initialize(directory, options=nil)
|
|
@client = options[:client]
|
|
if @client.nil?
|
|
raise ArgumentError,
|
|
"Remote client is required for `#{self.class.name}'"
|
|
end
|
|
@hook = options[:hook]
|
|
@logger = Log4r::Logger.new("vagrant::box_collection")
|
|
end
|
|
|
|
# @return [Vagrant::Box]
|
|
def add(path, name, version, **opts)
|
|
client.add(
|
|
path, name, version, opts[:force], opts[:metadata_url], opts[:providers]
|
|
)
|
|
end
|
|
|
|
|
|
# @return [Array] Array of `[name, version, provider]` of the boxes
|
|
# installed on this system.
|
|
def all
|
|
all_boxes = client.all
|
|
boxes = []
|
|
all_boxes.each do |b|
|
|
boxes << [b.name, b.version, b.provider]
|
|
end
|
|
boxes
|
|
end
|
|
|
|
# @return [Box] The box found, or `nil` if not found.
|
|
def find(name, providers, version)
|
|
client.find(name, providers, version)
|
|
end
|
|
|
|
def clean(name)
|
|
client.clean(name)
|
|
end
|
|
end
|
|
end
|
|
end
|