84 lines
2.2 KiB
Ruby

# Copyright (c) HashiCorp, Inc.
# SPDX-License-Identifier: BUSL-1.1
module Vagrant
class Box
# This module enables the Box for server mode
module Remote
# Add an attribute reader for the client
# when applied to the Box class
def self.prepended(klass)
klass.class_eval do
attr_reader :client
end
end
# This is used to initialize a box.
#
# @param [String] name Logical name of the box.
# @param [Symbol] provider The provider that this box implements.
# @param [Pathname] directory The directory where this box exists on
# disk.
# @param [String] metadata_url Metadata URL for box
# @param [Hook] hook A hook to apply to the box downloader, for example, for authentication
def initialize(name, provider, version, directory, metadata_url: nil, hook: nil, client: nil)
@logger = Log4r::Logger.new("vagrant::box")
@name = name
@version = version
@provider = provider
@directory = directory
@metadata_url = metadata_url
@hook = hook
if client.nil?
raise ArgumentError,
"Remote client is required for `#{self.class.name}'"
end
@client = client
@metadata = client.box_metadata
end
def destroy!
client.destroy
end
def in_use?(index)
client.machines(index.to_proto)
end
def has_update?(version=nil, **opts)
update_info = client.update_info(version)
if update_info.nil?
return nil
end
metadata = update_info[0]
new_version = update_info[1]
new_provider = update_info[2]
[
BoxMetadata.new(nil, client: metadata),
BoxMetadata::Version.new({"version" => new_version}, ver: new_version, client: metadata),
BoxMetadata::Provider.new({"name" => new_provider}, client: metadata),
]
end
def automatic_update_check_allowed?
client.automatic_update_check_allowed
end
def repackage(path)
client.repackage(path)
end
def <=>(other)
client.compare(other.to_proto)
end
def to_proto
client.proto
end
end
end
end