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") }