On Fri, Sep 10, 2021 at 14:53:23 +0200, Vojtech Juranek wrote:
Hi,
when adding support for CD disk on block based storage into oVirt,
I spotted following issue. When starting VM without CD, we add
startupPolicy='optional' attribute into <source> element.
Whole XML looks like this:
<disk type='file' device='cdrom'>
<driver name='qemu' error_policy='report'/>
<source startupPolicy='optional'/>
<target dev='sdc' bus='sata'/>
<readonly/>
<alias name='ua-d7003457-63c3-4c98-80f0-08ab5042c65e'/>
<address type='drive' controller='0' bus='0'
target='0' unit='2'/>
</disk>
To change/insert CD we use libvirt.updateDeviceFlags() with XML which
looks like this (for block based disk):
<?xml version='1.0' encoding='utf-8'?>
<disk device="cdrom" type="block">
<source
dev="/rhev/data-center/mnt/blockSD/cdac2a0c-b110-456d-a988-7d588626c871/images/638247d7-b4b1-4d98-87fa-c90235fcf4b1/145e7cd2-f92d-4eec-a8fb-6835b4b652e1"
/>
<target bus="sata" dev="sdc" />
</disk>
However, updateDeviceFlags() fails with
libvirt.libvirtError: XML error: 'startupPolicy' is only valid for
'file' type volume
What is the reason for this error? We don't use `startupPolicy` attribute for block
based disks, as shown on example above.
Hmm, the bug is that the disk source change is attempted before the
update to startup policy, thus the validator is unhappy.