Guest: Add get_install_xml for install handling

This commit is contained in:
Cole Robinson 2013-07-24 11:32:30 -04:00
parent c7af25f7ae
commit 3cf7679beb
6 changed files with 34 additions and 44 deletions

View File

@ -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())

View File

@ -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)

View File

@ -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

View File

@ -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()

View File

@ -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

View File

@ -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 #