Write down metadata for disk configs after configuring disks
This commit is contained in:
parent
ff77e6279b
commit
ec350861cd
@ -1,3 +1,5 @@
|
|||||||
|
require "json"
|
||||||
|
|
||||||
module Vagrant
|
module Vagrant
|
||||||
module Action
|
module Action
|
||||||
module Builtin
|
module Builtin
|
||||||
@ -14,17 +16,27 @@ module Vagrant
|
|||||||
# Call into providers machine implementation for disk management
|
# Call into providers machine implementation for disk management
|
||||||
if !defined_disks.empty?
|
if !defined_disks.empty?
|
||||||
if machine.provider.capability?(:configure_disks)
|
if machine.provider.capability?(:configure_disks)
|
||||||
machine.provider.capability(:configure_disks, defined_disks)
|
configured_disks = machine.provider.capability(:configure_disks, defined_disks)
|
||||||
else
|
else
|
||||||
env[:ui].warn(I18n.t("vagrant.actions.disk.provider_unsupported",
|
env[:ui].warn(I18n.t("vagrant.actions.disk.provider_unsupported",
|
||||||
provider: machine.provider_name))
|
provider: machine.provider_name))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
write_disk_metadata(machine, configured_disks)
|
||||||
|
|
||||||
# Continue On
|
# Continue On
|
||||||
@app.call(env)
|
@app.call(env)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def write_disk_metadata(machine, current_disks)
|
||||||
|
meta_file = machine.data_dir.join("disk_meta")
|
||||||
|
@logger.debug("Writing box metadata file to #{meta_file}")
|
||||||
|
File.open(meta_file.to_s, "w+") do |file|
|
||||||
|
file.write(JSON.dump(current_disks))
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def get_disks(machine, env)
|
def get_disks(machine, env)
|
||||||
return @_disks if @_disks
|
return @_disks if @_disks
|
||||||
|
|
||||||
|
|||||||
@ -110,6 +110,8 @@ module VagrantPlugins
|
|||||||
@name = "vagrant_primary"
|
@name = "vagrant_primary"
|
||||||
else
|
else
|
||||||
# TODO: Can't rely on `id` because it changes in between vagrant runs
|
# TODO: Can't rely on `id` because it changes in between vagrant runs
|
||||||
|
#
|
||||||
|
# INSTEAD: Make name a hard requirement, and see if that solves things
|
||||||
@name = "vagrant_#{@type.to_s}_#{@id.split("-").last}"
|
@name = "vagrant_#{@type.to_s}_#{@id.split("-").last}"
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|||||||
@ -10,6 +10,7 @@ module VagrantPlugins
|
|||||||
|
|
||||||
# @param [Vagrant::Machine] machine
|
# @param [Vagrant::Machine] machine
|
||||||
# @param [VagrantPlugins::Kernel_V2::VagrantConfigDisk] defined_disks
|
# @param [VagrantPlugins::Kernel_V2::VagrantConfigDisk] defined_disks
|
||||||
|
# @return [Hash] configured_disks - A hash of all the current configured disks
|
||||||
def self.configure_disks(machine, defined_disks)
|
def self.configure_disks(machine, defined_disks)
|
||||||
return if defined_disks.empty?
|
return if defined_disks.empty?
|
||||||
|
|
||||||
@ -19,21 +20,28 @@ module VagrantPlugins
|
|||||||
|
|
||||||
current_disks = machine.provider.driver.list_hdds
|
current_disks = machine.provider.driver.list_hdds
|
||||||
|
|
||||||
|
configured_disks = {disk: [], floppy: [], dvd: []}
|
||||||
|
|
||||||
defined_disks.each do |disk|
|
defined_disks.each do |disk|
|
||||||
if disk.type == :disk
|
if disk.type == :disk
|
||||||
handle_configure_disk(machine, disk, current_disks)
|
disk_data = handle_configure_disk(machine, disk, current_disks)
|
||||||
|
configured_disks[:disk] << disk_data unless disk_data.empty?
|
||||||
elsif disk.type == :floppy
|
elsif disk.type == :floppy
|
||||||
# TODO: Write me
|
# TODO: Write me
|
||||||
elsif disk.type == :dvd
|
elsif disk.type == :dvd
|
||||||
# TODO: Write me
|
# TODO: Write me
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return configured_disks
|
||||||
end
|
end
|
||||||
|
|
||||||
protected
|
protected
|
||||||
|
|
||||||
# Handles all disk configs of type `:disk`
|
# Handles all disk configs of type `:disk`
|
||||||
|
# @param [Hash] - disk_metadata
|
||||||
def self.handle_configure_disk(machine, disk, all_disks)
|
def self.handle_configure_disk(machine, disk, all_disks)
|
||||||
|
disk_metadata = {}
|
||||||
# Grab the existing configured disk, if it exists
|
# Grab the existing configured disk, if it exists
|
||||||
current_disk = nil
|
current_disk = nil
|
||||||
if disk.primary
|
if disk.primary
|
||||||
@ -45,13 +53,15 @@ module VagrantPlugins
|
|||||||
|
|
||||||
if !current_disk
|
if !current_disk
|
||||||
# create new disk and attach
|
# create new disk and attach
|
||||||
create_disk(machine, disk)
|
disk_metadata = create_disk(machine, disk)
|
||||||
elsif compare_disk_state(machine, disk, current_disk)
|
elsif compare_disk_state(machine, disk, current_disk)
|
||||||
resize_disk(machine, disk, current_disk)
|
disk_metadata = resize_disk(machine, disk, current_disk)
|
||||||
else
|
else
|
||||||
# log no need to reconfigure disk, already in desired state
|
# log no need to reconfigure disk, already in desired state
|
||||||
LOGGER.info("No further configuration required for disk '#{disk.name}'")
|
LOGGER.info("No further configuration required for disk '#{disk.name}'")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
return disk_metadata
|
||||||
end
|
end
|
||||||
|
|
||||||
# Check to see if current disk is configured based on defined_disks
|
# Check to see if current disk is configured based on defined_disks
|
||||||
@ -94,8 +104,13 @@ module VagrantPlugins
|
|||||||
|
|
||||||
# TODO: Round disk_config.size to the nearest 512 bytes to make it divisble by 512
|
# TODO: Round disk_config.size to the nearest 512 bytes to make it divisble by 512
|
||||||
# Source: https://www.virtualbox.org/ticket/5582
|
# Source: https://www.virtualbox.org/ticket/5582
|
||||||
|
#
|
||||||
|
# note: this might not be required... :thinking: needs more testing
|
||||||
LOGGER.info("Attempting to create a new disk file '#{disk_file}' of size '#{disk_config.size}' bytes")
|
LOGGER.info("Attempting to create a new disk file '#{disk_file}' of size '#{disk_config.size}' bytes")
|
||||||
machine.provider.driver.create_disk(disk_file, disk_config.size, disk_ext.upcase)
|
|
||||||
|
var = machine.provider.driver.create_disk(disk_file, disk_config.size, disk_ext.upcase)
|
||||||
|
# grab uuid from var, might also need disk name
|
||||||
|
disk_metadata = {uuid: var.split(':').last.strip, name: disk_config.name}
|
||||||
|
|
||||||
# TODO: Determine what port and device to attach disk to???
|
# TODO: Determine what port and device to attach disk to???
|
||||||
# look at guest_info and see what is in use
|
# look at guest_info and see what is in use
|
||||||
@ -104,6 +119,8 @@ module VagrantPlugins
|
|||||||
port = get_next_port(machine)
|
port = get_next_port(machine)
|
||||||
device = "0" # TODO: Fix me
|
device = "0" # TODO: Fix me
|
||||||
machine.provider.driver.attach_disk(machine.id, port, device, disk_file)
|
machine.provider.driver.attach_disk(machine.id, port, device, disk_file)
|
||||||
|
|
||||||
|
disk_metadata
|
||||||
end
|
end
|
||||||
|
|
||||||
# @param [Vagrant::Machine] machine
|
# @param [Vagrant::Machine] machine
|
||||||
@ -173,6 +190,10 @@ module VagrantPlugins
|
|||||||
else
|
else
|
||||||
machine.provider.driver.resize_disk(defined_disk["Location"], disk_config.size.to_i)
|
machine.provider.driver.resize_disk(defined_disk["Location"], disk_config.size.to_i)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
disk_metadata = {uuid: defined_disk["UUID"], name: defined_disk["Name"]}
|
||||||
|
return disk_metadata
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.vmdk_to_vdi(driver, defined_disk)
|
def self.vmdk_to_vdi(driver, defined_disk)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user