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

Commit 007cb91

Browse files
committed
Guest: Use temporary 'features' in set_defaults
Similar treatment to how we do devices, don't splice in defaults at XML fetch time.
1 parent a333123 commit 007cb91

1 file changed

Lines changed: 19 additions & 17 deletions

File tree

virtinst/Guest.py

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -889,20 +889,11 @@ def _get_emulator_xml(self):
889889

890890
return emu_xml
891891

892-
def _get_features_xml(self):
892+
def _get_features_xml(self, features):
893893
"""
894894
Return features (pae, acpi, apic) xml
895895
"""
896-
defaults = {}
897-
if self.is_hvm():
898-
for f in ["acpi", "apic"]:
899-
defaults[f] = self._lookup_osdict_key(f)
900-
901-
caps = self._get_caps()
902-
if caps:
903-
defaults["pae"] = caps.support_pae()
904-
905-
return self.features.get_xml_config(defaults)
896+
return features.get_xml_config()
906897

907898
def _get_cpu_xml(self):
908899
"""
@@ -1014,6 +1005,7 @@ def _get_xml_config(self, install=True, disk_boot=False):
10141005
for dev in origdevs:
10151006
newdev = copy.copy(dev)
10161007
devs.append(newdev)
1008+
tmpfeat = copy.copy(self.features)
10171009

10181010
def get_transient_devices(devtype):
10191011
return self._dev_build_list(devtype, devs)
@@ -1022,7 +1014,8 @@ def remove_transient_device(device):
10221014

10231015
# Set device defaults so we can validly generate XML
10241016
self._set_defaults(get_transient_devices,
1025-
remove_transient_device)
1017+
remove_transient_device,
1018+
tmpfeat)
10261019

10271020
if install:
10281021
action = "destroy"
@@ -1053,7 +1046,7 @@ def remove_transient_device(device):
10531046
xml = add(" <uuid>%s</uuid>" % self.uuid)
10541047
xml = add(desc_xml)
10551048
xml = add(" %s" % osblob)
1056-
xml = add(self._get_features_xml())
1049+
xml = add(self._get_features_xml(tmpfeat))
10571050
xml = add(self._get_cpu_xml())
10581051
xml = add(self._get_clock_xml())
10591052
xml = add(" <on_poweroff>destroy</on_poweroff>")
@@ -1364,9 +1357,10 @@ def set_defaults(self):
13641357
The install process will call a non-persistent version, so calling
13651358
this manually isn't required.
13661359
"""
1367-
self._set_defaults(self.get_devices, self.remove_device)
1360+
self._set_defaults(self.get_devices, self.remove_device,
1361+
self.features)
13681362

1369-
def _set_hvm_defaults(self, devlist_func):
1363+
def _set_hvm_defaults(self, devlist_func, features):
13701364
disktype = VirtualDevice.VIRTUAL_DEV_DISK
13711365
nettype = VirtualDevice.VIRTUAL_DEV_NET
13721366
disk_bus = self._lookup_device_param(disktype, "bus")
@@ -1385,6 +1379,14 @@ def _set_hvm_defaults(self, devlist_func):
13851379
if self.clock.offset == None:
13861380
self.clock.offset = self._lookup_osdict_key("clock")
13871381

1382+
if features["acpi"] is None:
1383+
features["acpi"] = self._lookup_osdict_key("acpi")
1384+
if features["apic"] is None:
1385+
features["apic"] = self._lookup_osdict_key("apic")
1386+
if features["pae"] is None and self._get_caps():
1387+
features["pae"] = self._get_caps().support_pae()
1388+
1389+
13881390
def _set_pv_defaults(self, devlist_func, remove_func):
13891391
# Default file backed PV guests to tap driver
13901392
for d in devlist_func(VirtualDevice.VIRTUAL_DEV_DISK):
@@ -1403,9 +1405,9 @@ def _set_pv_defaults(self, devlist_func, remove_func):
14031405
if hasattr(d, "virtinst_default"):
14041406
remove_func(d)
14051407

1406-
def _set_defaults(self, devlist_func, remove_func):
1408+
def _set_defaults(self, devlist_func, remove_func, features):
14071409
if self.is_hvm():
1408-
self._set_hvm_defaults(devlist_func)
1410+
self._set_hvm_defaults(devlist_func, features)
14091411
if self.is_xen():
14101412
self._set_pv_defaults(devlist_func, remove_func)
14111413

0 commit comments

Comments
 (0)