Add validation for disk configs
This commit is contained in:
parent
a18ce4f732
commit
995c4bbc60
|
@ -8,6 +8,8 @@ module VagrantPlugins
|
||||||
# Config class for a given Disk
|
# Config class for a given Disk
|
||||||
#-------------------------------------------------------------------
|
#-------------------------------------------------------------------
|
||||||
|
|
||||||
|
DEFAULT_DISK_TYPES = [:disk, :dvd, :floppy].freeze
|
||||||
|
|
||||||
# Note: This value is for internal use only
|
# Note: This value is for internal use only
|
||||||
#
|
#
|
||||||
# @return [String]
|
# @return [String]
|
||||||
|
@ -29,17 +31,20 @@ module VagrantPlugins
|
||||||
# @return [String]
|
# @return [String]
|
||||||
attr_accessor :name
|
attr_accessor :name
|
||||||
|
|
||||||
# Type of disk to create
|
# Type of disk to create. Defaults to `:disk`
|
||||||
#
|
#
|
||||||
# @return [Symbol]
|
# @return [Symbol]
|
||||||
attr_accessor :type
|
attr_accessor :type
|
||||||
|
|
||||||
# Size of disk to create
|
# Size of disk to create
|
||||||
#
|
#
|
||||||
|
# TODO: Should we have shortcuts for GB???
|
||||||
|
#
|
||||||
# @return [Integer]
|
# @return [Integer]
|
||||||
attr_accessor :size
|
attr_accessor :size
|
||||||
|
|
||||||
# Determines if this disk is the _main_ disk, or an attachment. Defaults to true
|
# Determines if this disk is the _main_ disk, or an attachment.
|
||||||
|
# Defaults to true.
|
||||||
#
|
#
|
||||||
# @return [Boolean]
|
# @return [Boolean]
|
||||||
attr_accessor :primary
|
attr_accessor :primary
|
||||||
|
@ -60,8 +65,9 @@ module VagrantPlugins
|
||||||
def initialize(type)
|
def initialize(type)
|
||||||
@logger = Log4r::Logger.new("vagrant::config::vm::trigger::config")
|
@logger = Log4r::Logger.new("vagrant::config::vm::trigger::config")
|
||||||
|
|
||||||
|
@type = type
|
||||||
|
|
||||||
@name = UNSET_VALUE
|
@name = UNSET_VALUE
|
||||||
@type = UNSET_VALUE
|
|
||||||
@provider_type = UNSET_VALUE
|
@provider_type = UNSET_VALUE
|
||||||
@size = UNSET_VALUE
|
@size = UNSET_VALUE
|
||||||
@primary = UNSET_VALUE
|
@primary = UNSET_VALUE
|
||||||
|
@ -102,11 +108,13 @@ module VagrantPlugins
|
||||||
def finalize!
|
def finalize!
|
||||||
# Ensure all config options are set to nil or default value if untouched
|
# Ensure all config options are set to nil or default value if untouched
|
||||||
# by user
|
# by user
|
||||||
@name = nil if @name == UNSET_VALUE
|
@type = :disk if @type == UNSET_VALUE
|
||||||
@type = nil if @type == UNSET_VALUE
|
|
||||||
@size = nil if @size == UNSET_VALUE
|
@size = nil if @size == UNSET_VALUE
|
||||||
@primary = true if @primary == UNSET_VALUE
|
@primary = true if @primary == UNSET_VALUE
|
||||||
|
|
||||||
|
# generate name instead of nil if unset_value
|
||||||
|
@name = nil if @name == UNSET_VALUE
|
||||||
|
|
||||||
@config = nil if @config == UNSET_VALUE
|
@config = nil if @config == UNSET_VALUE
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -116,6 +124,15 @@ module VagrantPlugins
|
||||||
|
|
||||||
# validate type with list of known disk types
|
# validate type with list of known disk types
|
||||||
|
|
||||||
|
if !DEFAULT_DISK_TYPES.include?(@type)
|
||||||
|
errors << "Disk type '#{@type}' is not a valid type. Please pick one of the following supported disk types: #{DEFAULT_DISK_TYPES.join(', ')}"
|
||||||
|
end
|
||||||
|
|
||||||
|
# TODO: Convert a string to int here?
|
||||||
|
if !@size.is_a?(Integer)
|
||||||
|
errors << "Config option size for disk is not an integer"
|
||||||
|
end
|
||||||
|
|
||||||
errors
|
errors
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -580,7 +580,6 @@ module VagrantPlugins
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# TODO: This might need to be more complicated
|
|
||||||
@__disks.each do |d|
|
@__disks.each do |d|
|
||||||
d.finalize!
|
d.finalize!
|
||||||
end
|
end
|
||||||
|
@ -786,6 +785,17 @@ module VagrantPlugins
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Validate disks
|
||||||
|
# Check if there is more than one primrary disk defined and throw an error
|
||||||
|
if @__disks.select { |d| d.primary && d.type == :disk }.size > 1
|
||||||
|
errors << "There is more than one disk defined for guest '#{machine.name}'. Please pick a `primary` disk."
|
||||||
|
end
|
||||||
|
|
||||||
|
@__disks.each do |d|
|
||||||
|
error = d.validate(machine)
|
||||||
|
errors.concat error if !error.empty?
|
||||||
|
end
|
||||||
|
|
||||||
# We're done with VM level errors so prepare the section
|
# We're done with VM level errors so prepare the section
|
||||||
errors = { "vm" => errors }
|
errors = { "vm" => errors }
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue