Bug #22656
closedovirt vm creation fails for slow storage backend
Description
We encountered the following kind of errors when trying to create VM on ovirt 4.1 via Foreman:
Failed to create a compute xxx (oVirt) instance xxx: Cannot remove VM: The following disks are locked: xxx_Disk2, xxx_Disk1. Please try again in a few minutes.
|
| OVIRT::OvirtException: Cannot remove VM: The following disks are locked: xxx_Disk2, xxx_Disk1. Please try again in a few minutes
The error only occurred on slow storage devices as volumes backend.
Looking through app/models/compute_resources/foreman/model/ovirt.rb model I saw that it is destroying the vm if either interfaces or volumes creation fails.
I also identified the following piece of code for volume creation:
def create_volumes(vm, attrs)
#add volumes
volumes = nested_attributes_for :volumes, attrs
volumes.map do |vol|
set_preallocated_attributes!(vol, vol[:preallocate])
#The blocking true is a work-around for ovirt bug fixed in ovirt version 3.1.
vm.add_volume({:bootable => 'false', :quota => ovirt_quota, :blocking => api_version.to_f < 3.1}.merge(vol)) if vol[:id].blank?
end
vm.volumes.reload
end
Changing 3.1 with 5.1 (actually enforcing blocking behavior) solved the issue.
So it seems that for ovirt 4.1 and slow storage devices the code must wait until the volume is added.