From e5364e7798cce79c31c62f40b11b9c1e729fbdc0 Mon Sep 17 00:00:00 2001 From: Brian Cain Date: Fri, 17 Aug 2018 09:39:34 -0700 Subject: [PATCH] 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. --- .../up/middleware/store_box_metadata.rb | 26 ++++++++++++------- .../up/middleware/store_box_metadata_test.rb | 15 +++++++++++ 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/plugins/commands/up/middleware/store_box_metadata.rb b/plugins/commands/up/middleware/store_box_metadata.rb index 08e362889..f3520c4a7 100644 --- a/plugins/commands/up/middleware/store_box_metadata.rb +++ b/plugins/commands/up/middleware/store_box_metadata.rb @@ -10,19 +10,25 @@ module VagrantPlugins class StoreBoxMetadata def initialize(app, env) @app = app + @logger = Log4r::Logger.new("vagrant::up::storeboxmetadata") end def call(env) - 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") - File.open(meta_file.to_s, "w+") do |file| - file.write(JSON.dump(box_meta)) + 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 diff --git a/test/unit/plugins/commands/up/middleware/store_box_metadata_test.rb b/test/unit/plugins/commands/up/middleware/store_box_metadata_test.rb index 438494beb..80c831def 100644 --- a/test/unit/plugins/commands/up/middleware/store_box_metadata_test.rb +++ b/test/unit/plugins/commands/up/middleware/store_box_metadata_test.rb @@ -26,6 +26,21 @@ describe VagrantPlugins::CommandUp::StoreBoxMetadata do let(:subject) { described_class.new(app, env) } describe "#call" do + context "with no box file" do + let(:machine) { double("machine", name: "guest", provider_name: "provider") } + let(:env) { {machine: machine} } + + before do + allow(machine).to receive(:box).and_return(nil) + expect(app).to receive(:call).with(env) + end + + + it "does not write the metadata file" do + expect(File).to_not receive(:open) + subject.call(env) + end + end let(:meta_file) { double("meta_file") }