Ensure meta-data is also included in cloud-init iso

This commit is contained in:
Brian Cain 2020-06-18 11:07:56 -07:00
parent 6797b96cae
commit 39a12de38f
No known key found for this signature in database
GPG Key ID: 9FC4639B2E4510A0
2 changed files with 14 additions and 8 deletions

View File

@ -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

View File

@ -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)