vaguerent/plugins/commands/up/middleware/store_box_metadata.rb
Brian Cain e5364e7798
Only write box metadata if guest has box object
Prior to this commit, providers like docker would fail to be brought up
because they do not store box objects like virtualbox or vmware
provider guests. This commit fixes that by making sure the box object
exists before writing the metadata file to disk.
2018-08-17 09:58:24 -07:00

38 lines
1.2 KiB
Ruby

require "json"
module VagrantPlugins
module CommandUp
# Stores metadata information about the box used
# for the current guest. This allows Vagrant to
# determine the box currently in use when the
# Vagrantfile is modified with a new box name or
# version while the guest still exists.
class StoreBoxMetadata
def initialize(app, env)
@app = app
@logger = Log4r::Logger.new("vagrant::up::storeboxmetadata")
end
def call(env)
if env[:machine].box
box = env[:machine].box
box_meta = {
name: box.name,
version: box.version,
provider: box.provider,
directory: box.directory.sub(Vagrant.user_data_path.to_s + "/", "")
}
meta_file = env[:machine].data_dir.join("box_meta")
@logger.debug("Writing box metadata file to #{meta_file}")
File.open(meta_file.to_s, "w+") do |file|
file.write(JSON.dump(box_meta))
end
else
@logger.debug("No box data found for #{env[:machine].name} with provider #{env[:machine].provider_name}")
end
@app.call(env)
end
end
end
end