ManageIQ/manageiq-providers-ovirt

View on GitHub
app/models/manageiq/providers/ovirt/infra_manager/provision/disk.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
module ManageIQ::Providers::Ovirt::InfraManager::Provision::Disk
def configure_dialog_disks
added_disks = options[:disk_scsi]
return nil if added_disks.blank?
 
options[:disks_add] = prepare_disks_for_add(added_disks)
end
 
def add_disks(disks)
destination.ext_management_system.with_disk_attachments_service(destination) do |service|
disks.each { |disk| service.add(disk) }
end
end
 
def destination_disks_locked?
destination.ext_management_system.with_provider_connection do |connection|
system_service = connection.system_service
disks = system_service.vms_service.vm_service(destination.uid_ems).disk_attachments_service.list
disks.each do |disk|
fetched_disk = system_service.disks_service.disk_service(disk.id).get
return true unless fetched_disk.try(:status) == "ok"
end
end
 
false
end
 
private
 
def prepare_disks_for_add(disks_spec)
Use `filter_map` instead.
disks_spec.collect do |disk_spec|
disk = prepare_disk_for_add(disk_spec)
_log.info("disk: #{disk.inspect}")
disk
end.compact
end
 
def prepare_disk_for_add(disk_spec)
storage = find_storage!(disk_spec)
da_options = {
:size_in_mb => disk_spec[:sizeInMB],
:storage => storage,
:name => disk_spec[:filename],
:thin_provisioned => disk_spec[:backing] && disk_spec[:backing][:thinprovisioned],
:bootable => disk_spec[:bootable],
:interface => disk_spec[:interface]
}
 
disk_attachment_builder = ManageIQ::Providers::Ovirt::InfraManager::DiskAttachmentBuilder.new(da_options)
disk_attachment_builder.disk_attachment
end
 
def find_storage!(disk_spec)
storage_name = disk_spec[:datastore]
if storage_name.blank?
raise MiqException::MiqProvisionError, "Storage is required for disk: <#{disk_spec.inspect}>"
end
 
storage = ext_management_system.hosts.collect do |h|
h.writable_storages.find_by(:name => storage_name)
end.uniq.compact.first
 
if storage.nil?
error = "Unable to find storage: <#{storage_name}> for disk: <#{disk_spec.inspect}>"
raise MiqException::MiqProvisionError, error
end
 
storage
end
end