class VagrantPlugins::ProviderLibvirt::Util::DiskDeviceResolver
Attributes
existing[R]
Public Class Methods
new(prefix='vd')
click to toggle source
# File lib/vagrant-libvirt/util/resolvers.rb, line 12 def initialize(prefix='vd') @default_prefix = prefix @device_indicies = Hash.new @existing = Hash.new end
Public Instance Methods
resolve(disks)
click to toggle source
# File lib/vagrant-libvirt/util/resolvers.rb, line 46 def resolve(disks) new_disks = [] disks.each do |disk| new_disks.push disk.dup end resolve!(new_disks) new_disks end
resolve!(disks, options={})
click to toggle source
# File lib/vagrant-libvirt/util/resolvers.rb, line 19 def resolve!(disks, options={}) # check for duplicate device entries and raise an exception if one found # with enough details that the user should be able to determine what # to do to resolve. disks.select { |x| !x[:device].nil? }.each do |x| if @existing.has_key?(x[:device]) raise Errors::DuplicateDiskDevice, new_disk: x, existing_disk: @existing[x[:device]] end @existing[x[:device]] = x end disks.each_index do |index| dev = disks[index][:device] if dev.nil? prefix = options.fetch(:prefix, @default_prefix) dev = next_device(prefix=prefix) if dev.nil? raise Errors::NoDiskDeviceAvailable, prefix: prefix end disks[index][:device] = dev @existing[dev] = disks[index] end end end
Private Instance Methods
device_index(prefix)
click to toggle source
# File lib/vagrant-libvirt/util/resolvers.rb, line 73 def device_index(prefix) @device_indicies[prefix] ||= 'a'.ord end
next_device(prefix)
click to toggle source
# File lib/vagrant-libvirt/util/resolvers.rb, line 59 def next_device(prefix) curr = device_index(prefix) while curr <= 'z'.ord dev = prefix + curr.chr if !@existing[dev].nil? curr += 1 next else @device_indicies[prefix] = curr return dev end end end