Bug 1007759
| Summary: | libvirt should forbid to attach a device with boot order for the first time if the os/boot element exists | ||
|---|---|---|---|
| Product: | Red Hat Enterprise Linux 7 | Reporter: | hongming <honzhang> |
| Component: | libvirt | Assignee: | Jiri Denemark <jdenemar> |
| Status: | CLOSED ERRATA | QA Contact: | Virtualization Bugs <virt-bugs> |
| Severity: | medium | Docs Contact: | |
| Priority: | medium | ||
| Version: | 7.0 | CC: | dyuan, jiahu, mzhan, rbalakri, vivianzhang |
| Target Milestone: | rc | ||
| Target Release: | --- | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | libvirt-1.2.7-1.el7 | Doc Type: | Bug Fix |
| Doc Text: | Story Points: | --- | |
| Clone Of: | 1007754 | Environment: | |
| Last Closed: | 2015-03-05 07:24:49 UTC | Type: | Bug |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
| Embargoed: | |||
| Bug Depends On: | 1007754 | ||
| Bug Blocks: | |||
|
Comment 2
zhengqin
2013-11-19 10:06:04 UTC
This is now fixed upstream by v1.2.2-292-g6dc75f5..v1.2.2-295-g585076c:
commit 6dc75f565418a169d6b86e059bcce3d0082c8e3e
Author: Jiri Denemark <jdenemar>
Date: Thu Mar 20 13:04:06 2014 +0100
Fix usage of virDomainDefCompatibleDevice
A device needs to be checked for compatibility with the domain
definition it corresponds to. Specifically, for VIR_DOMAIN_AFFECT_CONFIG
case we should check against persistent def rather than active def.
Signed-off-by: Jiri Denemark <jdenemar>
commit 1c13166134bd2dd1fc5711e421ac5f983bece6a6
Author: Jiri Denemark <jdenemar>
Date: Thu Mar 20 13:39:20 2014 +0100
Pass action to virDomainDefCompatibleDevice
When checking compatibility of a device with a domain definition, we
should know what we're going to do with the device. Because we may need
to check for different things when we're attaching a new device versus
detaching an existing device.
Signed-off-by: Jiri Denemark <jdenemar>
commit 563a12b3463e9a665fae02589437ecd6dba89f6b
Author: Jiri Denemark <jdenemar>
Date: Thu Mar 20 22:34:00 2014 +0100
conf: Introduce virDomainDeviceGetInfo API
The offset of virDomainDeviceInfo structure within a device definition
varies with device type and some types do not contain the info structure
at all. This new API makes it easier to access the info structure from a
generic virDomainDeviceDef structure.
Signed-off-by: Jiri Denemark <jdenemar>
commit 585076c7e602bb52d34fad83963035fc03652248
Author: Jiri Denemark <jdenemar>
Date: Thu Mar 20 15:34:32 2014 +0100
Check boot order on device attach
https://bugzilla.redhat.com/show_bug.cgi?id=1007754
When attaching a new device, we need to check if its boot order
configuration is compatible with current domain definition.
Signed-off-by: Jiri Denemark <jdenemar>
*** Bug 1030789 has been marked as a duplicate of this bug. *** I can produce this bug on libvirt-0.10.2-46.el6.x86_64
verify it on
libvirt-1.2.8-8.el7.x86_64
qemu-kvm-rhev-2.1.2-12.el7.x86_64
kernel-3.10.0-208.el7.x86_64
verify steps:
1. prepare a guest in shut off
# virsh list --all
Id Name State
----------------------------------------------------
- rhel7new shut off
# virsh dumpxml rhel7new
<domain type='kvm' id='24'>
<name>rhel7new</name>
<uuid>e73cdb84-e02c-4bb3-939f-f76d8d3c140a</uuid>
<memory unit='KiB'>1048576</memory>
<currentMemory unit='KiB'>1048576</currentMemory>
<vcpu placement='static'>1</vcpu>
<resource>
<partition>/machine</partition>
</resource>
<os>
<type arch='x86_64' machine='pc-i440fx-rhel7.1.0'>hvm</type>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
<pae/>
</features>
<cpu mode='custom' match='exact'>
<model fallback='allow'>SandyBridge</model>
</cpu>
<clock offset='utc'>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='hpet' present='no'/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>restart</on_crash>
<pm>
<suspend-to-mem enabled='no'/>
<suspend-to-disk enabled='no'/>
</pm>
<devices>
<emulator>/usr/libexec/qemu-kvm</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/rhel7new.qcow2'/>
<backingStore/>
<target dev='hda' bus='ide'/>
<alias name='ide0-0-0'/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
<controller type='usb' index='0' model='ich9-ehci1'>
<alias name='usb0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci1'>
<alias name='usb0'/>
<master startport='0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci2'>
<alias name='usb0'/>
<master startport='2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci3'>
<alias name='usb0'/>
<master startport='4'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
</controller>
<controller type='pci' index='0' model='pci-root'>
<alias name='pci.0'/>
</controller>
<controller type='ide' index='0'>
<alias name='ide0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
</controller>
<controller type='virtio-serial' index='0'>
<alias name='virtio-serial0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</controller>
<interface type='network'>
<mac address='52:54:00:c2:c6:e4'/>
<source network='default'/>
<target dev='vnet2'/>
<model type='rtl8139'/>
<alias name='net0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<serial type='pty'>
<source path='/dev/pts/10'/>
<target port='0'/>
<alias name='serial0'/>
</serial>
<console type='pty' tty='/dev/pts/10'>
<source path='/dev/pts/10'/>
<target type='serial' port='0'/>
<alias name='serial0'/>
</console>
<channel type='spicevmc'>
<target type='virtio' name='com.redhat.spice.0'/>
<alias name='channel0'/>
<address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>
<input type='mouse' bus='ps2'/>
<input type='keyboard' bus='ps2'/>
<graphics type='spice' port='5902' autoport='yes' listen='127.0.0.1'>
<listen type='address' address='127.0.0.1'/>
</graphics>
<sound model='ich6'>
<alias name='sound0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
</sound>
<video>
<model type='qxl' ram='65536' vram='65536' heads='1'/>
<alias name='video0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
</video>
<redirdev bus='usb' type='spicevmc'>
<alias name='redir0'/>
</redirdev>
<redirdev bus='usb' type='spicevmc'>
<alias name='redir1'/>
</redirdev>
<redirdev bus='usb' type='spicevmc'>
<alias name='redir2'/>
</redirdev>
<redirdev bus='usb' type='spicevmc'>
<alias name='redir3'/>
</redirdev>
<memballoon model='virtio'>
<alias name='balloon0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</memballoon>
</devices>
<seclabel type='dynamic' model='selinux' relabel='yes'>
<label>system_u:system_r:svirt_t:s0:c732,c897</label>
<imagelabel>system_u:object_r:svirt_image_t:s0:c732,c897</imagelabel>
</seclabel>
</domain>
2. prepare a network device xml with boot order
# cat /tmp/nic.xml
<interface type='network'>
<source network='default'/>
<boot order='1'/>
</interface>
3. attach it to guest with --config, xml check error reported right
# virsh attach-device rhel7new /tmp/nic.xml --config
error: Failed to attach device from /tmp/nic.xml
error: unsupported configuration: per-device boot elements cannot be used together with os/boot elements
4.start guest success, and dumpxml without the network device
# virsh start rhel7new
Domain rhel7new started
# virsh dumpxml rhel7new |grep boot
<boot dev='hd'/>
<on_reboot>restart</on_reboot>
5. restart libvirtd, guest still in running and work well after login
# service libvirtd restart
Redirecting to /bin/systemctl restart libvirtd.service
# virsh list --all
Id Name State
----------------------------------------------------
25 rhel7new running
6. remove <boot dev='hd'/> and add boot order in disk from guest xml
...
<os>
<type arch='x86_64' machine='pc-i440fx-rhel7.1.0'>hvm</type>
</os>
...
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/var/lib/libvirt/images/rhel7new.qcow2'/>
<target dev='hda' bus='ide'/>
<boot order='1'/>
<address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
...
7. prepare network device xml with boot order = 2
# cat /tmp/nic1.xml
<interface type='network'>
<source network='default'/>
<boot order='2'/>
</interface>
8. attach device it to guest success with --config
# virsh attach-device rhel7new /tmp/nic1.xml --config
Device attached successfully
# virsh dumpxml rhel7new |grep boot
<on_reboot>restart</on_reboot>
<boot order='1'/>
<boot order='2'/>
9. start guest success without error and login guest, work well
# virsh start rhel7new
Domain rhel7new started
10. re attach the nic1.xml with boot order =2
# virsh attach-device rhel7new /tmp/nic1.xml --config
error: Failed to attach device from /tmp/nic1.xml
error: unsupported configuration: boot order 2 is already used by another device
11 prepare a disk device with boot order =5 and attach it with --config
# cat /tmp/disk.xml
<disk type='file' device='disk'>
<driver name='qemu' type='raw' cache='none'/>
<source file='/var/lib/libvirt/images/test.img'/>
<target dev='hdb' bus='ide'/>
<boot order='5'/>
</disk>
# virsh attach-device rhel7new /tmp/disk.xml --config
Device attached successfully
# virsh start rhel7new
Domain rhel7new started
# virsh dumpxml rhel7new |grep boot
<on_reboot>restart</on_reboot>
<boot order='1'/>
<boot order='5'/>
<boot order='2'/>
12. restart libvirtd again, then check guest running and works normal
# service libvirtd restart
Redirecting to /bin/systemctl restart libvirtd.service
# virsh list --all
Id Name State
----------------------------------------------------
28 rhel7new running
move this bug to verified
Since the problem described in this bug report should be resolved in a recent advisory, it has been closed with a resolution of ERRATA. For information on the advisory, and where to find the updated files, follow the link below. If the solution does not work for you, open a new bug report. https://rhn.redhat.com/errata/RHSA-2015-0323.html |