diff --git a/plugins/kernel_v2/config/disk.rb b/plugins/kernel_v2/config/disk.rb index e443f5f8a..90ca1c781 100644 --- a/plugins/kernel_v2/config/disk.rb +++ b/plugins/kernel_v2/config/disk.rb @@ -11,7 +11,6 @@ module VagrantPlugins #------------------------------------------------------------------- DEFAULT_DISK_TYPES = [:disk, :dvd, :floppy].freeze - DEFAULT_DISK_EXT = ["vdi", "vmdk", "vhd", "vhdx"].freeze # Note: This value is for internal use only # @@ -136,13 +135,18 @@ module VagrantPlugins types: DEFAULT_DISK_TYPES.join(', ')) end - if !DEFAULT_DISK_EXT.include?(@disk_ext) - errors << I18n.t("vagrant.config.disk.invalid_ext", ext: @disk_ext, - name: @name, exts: DEFAULT_DISK_EXT.join(', ') ) - end - if @disk_ext @disk_ext = @disk_ext.downcase + + if machine.provider.capability?(:validate_disk_ext) + if !machine.provider.capability(:validate_disk_ext, @disk_ext) + errors << I18n.t("vagrant.config.disk.invalid_ext", ext: @disk_ext, + name: @name, + exts: machine.provider.capability(:get_default_disk_ext).join(', ')) + end + else + @logger.warn("No provider capability defined to validate 'disk_ext' type") + end end if @size && !@size.is_a?(Integer) diff --git a/plugins/providers/virtualbox/cap/validate_disk_ext.rb b/plugins/providers/virtualbox/cap/validate_disk_ext.rb new file mode 100644 index 000000000..3715a91d0 --- /dev/null +++ b/plugins/providers/virtualbox/cap/validate_disk_ext.rb @@ -0,0 +1,27 @@ +require "log4r" + +module VagrantPlugins + module ProviderVirtualBox + module Cap + module ValidateDiskExt + LOGGER = Log4r::Logger.new("vagrant::plugins::virtualbox::validate_disk_ext") + + # The default set of disk formats that VirtualBox supports + DEFAULT_DISK_EXT = ["vdi", "vmdk", "vhd"].freeze + + # @param [Vagrant::Machine] machine + # @param [String] disk_ext + # @return [Bool] + def self.validate_disk_ext(machine, disk_ext) + DEFAULT_DISK_EXT.include?(disk_ext) + end + + # @param [Vagrant::Machine] machine + # @return [Array] + def self.get_default_disk_ext(machine) + DEFAULT_DISK_EXT + end + end + end + end +end diff --git a/plugins/providers/virtualbox/plugin.rb b/plugins/providers/virtualbox/plugin.rb index e5b3e03a5..9cb46b54e 100644 --- a/plugins/providers/virtualbox/plugin.rb +++ b/plugins/providers/virtualbox/plugin.rb @@ -49,6 +49,16 @@ module VagrantPlugins Cap::CleanupDisks end + provider_capability(:virtualbox, :validate_disk_ext) do + require_relative "cap/validate_disk_ext" + Cap::ValidateDiskExt + end + + provider_capability(:virtualbox, :get_default_disk_ext) do + require_relative "cap/validate_disk_ext" + Cap::ValidateDiskExt + end + provider_capability(:virtualbox, :snapshot_list) do require_relative "cap" Cap