Skip to content
This repository was archived by the owner on Jan 22, 2026. It is now read-only.

Commit 1f3f61b

Browse files
committed
Sorted features alphabetically in XML. Keep disks in device node order
1 parent d263829 commit 1f3f61b

5 files changed

Lines changed: 48 additions & 38 deletions

File tree

tests/boot-fullyvirt-disk-block.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<boot dev='hd'/>
1010
</os>
1111
<features>
12-
<apic/><acpi/><pae/>
12+
<acpi/><apic/><pae/>
1313
</features>
1414
<on_poweroff>destroy</on_poweroff>
1515
<on_reboot>restart</on_reboot>

tests/boot-fullyvirt-disk-file.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<boot dev='hd'/>
1010
</os>
1111
<features>
12-
<apic/><acpi/><pae/>
12+
<acpi/><apic/><pae/>
1313
</features>
1414
<on_poweroff>destroy</on_poweroff>
1515
<on_reboot>restart</on_reboot>

tests/install-fullyvirt-disk-block.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<boot dev='cdrom'/>
1010
</os>
1111
<features>
12-
<apic/><acpi/><pae/>
12+
<acpi/><apic/><pae/>
1313
</features>
1414
<on_poweroff>destroy</on_poweroff>
1515
<on_reboot>destroy</on_reboot>

tests/install-fullyvirt-disk-file.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<boot dev='cdrom'/>
1010
</os>
1111
<features>
12-
<apic/><acpi/><pae/>
12+
<acpi/><apic/><pae/>
1313
</features>
1414
<on_poweroff>destroy</on_poweroff>
1515
<on_reboot>destroy</on_reboot>

virtinst/FullVirtGuest.py

Lines changed: 44 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,10 @@ class FullVirtGuest(Guest.XenGuest):
3131
"rhel3": { "label": "Red Hat Enterprise Linux 3", "distro": "rhel" }, \
3232
"rhel4": { "label": "Red Hat Enterprise Linux 4", "distro": "rhel" }, \
3333
"rhel5": { "label": "Red Hat Enterprise Linux 5", "distro": "rhel" }, \
34-
"centos5": { "label": "Cent OS 5", "distro": "centos" }, \
3534
"fedora5": { "label": "Fedora Core 5", "distro": "fedora" }, \
3635
"fedora6": { "label": "Fedora Core 6", "distro": "fedora" }, \
3736
"fedora7": { "label": "Fedora 7", "distro": "fedora" }, \
37+
"fedora8": { "label": "Fedora 7", "distro": "fedora" }, \
3838
"sles10": { "label": "Suse Linux Enterprise Server", "distro": "suse" }, \
3939
"generic24": { "label": "Generic 2.4.x kernel" }, \
4040
"generic26": { "label": "Generic 2.6.x kernel" }, \
@@ -165,7 +165,8 @@ def _get_features_xml(self):
165165
features = self.os_features()
166166
if features:
167167
ret += " "
168-
for (k, v) in features.items():
168+
for k in sorted(features.keys()):
169+
v = features[k]
169170
if v:
170171
ret += "<%s/>" %(k,)
171172
ret += "\n"
@@ -233,40 +234,49 @@ def _get_disk_xml(self, install = True):
233234
for i in range(4):
234235
n = "%s%c" % (self.disknode, ord('a') + i)
235236
nodes[n] = None
236-
cdroms = []
237-
hds = []
237+
238+
# First assign CDROM device nodes, since they're scarce resource
239+
cdnode = self.disknode + "c"
238240
for d in self.disks:
239-
if d.device == Guest.VirtualDisk.DEVICE_CDROM:
240-
cdroms.append(d)
241+
if d.device != Guest.VirtualDisk.DEVICE_CDROM:
242+
continue
243+
244+
if d.target:
245+
if d.target != cdnode:
246+
raise ValueError, "The CDROM must be device %s" % cdnode
241247
else:
242-
hds.append(d)
248+
d.target = cdnode
243249

244-
# CDROM gets special treatment
245-
cdnode = self.disknode + "c"
246-
if len(cdroms) > 1:
247-
raise ValueError, _("Can only use one CDROM")
248-
elif len(cdroms) == 1:
249-
cdrom = cdroms[0]
250-
cdrom_path = cdrom.path
251-
# Libvirt can't handle QEMU having an empty disk path
252-
if cdrom.transient and not install and self.type == "xen":
253-
cdrom.path = None
254-
if cdrom.target and cdrom.target != cdnode:
255-
raise ValueError, "The CDROM must be device %s" % cdnode
256-
ret += cdrom.get_xml_config(cdnode)
257-
cdrom.path = cdrom_path
258-
nodes[cdnode] = True
259-
260-
# Normal disks
261-
for d in hds:
262-
target = d.target
263-
if target is None:
264-
for t in sorted(nodes.keys()):
265-
if nodes[t] is None:
266-
target = t
250+
if nodes[d.target] != None:
251+
raise ValueError, "The CDROM device %s is already used" % d.target
252+
nodes[d.target] = d
253+
254+
# Now assign regular disk node with remainder
255+
for d in self.disks:
256+
if d.device == Guest.VirtualDisk.DEVICE_CDROM:
257+
continue
258+
259+
if d.target is None: # Auto-assign disk
260+
for n in sorted(nodes.keys()):
261+
if nodes[n] is None:
262+
d.target = n
263+
nodes[d.target] = d
267264
break
268-
if target is None or nodes[target] is not None:
269-
raise ValueError, _("Can't use more than 4 disks on a HVM guest")
270-
nodes[target] = True
271-
ret += d.get_xml_config(target)
265+
else:
266+
if nodes[d.target] != None: # Verify pre-assigned
267+
raise ValueError, "The disk device %s is already used" % d.target
268+
nodes[d.target] = d
269+
270+
for d in self.disks:
271+
saved_path = None
272+
if d.device == Guest.VirtualDisk.DEVICE_CDROM and d.transient and not install:
273+
# XXX hack. libvirt can't currently handle QEMU having an empty disk path
274+
if self.type == "xen":
275+
saved_path = d.path
276+
d.path = None
277+
278+
ret += d.get_xml_config(d.target)
279+
if saved_path != None:
280+
d.path = saved_path
281+
272282
return ret

0 commit comments

Comments
 (0)