Class: Vagrant::Action::Builtin::CloudInitSetup
- Inherits:
-
Object
- Object
- Vagrant::Action::Builtin::CloudInitSetup
- Defined in:
- lib/vagrant/action/builtin/cloud_init_setup.rb
Constant Summary collapse
- TEMP_PREFIX =
"vagrant-cloud-init-iso-temp-".freeze
Instance Method Summary collapse
-
#attach_disk_config(machine, env, iso_path) ⇒ Object
Adds a new :dvd disk config with the given iso_path to be attached to the guest later.
- #call(env) ⇒ Object
-
#generate_cfg_msg(machine, text_cfgs) ⇒ Vagrant::Util::Mime::Multipart
Combines all known cloud_init configs into a multipart mixed MIME text message.
-
#initialize(app, env) ⇒ CloudInitSetup
constructor
A new instance of CloudInitSetup.
-
#read_text_cfg(machine, cfg) ⇒ Vagrant::Util::Mime::Entity
Reads an individual cloud_init config and stores its contents and the content_type as a MIME text.
-
#setup_user_data(machine, env, user_data_cfgs) ⇒ Vagrant::Util::Mime::MultiPart
User_data.
-
#write_cfg_iso(machine, env, user_data, meta_data) ⇒ Object
Writes the contents of the guests cloud_init config to a tmp dir and passes that source directory along to the host cap to be written to an iso.
Constructor Details
#initialize(app, env) ⇒ CloudInitSetup
Returns a new instance of CloudInitSetup.
13 14 15 16 |
# File 'lib/vagrant/action/builtin/cloud_init_setup.rb', line 13 def initialize(app, env) @app = app @logger = Log4r::Logger.new("vagrant::action::builtin::cloudinit::setup") end |
Instance Method Details
#attach_disk_config(machine, env, iso_path) ⇒ Object
Adds a new :dvd disk config with the given iso_path to be attached to the guest later
117 118 119 120 121 |
# File 'lib/vagrant/action/builtin/cloud_init_setup.rb', line 117 def attach_disk_config(machine, env, iso_path) @logger.info("Adding cloud_init iso '#{iso_path}' to disk config") machine.config.vm.disk :dvd, file: iso_path, name: "vagrant-cloud_init-disk" machine.config.vm.disks.each { |d| d.finalize! if d.type == :dvd && d.file == iso_path } end |
#call(env) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/vagrant/action/builtin/cloud_init_setup.rb', line 18 def call(env) machine = env[:machine] user_data_configs = machine.config.vm.cloud_init_configs .select { |c| c.type == :user_data } if !user_data_configs.empty? user_data = setup_user_data(machine, env, user_data_configs) = { "instance-id" => "i-#{machine.id.split('-').join}" } write_cfg_iso(machine, env, user_data, ) end # Continue On @app.call(env) end |
#generate_cfg_msg(machine, text_cfgs) ⇒ Vagrant::Util::Mime::Multipart
Combines all known cloud_init configs into a multipart mixed MIME text message
72 73 74 75 76 77 78 79 80 81 |
# File 'lib/vagrant/action/builtin/cloud_init_setup.rb', line 72 def generate_cfg_msg(machine, text_cfgs) msg = Vagrant::Util::Mime::Multipart.new msg.headers["MIME-Version"] = "1.0" text_cfgs.each do |c| msg.add(c) end msg end |
#read_text_cfg(machine, cfg) ⇒ Vagrant::Util::Mime::Entity
Reads an individual cloud_init config and stores its contents and the content_type as a MIME text
54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/vagrant/action/builtin/cloud_init_setup.rb', line 54 def read_text_cfg(machine, cfg) if cfg.path text = File.read(Pathname.new(cfg.path).(machine.env.root_path)) else text = cfg.inline end text_msg = Vagrant::Util::Mime::Entity.new(text, cfg.content_type) text_msg.disposition = "attachment; filename=\"#{File.basename(cfg.content_disposition_filename).gsub('"', '\"')}\"" if cfg.content_disposition_filename text_msg end |
#setup_user_data(machine, env, user_data_cfgs) ⇒ Vagrant::Util::Mime::MultiPart
Returns user_data.
39 40 41 42 43 44 45 46 |
# File 'lib/vagrant/action/builtin/cloud_init_setup.rb', line 39 def setup_user_data(machine, env, user_data_cfgs) machine.ui.info(I18n.t("vagrant.actions.vm.cloud_init_user_data_setup")) text_cfgs = user_data_cfgs.map { |cfg| read_text_cfg(machine, cfg) } user_data = generate_cfg_msg(machine, text_cfgs) user_data end |
#write_cfg_iso(machine, env, user_data, meta_data) ⇒ Object
Writes the contents of the guests cloud_init config to a tmp dir and passes that source directory along to the host cap to be written to an iso
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/vagrant/action/builtin/cloud_init_setup.rb', line 90 def write_cfg_iso(machine, env, user_data, ) iso_path = nil if env[:env].host.capability?(:create_iso) begin source_dir = Pathname.new(Dir.mktmpdir(TEMP_PREFIX)) File.open("#{source_dir}/user-data", 'w') { |file| file.write(user_data.to_s) } File.open("#{source_dir}/meta-data", 'w') { |file| file.write(.to_yaml) } iso_path = env[:env].host.capability(:create_iso, source_dir, volume_id: "cidata") attach_disk_config(machine, env, iso_path.to_path) ensure FileUtils.remove_entry(source_dir) end else raise Errors::CreateIsoHostCapNotFound end end |