From 4df346c5c63b79d1859885a28ea856991dd6019f Mon Sep 17 00:00:00 2001 From: Brian Cain Date: Fri, 13 Dec 2019 10:22:33 -0800 Subject: [PATCH] Add resize for disks Also add warnings in case disk resize request is smaller than original disk size. --- plugins/providers/virtualbox/cap/configure_disks.rb | 13 ++++++++++--- plugins/providers/virtualbox/driver/base.rb | 4 +++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/plugins/providers/virtualbox/cap/configure_disks.rb b/plugins/providers/virtualbox/cap/configure_disks.rb index a5698b081..06fa390a4 100644 --- a/plugins/providers/virtualbox/cap/configure_disks.rb +++ b/plugins/providers/virtualbox/cap/configure_disks.rb @@ -44,7 +44,7 @@ module VagrantPlugins machine.ui.warn("Disk '#{disk.name}' not found in guest. Creating and attaching disk to guest...") # create new disk and attach create_disk(machine, disk) - elsif !compare_disk_state(disk, current_disk) + elsif compare_disk_state(machine, disk, current_disk) machine.ui.warn("Disk '#{disk.name}' needs to be resized. Attempting to resize disk...", prefix: true) resize_disk(machine, disk, current_disk) else @@ -58,11 +58,18 @@ module VagrantPlugins # @param [Kernel_V2::VagrantConfigDisk] disk_config # @param [Hash] defined_disk # @return [Boolean] - def self.compare_disk_state(disk_config, defined_disk) + def self.compare_disk_state(machine, disk_config, defined_disk) requested_disk_size = Vagrant::Util::Numeric.bytes_to_megabytes(disk_config.size) defined_disk_size = defined_disk["Capacity"].split(" ").first.to_f - return defined_disk_size == requested_disk_size + if defined_disk_size > requested_disk_size + machine.ui.warn("VirtualBox does not support shrinking disk size. Cannot shrink '#{disk_config.name}' disks size") + return false + elsif defined_disk_size < requested_disk_size + return true + else + return false + end end # Creates and attaches a disk to a machine diff --git a/plugins/providers/virtualbox/driver/base.rb b/plugins/providers/virtualbox/driver/base.rb index 289cfea43..9ca21e224 100644 --- a/plugins/providers/virtualbox/driver/base.rb +++ b/plugins/providers/virtualbox/driver/base.rb @@ -416,7 +416,9 @@ module VagrantPlugins # todo: better error handling for this execute # todo: MEDIUM changes if virtualbox is older than 5. Need a proper check/switch # Maybe move this into version_4, then version_5 - execute("modify#{MEDIUM}", disk_file, '--resize', disk_size_in_mb.to_s) + # if version 4, medium = "hd" + medium = "medium" + execute("modify#{medium}", disk_file, '--resizebyte', disk_size_in_mb.to_i.to_s) end # Creates a disk. Default format is VDI unless overridden