app/models/manageiq/providers/ovirt/infra_manager/provision/disk.rb
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 endend