Merge "libvirt: introduce method to get domain XML"
This commit is contained in:
commit
72db29d8fd
|
@ -248,7 +248,7 @@ class FakeVirtDomain(object):
|
|||
def createWithFlags(self, launch_flags):
|
||||
pass
|
||||
|
||||
def XMLDesc(self, *args):
|
||||
def XMLDesc(self, flags):
|
||||
return self._fake_dom_xml
|
||||
|
||||
def UUIDString(self):
|
||||
|
@ -449,7 +449,7 @@ class FakeNodeDevice(object):
|
|||
def __init__(self, fakexml):
|
||||
self.xml = fakexml
|
||||
|
||||
def XMLDesc(self, *args):
|
||||
def XMLDesc(self, flags):
|
||||
return self.xml
|
||||
|
||||
|
||||
|
@ -812,7 +812,7 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
|||
pci_devices[0]['hypervisor_name'] = 'marked'
|
||||
pass
|
||||
|
||||
def XMLDesc(self, flag):
|
||||
def XMLDesc(self, flags):
|
||||
return fake_domXML1
|
||||
|
||||
guest = libvirt_guest.Guest(FakeDomain())
|
||||
|
@ -856,7 +856,7 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
|||
def detachDeviceFlags(self, xml, flags):
|
||||
pass
|
||||
|
||||
def XMLDesc(self, flag):
|
||||
def XMLDesc(self, flags):
|
||||
return fake_domXML1
|
||||
|
||||
guest = libvirt_guest.Guest(FakeDomain())
|
||||
|
@ -5712,7 +5712,7 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
|||
vdmock = self.mox.CreateMock(fakelibvirt.virDomain)
|
||||
self.mox.StubOutWithMock(vdmock, "migrateToURI2")
|
||||
_bandwidth = CONF.libvirt.live_migration_bandwidth
|
||||
vdmock.XMLDesc(fakelibvirt.VIR_DOMAIN_XML_MIGRATABLE).AndReturn(
|
||||
vdmock.XMLDesc(flags=fakelibvirt.VIR_DOMAIN_XML_MIGRATABLE).AndReturn(
|
||||
initial_xml)
|
||||
vdmock.migrateToURI2(CONF.libvirt.live_migration_uri % 'dest',
|
||||
None,
|
||||
|
@ -6017,8 +6017,8 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
|||
_bandwidth).AndRaise(
|
||||
fakelibvirt.libvirtError('ERR'))
|
||||
else:
|
||||
vdmock.XMLDesc(fakelibvirt.VIR_DOMAIN_XML_MIGRATABLE).AndReturn(
|
||||
FakeVirtDomain().XMLDesc(0))
|
||||
vdmock.XMLDesc(flags=fakelibvirt.VIR_DOMAIN_XML_MIGRATABLE
|
||||
).AndReturn(FakeVirtDomain().XMLDesc(flags=0))
|
||||
vdmock.migrateToURI2(CONF.libvirt.live_migration_uri % 'dest',
|
||||
None,
|
||||
mox.IgnoreArg(),
|
||||
|
@ -6053,8 +6053,8 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
|||
self.mox.StubOutWithMock(vdmock, 'migrateToURI2')
|
||||
self.mox.StubOutWithMock(vdmock, 'migrateToURI')
|
||||
_bandwidth = CONF.libvirt.live_migration_bandwidth
|
||||
vdmock.XMLDesc(fakelibvirt.VIR_DOMAIN_XML_MIGRATABLE).AndReturn(
|
||||
FakeVirtDomain().XMLDesc(0))
|
||||
vdmock.XMLDesc(flags=fakelibvirt.VIR_DOMAIN_XML_MIGRATABLE).AndReturn(
|
||||
FakeVirtDomain().XMLDesc(flags=0))
|
||||
unsupported_config_error = fakelibvirt.libvirtError('ERR')
|
||||
unsupported_config_error.err = (
|
||||
fakelibvirt.VIR_ERR_CONFIG_UNSUPPORTED,)
|
||||
|
@ -6810,7 +6810,7 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
|||
# Preparing mocks
|
||||
vdmock = self.mox.CreateMock(fakelibvirt.virDomain)
|
||||
self.mox.StubOutWithMock(vdmock, "XMLDesc")
|
||||
vdmock.XMLDesc(0).AndReturn(dummyxml)
|
||||
vdmock.XMLDesc(flags=0).AndReturn(dummyxml)
|
||||
|
||||
def fake_lookup(instance_name):
|
||||
if instance_name == instance.name:
|
||||
|
@ -6900,7 +6900,7 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
|||
# Preparing mocks
|
||||
vdmock = self.mox.CreateMock(fakelibvirt.virDomain)
|
||||
self.mox.StubOutWithMock(vdmock, "XMLDesc")
|
||||
vdmock.XMLDesc(0).AndReturn(dummyxml)
|
||||
vdmock.XMLDesc(flags=0).AndReturn(dummyxml)
|
||||
|
||||
def fake_lookup(instance_name):
|
||||
if instance_name == instance.name:
|
||||
|
@ -6967,7 +6967,7 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
|||
# Preparing mocks
|
||||
vdmock = self.mox.CreateMock(fakelibvirt.virDomain)
|
||||
self.mox.StubOutWithMock(vdmock, "XMLDesc")
|
||||
vdmock.XMLDesc(0).AndReturn(dummyxml)
|
||||
vdmock.XMLDesc(flags=0).AndReturn(dummyxml)
|
||||
|
||||
def fake_lookup(instance_name):
|
||||
if instance_name == instance.name:
|
||||
|
@ -10198,7 +10198,7 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
|||
|
||||
vdmock = self.mox.CreateMock(fakelibvirt.virDomain)
|
||||
self.mox.StubOutWithMock(vdmock, "XMLDesc")
|
||||
vdmock.XMLDesc(0).AndReturn(dummyxml)
|
||||
vdmock.XMLDesc(flags=0).AndReturn(dummyxml)
|
||||
|
||||
def fake_lookup(instance_name):
|
||||
if instance_name == instance['name']:
|
||||
|
@ -10217,7 +10217,7 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
|||
|
||||
vdmock = self.mox.CreateMock(fakelibvirt.virDomain)
|
||||
self.mox.StubOutWithMock(vdmock, "XMLDesc")
|
||||
vdmock.XMLDesc(0).AndReturn(dummyxml)
|
||||
vdmock.XMLDesc(flags=0).AndReturn(dummyxml)
|
||||
|
||||
def fake_lookup(instance_name):
|
||||
if instance_name == instance['name']:
|
||||
|
@ -10238,7 +10238,7 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
|||
|
||||
vdmock = self.mox.CreateMock(fakelibvirt.virDomain)
|
||||
self.mox.StubOutWithMock(vdmock, "XMLDesc")
|
||||
vdmock.XMLDesc(0).AndReturn(dummyxml)
|
||||
vdmock.XMLDesc(flags=0).AndReturn(dummyxml)
|
||||
|
||||
def fake_lookup(instance_name):
|
||||
if instance_name == instance['name']:
|
||||
|
@ -10257,7 +10257,7 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
|||
|
||||
vdmock = self.mox.CreateMock(fakelibvirt.virDomain)
|
||||
self.mox.StubOutWithMock(vdmock, "XMLDesc")
|
||||
vdmock.XMLDesc(0).AndReturn(dummyxml)
|
||||
vdmock.XMLDesc(flags=0).AndReturn(dummyxml)
|
||||
|
||||
def fake_lookup(instance_name):
|
||||
if instance_name == instance['name']:
|
||||
|
@ -10884,8 +10884,8 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
|||
drvr._swap_volume(mock_dom, srcfile, dstfile, 1)
|
||||
|
||||
mock_dom.XMLDesc.assert_called_once_with(
|
||||
fakelibvirt.VIR_DOMAIN_XML_INACTIVE |
|
||||
fakelibvirt.VIR_DOMAIN_XML_SECURE)
|
||||
flags=(fakelibvirt.VIR_DOMAIN_XML_INACTIVE |
|
||||
fakelibvirt.VIR_DOMAIN_XML_SECURE))
|
||||
mock_dom.blockRebase.assert_called_once_with(
|
||||
srcfile, dstfile, 0,
|
||||
fakelibvirt.VIR_DOMAIN_BLOCK_REBASE_COPY |
|
||||
|
@ -10980,9 +10980,9 @@ class LibvirtConnTestCase(test.NoDBTestCase):
|
|||
drvr._live_snapshot(self.context, self.test_instance, mock_dom,
|
||||
srcfile, dstfile, "qcow2", {})
|
||||
|
||||
mock_dom.XMLDesc.assert_called_once_with(
|
||||
mock_dom.XMLDesc.assert_called_once_with(flags=(
|
||||
fakelibvirt.VIR_DOMAIN_XML_INACTIVE |
|
||||
fakelibvirt.VIR_DOMAIN_XML_SECURE)
|
||||
fakelibvirt.VIR_DOMAIN_XML_SECURE))
|
||||
mock_dom.blockRebase.assert_called_once_with(
|
||||
srcfile, dltfile, 0,
|
||||
fakelibvirt.VIR_DOMAIN_BLOCK_REBASE_COPY |
|
||||
|
@ -12029,7 +12029,7 @@ class LibvirtDriverTestCase(test.NoDBTestCase):
|
|||
def __init__(self):
|
||||
super(FakeExceptionDomain, self).__init__()
|
||||
|
||||
def XMLDesc(self, *args):
|
||||
def XMLDesc(self, flags):
|
||||
raise fakelibvirt.libvirtError("Libvirt error")
|
||||
|
||||
def fake_get_domain(self, instance):
|
||||
|
@ -13014,7 +13014,7 @@ class LibvirtVolumeSnapshotTestCase(test.NoDBTestCase):
|
|||
domain = FakeVirtDomain(fake_xml=self.dom_xml)
|
||||
self.mox.StubOutWithMock(domain, 'XMLDesc')
|
||||
self.mox.StubOutWithMock(domain, 'snapshotCreateXML')
|
||||
domain.XMLDesc(0).AndReturn(self.dom_xml)
|
||||
domain.XMLDesc(flags=0).AndReturn(self.dom_xml)
|
||||
|
||||
snap_xml_src = (
|
||||
'<domainsnapshot>\n'
|
||||
|
@ -13083,7 +13083,7 @@ class LibvirtVolumeSnapshotTestCase(test.NoDBTestCase):
|
|||
domain = FakeVirtDomain(fake_xml=self.dom_xml)
|
||||
self.mox.StubOutWithMock(domain, 'XMLDesc')
|
||||
self.mox.StubOutWithMock(domain, 'snapshotCreateXML')
|
||||
domain.XMLDesc(0).AndReturn(self.dom_xml)
|
||||
domain.XMLDesc(flags=0).AndReturn(self.dom_xml)
|
||||
|
||||
snap_xml_src = (
|
||||
'<domainsnapshot>\n'
|
||||
|
@ -13198,7 +13198,7 @@ class LibvirtVolumeSnapshotTestCase(test.NoDBTestCase):
|
|||
|
||||
domain = FakeVirtDomain(fake_xml=self.dom_xml)
|
||||
self.mox.StubOutWithMock(domain, 'XMLDesc')
|
||||
domain.XMLDesc(0).AndReturn(self.dom_xml)
|
||||
domain.XMLDesc(flags=0).AndReturn(self.dom_xml)
|
||||
|
||||
self.mox.StubOutWithMock(self.drvr._host, 'get_domain')
|
||||
self.mox.StubOutWithMock(self.drvr._host, 'has_min_version')
|
||||
|
@ -13232,7 +13232,7 @@ class LibvirtVolumeSnapshotTestCase(test.NoDBTestCase):
|
|||
|
||||
domain = FakeVirtDomain(fake_xml=self.dom_xml)
|
||||
self.mox.StubOutWithMock(domain, 'XMLDesc')
|
||||
domain.XMLDesc(0).AndReturn(self.dom_xml)
|
||||
domain.XMLDesc(flags=0).AndReturn(self.dom_xml)
|
||||
|
||||
self.mox.StubOutWithMock(self.drvr._host, 'get_domain')
|
||||
self.mox.StubOutWithMock(self.drvr._host, 'has_min_version')
|
||||
|
@ -13268,7 +13268,7 @@ class LibvirtVolumeSnapshotTestCase(test.NoDBTestCase):
|
|||
|
||||
domain = FakeVirtDomain(fake_xml=self.dom_xml)
|
||||
self.mox.StubOutWithMock(domain, 'XMLDesc')
|
||||
domain.XMLDesc(0).AndReturn(self.dom_xml)
|
||||
domain.XMLDesc(flags=0).AndReturn(self.dom_xml)
|
||||
|
||||
self.mox.StubOutWithMock(self.drvr._host, 'get_domain')
|
||||
self.mox.StubOutWithMock(self.drvr._host, 'has_min_version')
|
||||
|
@ -13301,7 +13301,7 @@ class LibvirtVolumeSnapshotTestCase(test.NoDBTestCase):
|
|||
|
||||
domain = FakeVirtDomain(fake_xml=self.dom_xml)
|
||||
self.mox.StubOutWithMock(domain, 'XMLDesc')
|
||||
domain.XMLDesc(0).AndReturn(self.dom_xml)
|
||||
domain.XMLDesc(flags=0).AndReturn(self.dom_xml)
|
||||
|
||||
self.mox.StubOutWithMock(self.drvr._host, 'get_domain')
|
||||
self.mox.StubOutWithMock(self.drvr._host, 'has_min_version')
|
||||
|
@ -13419,7 +13419,7 @@ class LibvirtVolumeSnapshotTestCase(test.NoDBTestCase):
|
|||
def __init__(self, *args, **kwargs):
|
||||
super(FakeNetdiskDomain, self).__init__(*args, **kwargs)
|
||||
|
||||
def XMLDesc(self, *args):
|
||||
def XMLDesc(self, flags):
|
||||
return self.dom_netdisk_xml
|
||||
|
||||
# libvirt lib doesn't have VIR_DOMAIN_BLOCK_REBASE_RELATIVE
|
||||
|
@ -13431,7 +13431,7 @@ class LibvirtVolumeSnapshotTestCase(test.NoDBTestCase):
|
|||
|
||||
domain = FakeNetdiskDomain(fake_xml=self.dom_netdisk_xml)
|
||||
self.mox.StubOutWithMock(domain, 'XMLDesc')
|
||||
domain.XMLDesc(0).AndReturn(self.dom_netdisk_xml)
|
||||
domain.XMLDesc(flags=0).AndReturn(self.dom_netdisk_xml)
|
||||
|
||||
self.mox.StubOutWithMock(self.drvr._host, 'get_domain')
|
||||
self.mox.StubOutWithMock(self.drvr._host, 'has_min_version')
|
||||
|
@ -13461,7 +13461,7 @@ class LibvirtVolumeSnapshotTestCase(test.NoDBTestCase):
|
|||
def __init__(self, *args, **kwargs):
|
||||
super(FakeNetdiskDomain, self).__init__(*args, **kwargs)
|
||||
|
||||
def XMLDesc(self, *args):
|
||||
def XMLDesc(self, flags):
|
||||
return self.dom_netdisk_xml
|
||||
|
||||
self.stubs.Set(libvirt_driver, 'libvirt', fakelibvirt)
|
||||
|
@ -13471,7 +13471,7 @@ class LibvirtVolumeSnapshotTestCase(test.NoDBTestCase):
|
|||
|
||||
domain = FakeNetdiskDomain(fake_xml=self.dom_netdisk_xml)
|
||||
self.mox.StubOutWithMock(domain, 'XMLDesc')
|
||||
domain.XMLDesc(0).AndReturn(self.dom_netdisk_xml)
|
||||
domain.XMLDesc(flags=0).AndReturn(self.dom_netdisk_xml)
|
||||
|
||||
self.mox.StubOutWithMock(self.drvr._host, 'get_domain')
|
||||
self.mox.StubOutWithMock(self.drvr._host, 'has_min_version')
|
||||
|
@ -13502,7 +13502,7 @@ class LibvirtVolumeSnapshotTestCase(test.NoDBTestCase):
|
|||
def __init__(self, *args, **kwargs):
|
||||
super(FakeNetdiskDomain, self).__init__(*args, **kwargs)
|
||||
|
||||
def XMLDesc(self, *args):
|
||||
def XMLDesc(self, flags):
|
||||
return self.dom_netdisk_xml
|
||||
|
||||
# libvirt lib doesn't have VIR_DOMAIN_BLOCK_COMMIT_RELATIVE
|
||||
|
@ -13514,7 +13514,7 @@ class LibvirtVolumeSnapshotTestCase(test.NoDBTestCase):
|
|||
|
||||
domain = FakeNetdiskDomain(fake_xml=self.dom_netdisk_xml)
|
||||
self.mox.StubOutWithMock(domain, 'XMLDesc')
|
||||
domain.XMLDesc(0).AndReturn(self.dom_netdisk_xml)
|
||||
domain.XMLDesc(flags=0).AndReturn(self.dom_netdisk_xml)
|
||||
|
||||
self.mox.StubOutWithMock(self.drvr._host, 'get_domain')
|
||||
self.mox.StubOutWithMock(self.drvr._host, 'has_min_version')
|
||||
|
@ -13543,7 +13543,7 @@ class LibvirtVolumeSnapshotTestCase(test.NoDBTestCase):
|
|||
def __init__(self, *args, **kwargs):
|
||||
super(FakeNetdiskDomain, self).__init__(*args, **kwargs)
|
||||
|
||||
def XMLDesc(self, *args):
|
||||
def XMLDesc(self, flags):
|
||||
return self.dom_netdisk_xml
|
||||
|
||||
self.stubs.Set(libvirt_driver, 'libvirt', fakelibvirt)
|
||||
|
@ -13553,7 +13553,7 @@ class LibvirtVolumeSnapshotTestCase(test.NoDBTestCase):
|
|||
|
||||
domain = FakeNetdiskDomain(fake_xml=self.dom_netdisk_xml)
|
||||
self.mox.StubOutWithMock(domain, 'XMLDesc')
|
||||
domain.XMLDesc(0).AndReturn(self.dom_netdisk_xml)
|
||||
domain.XMLDesc(flags=0).AndReturn(self.dom_netdisk_xml)
|
||||
|
||||
self.mox.StubOutWithMock(self.drvr._host, 'get_domain')
|
||||
self.mox.StubOutWithMock(self.drvr._host, 'has_min_version')
|
||||
|
|
|
@ -272,3 +272,43 @@ class GuestTestCase(test.NoDBTestCase):
|
|||
domain.detachDeviceFlags.assert_called_once_with(
|
||||
"</xml>", flags=(fakelibvirt.VIR_DOMAIN_AFFECT_CONFIG |
|
||||
fakelibvirt.VIR_DOMAIN_AFFECT_LIVE))
|
||||
|
||||
def test_get_xml_desc(self):
|
||||
domain = mock.Mock(spec=fakelibvirt.virDomain)
|
||||
guest = libvirt_guest.Guest(domain)
|
||||
guest.get_xml_desc()
|
||||
|
||||
domain.XMLDesc.assert_called_once_with(flags=0)
|
||||
|
||||
def test_get_xml_desc_dump_inactive(self):
|
||||
domain = mock.Mock(spec=fakelibvirt.virDomain)
|
||||
guest = libvirt_guest.Guest(domain)
|
||||
guest.get_xml_desc(dump_inactive=True)
|
||||
|
||||
domain.XMLDesc.assert_called_once_with(
|
||||
flags=fakelibvirt.VIR_DOMAIN_XML_INACTIVE)
|
||||
|
||||
def test_get_xml_desc_dump_sensitive(self):
|
||||
domain = mock.Mock(spec=fakelibvirt.virDomain)
|
||||
guest = libvirt_guest.Guest(domain)
|
||||
guest.get_xml_desc(dump_sensitive=True)
|
||||
|
||||
domain.XMLDesc.assert_called_once_with(
|
||||
flags=fakelibvirt.VIR_DOMAIN_XML_SECURE)
|
||||
|
||||
def test_get_xml_desc_dump_inactive_dump_sensitive(self):
|
||||
domain = mock.Mock(spec=fakelibvirt.virDomain)
|
||||
guest = libvirt_guest.Guest(domain)
|
||||
guest.get_xml_desc(dump_inactive=True, dump_sensitive=True)
|
||||
|
||||
domain.XMLDesc.assert_called_once_with(
|
||||
flags=(fakelibvirt.VIR_DOMAIN_XML_INACTIVE |
|
||||
fakelibvirt.VIR_DOMAIN_XML_SECURE))
|
||||
|
||||
def test_get_xml_desc_dump_migratable(self):
|
||||
domain = mock.Mock(spec=fakelibvirt.virDomain)
|
||||
guest = libvirt_guest.Guest(domain)
|
||||
guest.get_xml_desc(dump_migratable=True)
|
||||
|
||||
domain.XMLDesc.assert_called_once_with(
|
||||
flags=fakelibvirt.VIR_DOMAIN_XML_MIGRATABLE)
|
||||
|
|
|
@ -898,8 +898,7 @@ class LibvirtDriver(driver.ComputeDriver):
|
|||
"""
|
||||
guest = self._host.get_guest(instance)
|
||||
|
||||
# TODO(sahid): Should be moved in Guest object.
|
||||
xml = guest._domain.XMLDesc(0)
|
||||
xml = guest.get_xml_desc()
|
||||
tree = etree.fromstring(xml)
|
||||
|
||||
# The 'serial' device is the base for x86 platforms. Other platforms
|
||||
|
@ -1100,9 +1099,7 @@ class LibvirtDriver(driver.ComputeDriver):
|
|||
guest = libvirt_guest.Guest(domain)
|
||||
|
||||
# Save a copy of the domain's persistent XML file
|
||||
xml = domain.XMLDesc(
|
||||
libvirt.VIR_DOMAIN_XML_INACTIVE |
|
||||
libvirt.VIR_DOMAIN_XML_SECURE)
|
||||
xml = guest.get_xml_desc(dump_inactive=True, dump_sensitive=True)
|
||||
|
||||
# Abort is an idempotent operation, so make sure any block
|
||||
# jobs which may have failed are ended.
|
||||
|
@ -1180,7 +1177,7 @@ class LibvirtDriver(driver.ComputeDriver):
|
|||
block_device_info=None):
|
||||
try:
|
||||
guest = self._host.get_guest(instance)
|
||||
xml = guest._domain.XMLDesc(0)
|
||||
xml = guest.get_xml_desc()
|
||||
except exception.InstanceNotFound:
|
||||
image_meta = utils.get_image_from_system_metadata(
|
||||
instance.system_metadata)
|
||||
|
@ -1524,9 +1521,7 @@ class LibvirtDriver(driver.ComputeDriver):
|
|||
guest = libvirt_guest.Guest(domain)
|
||||
|
||||
# Save a copy of the domain's persistent XML file
|
||||
xml = domain.XMLDesc(
|
||||
libvirt.VIR_DOMAIN_XML_INACTIVE |
|
||||
libvirt.VIR_DOMAIN_XML_SECURE)
|
||||
xml = guest.get_xml_desc(dump_inactive=True, dump_sensitive=True)
|
||||
|
||||
# Abort is an idempotent operation, so make sure any block
|
||||
# jobs which may have failed are ended.
|
||||
|
@ -1615,7 +1610,10 @@ class LibvirtDriver(driver.ComputeDriver):
|
|||
|
||||
"""
|
||||
|
||||
xml = domain.XMLDesc(0)
|
||||
# TODO(sahid): An object Guest should be passed instead of
|
||||
# a "domain" as virDomain.
|
||||
guest = libvirt_guest.Guest(domain)
|
||||
xml = guest.get_xml_desc()
|
||||
xml_doc = etree.fromstring(xml)
|
||||
|
||||
device_info = vconfig.LibvirtConfigGuest()
|
||||
|
@ -1843,7 +1841,7 @@ class LibvirtDriver(driver.ComputeDriver):
|
|||
my_dev = None
|
||||
active_disk = None
|
||||
|
||||
xml = virt_dom.XMLDesc(0)
|
||||
xml = guest.get_xml_desc()
|
||||
xml_doc = etree.fromstring(xml)
|
||||
|
||||
device_info = vconfig.LibvirtConfigGuest()
|
||||
|
@ -2467,8 +2465,7 @@ class LibvirtDriver(driver.ComputeDriver):
|
|||
def get_console_output(self, context, instance):
|
||||
guest = self._host.get_guest(instance)
|
||||
|
||||
# TODO(sahid): Should be moved in Guest object.
|
||||
xml = guest._domain.XMLDesc(0)
|
||||
xml = guest.get_xml_desc()
|
||||
tree = etree.fromstring(xml)
|
||||
|
||||
console_types = {}
|
||||
|
@ -2549,8 +2546,7 @@ class LibvirtDriver(driver.ComputeDriver):
|
|||
def get_vnc_port_for_instance(instance_name):
|
||||
guest = self._host.get_guest(instance)
|
||||
|
||||
# TODO(sahid): Should be moved in Guest object.
|
||||
xml = guest._domain.XMLDesc(0)
|
||||
xml = guest.get_xml_desc()
|
||||
xml_dom = etree.fromstring(xml)
|
||||
|
||||
graphic = xml_dom.find("./devices/graphics[@type='vnc']")
|
||||
|
@ -2569,11 +2565,7 @@ class LibvirtDriver(driver.ComputeDriver):
|
|||
def get_spice_ports_for_instance(instance_name):
|
||||
guest = self._host.get_guest(instance)
|
||||
|
||||
# TODO(sahid): We are converting all calls from a
|
||||
# virDomain object to use nova.virt.libvirt.Guest.
|
||||
# We should be able to remove virt_dom at the end.
|
||||
virt_dom = guest._domain
|
||||
xml = virt_dom.XMLDesc(0)
|
||||
xml = guest.get_xml_desc()
|
||||
xml_dom = etree.fromstring(xml)
|
||||
|
||||
graphic = xml_dom.find("./devices/graphics[@type='spice']")
|
||||
|
@ -2979,7 +2971,7 @@ class LibvirtDriver(driver.ComputeDriver):
|
|||
guest.detach_device(self._get_guest_pci_device(dev), live=True)
|
||||
# after detachDeviceFlags returned, we should check the dom to
|
||||
# ensure the detaching is finished
|
||||
xml = guest._domain.XMLDesc(0)
|
||||
xml = guest.get_xml_desc()
|
||||
xml_doc = etree.fromstring(xml)
|
||||
guest_config = vconfig.LibvirtConfigGuest()
|
||||
guest_config.parse_dom(xml_doc)
|
||||
|
@ -4485,11 +4477,15 @@ class LibvirtDriver(driver.ComputeDriver):
|
|||
devices = []
|
||||
for dom in self._host.list_instance_domains():
|
||||
try:
|
||||
doc = etree.fromstring(dom.XMLDesc(0))
|
||||
# TODO(sahid): list_instance_domain should
|
||||
# be renamed as list_guest and so returning
|
||||
# Guest objects.
|
||||
guest = libvirt_guest.Guest(dom)
|
||||
doc = etree.fromstring(guest.get_xml_desc())
|
||||
except libvirt.libvirtError as e:
|
||||
LOG.warn(_LW("couldn't obtain the XML from domain:"
|
||||
" %(uuid)s, exception: %(ex)s") %
|
||||
{"uuid": dom.UUIDString(), "ex": e})
|
||||
{"uuid": guest.id, "ex": e})
|
||||
continue
|
||||
except Exception:
|
||||
continue
|
||||
|
@ -5449,6 +5445,8 @@ class LibvirtDriver(driver.ComputeDriver):
|
|||
This method is intended to be run in a background thread and will
|
||||
block that thread until the migration is finished or failed.
|
||||
"""
|
||||
# TODO(sahid): Should pass a guest to this method.
|
||||
guest = libvirt_guest.Guest(dom)
|
||||
|
||||
try:
|
||||
if block_migration:
|
||||
|
@ -5474,7 +5472,7 @@ class LibvirtDriver(driver.ComputeDriver):
|
|||
None,
|
||||
CONF.libvirt.live_migration_bandwidth)
|
||||
else:
|
||||
old_xml_str = dom.XMLDesc(migratable_flag)
|
||||
old_xml_str = guest.get_xml_desc(dump_migratable=True)
|
||||
new_xml_str = self._update_xml(old_xml_str,
|
||||
volume,
|
||||
listen_addrs)
|
||||
|
@ -6139,13 +6137,7 @@ class LibvirtDriver(driver.ComputeDriver):
|
|||
block_device_info=None):
|
||||
try:
|
||||
guest = self._host.get_guest(instance)
|
||||
|
||||
# TODO(sahid): We are converting all calls from a
|
||||
# virDomain object to use nova.virt.libvirt.Guest.
|
||||
# We should be able to remove dom at the end.
|
||||
dom = guest._domain
|
||||
|
||||
xml = dom.XMLDesc(0)
|
||||
xml = guest.get_xml_desc()
|
||||
except libvirt.libvirtError as ex:
|
||||
error_code = ex.get_error_code()
|
||||
LOG.warn(_LW('Error from libvirt while getting description of '
|
||||
|
@ -6167,8 +6159,13 @@ class LibvirtDriver(driver.ComputeDriver):
|
|||
disk_over_committed_size = 0
|
||||
for dom in self._host.list_instance_domains():
|
||||
try:
|
||||
xml = dom.XMLDesc(0)
|
||||
disk_infos = self._get_instance_disk_info(dom.name(), xml)
|
||||
# TODO(sahid): list_instance_domain should
|
||||
# be renamed as list_guest and so returning
|
||||
# Guest objects.
|
||||
guest = libvirt_guest.Guest(dom)
|
||||
xml = guest.get_xml_desc()
|
||||
|
||||
disk_infos = self._get_instance_disk_info(guest.name, xml)
|
||||
for info in disk_infos:
|
||||
disk_over_committed_size += int(
|
||||
info['over_committed_disk_size'])
|
||||
|
@ -6177,7 +6174,7 @@ class LibvirtDriver(driver.ComputeDriver):
|
|||
LOG.warn(_LW(
|
||||
'Error from libvirt while getting description of '
|
||||
'%(instance_name)s: [Error Code %(error_code)s] %(ex)s'
|
||||
) % {'instance_name': dom.name(),
|
||||
) % {'instance_name': guest.name,
|
||||
'error_code': error_code,
|
||||
'ex': ex})
|
||||
except OSError as e:
|
||||
|
@ -6186,14 +6183,14 @@ class LibvirtDriver(driver.ComputeDriver):
|
|||
'it is trying to get disk %(i_name)s, '
|
||||
'but disk file was removed by concurrent '
|
||||
'operations such as resize.'),
|
||||
{'i_name': dom.name()})
|
||||
{'i_name': guest.name})
|
||||
elif e.errno == errno.EACCES:
|
||||
LOG.warn(_LW('Periodic task is updating the host stat, '
|
||||
'it is trying to get disk %(i_name)s, '
|
||||
'but access is denied. It is most likely '
|
||||
'due to a VM that exists on the compute '
|
||||
'node but is not managed by Nova.'),
|
||||
{'i_name': dom.name()})
|
||||
{'i_name': guest.name})
|
||||
else:
|
||||
raise
|
||||
except exception.VolumeBDMPathNotFound as e:
|
||||
|
@ -6202,7 +6199,7 @@ class LibvirtDriver(driver.ComputeDriver):
|
|||
'but the backing volume block device was removed '
|
||||
'by concurrent operations such as resize. '
|
||||
'Error: %(error)s'),
|
||||
{'i_name': dom.name(),
|
||||
{'i_name': guest.name,
|
||||
'error': e})
|
||||
# NOTE(gtt116): give other tasks a chance.
|
||||
greenthread.sleep(0)
|
||||
|
@ -6575,7 +6572,7 @@ class LibvirtDriver(driver.ComputeDriver):
|
|||
except libvirt.libvirtError:
|
||||
pass
|
||||
# get io status
|
||||
xml = domain.XMLDesc(0)
|
||||
xml = guest.get_xml_desc()
|
||||
dom_io = LibvirtDriver._get_io_devices(xml)
|
||||
for guest_disk in dom_io["volumes"]:
|
||||
try:
|
||||
|
@ -6626,7 +6623,7 @@ class LibvirtDriver(driver.ComputeDriver):
|
|||
# We should be able to remove domain at the end.
|
||||
domain = guest._domain
|
||||
|
||||
xml = domain.XMLDesc(0)
|
||||
xml = guest.get_xml_desc()
|
||||
xml_doc = etree.fromstring(xml)
|
||||
|
||||
(state, max_mem, mem, num_cpu, cpu_time) = \
|
||||
|
|
|
@ -220,6 +220,21 @@ class Guest(object):
|
|||
flags |= live and libvirt.VIR_DOMAIN_AFFECT_LIVE or 0
|
||||
self._domain.detachDeviceFlags(conf.to_xml(), flags=flags)
|
||||
|
||||
def get_xml_desc(self, dump_inactive=False, dump_sensitive=False,
|
||||
dump_migratable=False):
|
||||
"""Returns xml description of guest.
|
||||
|
||||
:param dump_inactive: Dump inactive domain information
|
||||
:param dump_sensitive: Dump security sensitive information
|
||||
:param dump_migratable: Dump XML suitable for migration
|
||||
|
||||
:returns string: XML description of the guest
|
||||
"""
|
||||
flags = dump_inactive and libvirt.VIR_DOMAIN_XML_INACTIVE or 0
|
||||
flags |= dump_sensitive and libvirt.VIR_DOMAIN_XML_SECURE or 0
|
||||
flags |= dump_migratable and libvirt.VIR_DOMAIN_XML_MIGRATABLE or 0
|
||||
return self._domain.XMLDesc(flags=flags)
|
||||
|
||||
|
||||
class GuestVCPUInfo(object):
|
||||
def __init__(self, id, cpu, state, time):
|
||||
|
|
Loading…
Reference in New Issue