mirror of
https://github.com/virt-manager/virt-manager.git
synced 2025-02-25 18:55:27 -06:00
Guest: Add get_install_xml for install handling
This commit is contained in:
parent
c7af25f7ae
commit
3cf7679beb
@ -95,7 +95,7 @@ class TestImageParser(unittest.TestCase):
|
||||
g.installer = inst
|
||||
g._prepare_install(None)
|
||||
|
||||
actual_out = g.get_xml_config(install=False)
|
||||
actual_out = g.get_install_xml(install=False)
|
||||
expect_file = os.path.join(image2guestdir + fname)
|
||||
expect_out = utils.read_file(expect_file)
|
||||
expect_out = expect_out.replace("REPLACEME", os.getcwd())
|
||||
|
@ -69,8 +69,8 @@ class TestXMLConfig(unittest.TestCase):
|
||||
|
||||
guest._prepare_install(progress.BaseMeter())
|
||||
try:
|
||||
actualXML = guest.get_xml_config(install=do_install,
|
||||
disk_boot=do_disk_boot)
|
||||
actualXML = guest.get_install_xml(install=do_install,
|
||||
disk_boot=do_disk_boot)
|
||||
|
||||
if filename:
|
||||
utils.diff_compare(actualXML, filename)
|
||||
@ -98,9 +98,9 @@ class TestXMLConfig(unittest.TestCase):
|
||||
guest.installer._install_kernel = "kernel"
|
||||
guest.installer._install_initrd = "initrd"
|
||||
|
||||
xmlinst = guest.get_xml_config(True, False)
|
||||
xmlboot = guest.get_xml_config(False, False)
|
||||
xmlcont = guest.get_xml_config(True, True)
|
||||
xmlinst = guest.get_install_xml(True, False)
|
||||
xmlboot = guest.get_install_xml(False, False)
|
||||
xmlcont = guest.get_install_xml(True, True)
|
||||
|
||||
if instname:
|
||||
utils.diff_compare(xmlinst, instname)
|
||||
@ -319,11 +319,11 @@ class TestXMLConfig(unittest.TestCase):
|
||||
g.add_device(utils.get_virtual_network())
|
||||
|
||||
# Call get_xml_config sets first round of defaults w/o os_variant set
|
||||
g.get_xml_config(do_install)
|
||||
g.get_install_xml(do_install)
|
||||
g._prepare_install(None)
|
||||
g.get_xml_config(do_install)
|
||||
g.get_install_xml(do_install)
|
||||
g._prepare_install(None)
|
||||
g.get_xml_config(do_install)
|
||||
g.get_install_xml(do_install)
|
||||
|
||||
g.os_variant = "fedora11"
|
||||
self._compare(g, "install-f11", do_install)
|
||||
|
@ -379,7 +379,7 @@ class vmmDomain(vmmLibvirtObject):
|
||||
return
|
||||
|
||||
guest = self._get_guest_to_define()
|
||||
xml = guest.get_xml_config(install=False)
|
||||
xml = guest.get_xml_config()
|
||||
self._redefine_xml(xml)
|
||||
|
||||
def _get_domain_xml(self, inactive=False, refresh_if_nec=True):
|
||||
@ -390,7 +390,7 @@ class vmmDomain(vmmLibvirtObject):
|
||||
def get_xml(self, inactive=False, refresh_if_nec=True):
|
||||
guest = self._get_guest(inactive=inactive,
|
||||
refresh_if_nec=refresh_if_nec)
|
||||
return guest.get_xml_config(install=False)
|
||||
return guest.get_xml_config()
|
||||
|
||||
def _get_guest(self, inactive=False, refresh_if_nec=True):
|
||||
xml = self._get_domain_xml(inactive, refresh_if_nec)
|
||||
@ -1780,7 +1780,7 @@ class vmmDomainVirtinst(vmmDomain):
|
||||
ignore = inactive
|
||||
ignore = refresh_if_nec
|
||||
|
||||
xml = self._backend.get_xml_config(install=False)
|
||||
xml = self._backend.get_install_xml(install=False)
|
||||
if not self._orig_xml:
|
||||
self._orig_xml = xml
|
||||
return xml
|
||||
|
@ -26,7 +26,6 @@ import signal
|
||||
|
||||
import urlgrabber.progress as progress
|
||||
import libvirt
|
||||
import libxml2
|
||||
|
||||
import virtinst
|
||||
from virtinst import util
|
||||
@ -502,7 +501,14 @@ class Guest(XMLBuilder):
|
||||
def _finish_get_xml(self, data):
|
||||
self._devices, self.features, self.os = data
|
||||
|
||||
def _get_xml_config(self, install=True, disk_boot=False):
|
||||
def get_install_xml(self, *args, **kwargs):
|
||||
data = self._prepare_get_xml()
|
||||
try:
|
||||
return self._do_get_install_xml(*args, **kwargs)
|
||||
finally:
|
||||
self._finish_get_xml(data)
|
||||
|
||||
def _do_get_install_xml(self, install=True, disk_boot=False):
|
||||
"""
|
||||
Return the full Guest xml configuration.
|
||||
|
||||
@ -518,21 +524,19 @@ class Guest(XMLBuilder):
|
||||
this.)
|
||||
@type disk_boot: C{bool}
|
||||
"""
|
||||
# pylint: disable=W0221
|
||||
# Argument number differs from overridden method
|
||||
|
||||
osblob_install = install and not disk_boot
|
||||
if osblob_install and not self.installer.has_install_phase():
|
||||
return None
|
||||
|
||||
self.installer.alter_bootconfig(self, osblob_install, self.os)
|
||||
self.set_defaults()
|
||||
self._set_transient_device_defaults(install)
|
||||
|
||||
action = install and "destroy" or "restart"
|
||||
self.on_reboot = action
|
||||
self.on_crash = action
|
||||
|
||||
self._set_defaults()
|
||||
|
||||
self.bootloader = None
|
||||
if (not install and
|
||||
self.os.is_xenpv() and
|
||||
@ -541,7 +545,7 @@ class Guest(XMLBuilder):
|
||||
self.os.clear()
|
||||
|
||||
self._recalculate_device_xpaths()
|
||||
return self._make_xml_stub()
|
||||
return self.get_xml_config()
|
||||
|
||||
def get_continue_inst(self):
|
||||
"""
|
||||
@ -718,8 +722,8 @@ class Guest(XMLBuilder):
|
||||
log_label = is_initial and "install" or "continue"
|
||||
disk_boot = not is_initial
|
||||
|
||||
start_xml = self.get_xml_config(install=True, disk_boot=disk_boot)
|
||||
final_xml = self.get_xml_config(install=False)
|
||||
start_xml = self.get_install_xml(install=True, disk_boot=disk_boot)
|
||||
final_xml = self.get_install_xml(install=False)
|
||||
|
||||
logging.debug("Generated %s XML: %s",
|
||||
log_label,
|
||||
@ -854,13 +858,7 @@ class Guest(XMLBuilder):
|
||||
if do_remove_media(dev):
|
||||
dev.path = None
|
||||
|
||||
def set_defaults(self):
|
||||
"""
|
||||
Public function to set guest defaults. Things like preferred
|
||||
disk bus (unless one is specified). These changes are persistent.
|
||||
The install process will call a non-persistent version, so calling
|
||||
this manually isn't required.
|
||||
"""
|
||||
def _set_defaults(self):
|
||||
self._set_osxml_defaults()
|
||||
self._set_feature_defaults()
|
||||
self._set_device_defaults()
|
||||
|
@ -19,7 +19,6 @@
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
# MA 02110-1301 USA.
|
||||
|
||||
import virtinst
|
||||
from virtinst.xmlbuilder import XMLBuilder, XMLProperty
|
||||
|
||||
|
||||
@ -71,8 +70,8 @@ class VirtualDevice(XMLBuilder):
|
||||
virtual_device_classes = {}
|
||||
|
||||
@classmethod
|
||||
def register_type(c):
|
||||
VirtualDevice.virtual_device_classes[c.virtual_device_type] = c
|
||||
def register_type(cls):
|
||||
VirtualDevice.virtual_device_classes[cls.virtual_device_type] = cls
|
||||
|
||||
# General device type (disk, interface, etc.)
|
||||
virtual_device_type = None
|
||||
|
@ -621,10 +621,10 @@ class XMLBuilder(object):
|
||||
|
||||
def set_root_xpath(self, xpath):
|
||||
self._xml_root_xpath = xpath
|
||||
|
||||
xmlprops = self.all_xml_props()
|
||||
|
||||
for propname in self._XML_PROP_ORDER:
|
||||
if propname in self.all_xml_props():
|
||||
if propname in xmlprops:
|
||||
continue
|
||||
for prop in util.listify(getattr(self, propname)):
|
||||
prop.set_root_xpath(xpath)
|
||||
@ -637,11 +637,10 @@ class XMLBuilder(object):
|
||||
return xpath
|
||||
return "%s%s" % (self._xml_root_xpath, xpath.strip("."))
|
||||
|
||||
def get_xml_config(self, *args, **kwargs):
|
||||
def get_xml_config(self):
|
||||
data = self._prepare_get_xml()
|
||||
try:
|
||||
return self._do_get_xml_config(self._dumpxml_xpath,
|
||||
*args, **kwargs)
|
||||
return self._do_get_xml_config(self._dumpxml_xpath)
|
||||
finally:
|
||||
self._finish_get_xml(data)
|
||||
|
||||
@ -649,7 +648,7 @@ class XMLBuilder(object):
|
||||
for prop in self.all_xml_props().values():
|
||||
prop._clear(self)
|
||||
|
||||
def _do_get_xml_config(self, dumpxml_xpath, *args, **kwargs):
|
||||
def _do_get_xml_config(self, dumpxml_xpath):
|
||||
"""
|
||||
Construct and return object xml
|
||||
|
||||
@ -664,7 +663,7 @@ class XMLBuilder(object):
|
||||
ret = _sanitize_libxml_xml(node.serialize())
|
||||
else:
|
||||
xmlstub = self._make_xml_stub(fail=False)
|
||||
ret = self._get_xml_config(*args, **kwargs)
|
||||
ret = self._make_xml_stub(fail=True)
|
||||
if ret is None:
|
||||
return None
|
||||
|
||||
@ -700,12 +699,6 @@ class XMLBuilder(object):
|
||||
def _finish_get_xml(self, data):
|
||||
ignore = data
|
||||
|
||||
def _get_xml_config(self):
|
||||
"""
|
||||
Internal XML building function. Must be overwritten by subclass
|
||||
"""
|
||||
return self._make_xml_stub(fail=True)
|
||||
|
||||
|
||||
########################
|
||||
# Internal XML parsers #
|
||||
|
Loading…
Reference in New Issue
Block a user