From 39a12de38f3bdb7f89f696665882dc337d7296f0 Mon Sep 17 00:00:00 2001 From: Brian Cain Date: Thu, 18 Jun 2020 11:07:56 -0700 Subject: [PATCH] Ensure meta-data is also included in cloud-init iso --- lib/vagrant/action/builtin/cloud_init_setup.rb | 18 +++++++++++------- .../action/builtin/cloud_init_setup_test.rb | 4 +++- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/lib/vagrant/action/builtin/cloud_init_setup.rb b/lib/vagrant/action/builtin/cloud_init_setup.rb index 58382ed20..dad5665b6 100644 --- a/lib/vagrant/action/builtin/cloud_init_setup.rb +++ b/lib/vagrant/action/builtin/cloud_init_setup.rb @@ -1,12 +1,11 @@ require 'mime' -require "tmpdir" +require 'tmpdir' module Vagrant module Action module Builtin class CloudInitSetup TEMP_PREFIX = "vagrant-cloud-init-iso-temp-".freeze - TEMP_ROOT = "/tmp".freeze def initialize(app, env) @app = app @@ -94,12 +93,17 @@ module Vagrant iso_path = nil if env[:env].host.capability?(:create_iso) - # TODO: make temp_root configurable? - source_dir = Pathname.new(Dir.mktmpdir(TEMP_PREFIX, TEMP_ROOT)) - # write a cloud.cfg file with msg.to_s - File.open("#{source_dir}/user-data", 'w') { |file| file.write(msg.to_s) } + begin + source_dir = Pathname.new(Dir.mktmpdir(TEMP_PREFIX)) + File.open("#{source_dir}/user-data", 'w') { |file| file.write(msg.to_s) } - iso_path = env[:env].host.capability(:create_iso, env[:env], source_dir) + metadata = { "instance-id": "i-#{machine.id.split('-').join}" } + File.open("#{source_dir}/meta-data", 'w') { |file| file.write(metadata.to_s) } + + iso_path = env[:env].host.capability(:create_iso, env[:env], source_dir) + ensure + FileUtils.remove_entry source_dir + end else raise Errors::CreateIsoHostCapNotFound end diff --git a/test/unit/vagrant/action/builtin/cloud_init_setup_test.rb b/test/unit/vagrant/action/builtin/cloud_init_setup_test.rb index 81602bca1..00628e97a 100644 --- a/test/unit/vagrant/action/builtin/cloud_init_setup_test.rb +++ b/test/unit/vagrant/action/builtin/cloud_init_setup_test.rb @@ -9,7 +9,7 @@ describe Vagrant::Action::Builtin::CloudInitSetup do let(:provider) { double("provider") } let(:machine) { double("machine", config: config, provider: provider, name: "machine", provider_name: "provider", data_dir: Pathname.new("/fake/dir"), - ui: ui, env: machine_env) } + ui: ui, env: machine_env, id: "123-456-789") } let(:host) { double("host") } let(:machine_env) { double("machine_env", root_path: "root", host: host) } let(:env) { { ui: ui, machine: machine, env: machine_env} } @@ -109,6 +109,8 @@ describe Vagrant::Action::Builtin::CloudInitSetup do allow(host).to receive(:capability?).with(:create_iso).and_return(true) allow(Dir).to receive(:mktmpdir).and_return(source_dir) expect(File).to receive(:open).with("#{source_dir}/user-data", 'w').and_return(true) + expect(File).to receive(:open).with("#{source_dir}/meta-data", 'w').and_return(true) + expect(FileUtils).to receive(:remove_entry).with(source_dir).and_return(true) allow(host).to receive(:capability).with(:create_iso, machine_env, source_dir).and_return(iso_path) subject.write_cfg_iso(machine, env, message)