
From: ShaoHe Feng <shaohef@linux.vnet.ibm.com> This is a good feature to user, but it is not supported by low version libvirt. So we need to probe it. Signed-off-by: ShaoHe Feng <shaohef@linux.vnet.ibm.com> --- src/kimchi/featuretests.py | 43 ++++++++++++++++++++++++++++++++++++++++++- src/kimchi/model/config.py | 3 +++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/src/kimchi/featuretests.py b/src/kimchi/featuretests.py index 5192361..6eb29f4 100644 --- a/src/kimchi/featuretests.py +++ b/src/kimchi/featuretests.py @@ -62,8 +62,25 @@ SIMPLE_VM_XML = """ <type arch='x86_64' machine='pc'>hvm</type> <boot dev='hd'/> </os> + <devices> + %s + </devices> </domain>""" +SIMPLE_NETWORK_XML = """ +<network> + <name>%s</name> +</network> +""" + +VM_IFACE_XML = """ +<interface type='network'> + <mac address='52:54:00:12:34:56'/> + <source network='%s'/> + <model type='rtl8139'/> +</interface> +""" + SCSI_FC_XML = """ <pool type='scsi'> <name>TEST_SCSI_FC_POOL</name> @@ -196,7 +213,7 @@ class FeatureTests(object): rollback.prependDefer(FeatureTests.enable_screen_error_logging) conn = libvirt.open('qemu:///system') rollback.prependDefer(conn.close) - dom = conn.defineXML(SIMPLE_VM_XML) + dom = conn.defineXML(SIMPLE_VM_XML % "") rollback.prependDefer(dom.undefine) try: dom.setMetadata(libvirt.VIR_DOMAIN_METADATA_ELEMENT, @@ -206,3 +223,27 @@ class FeatureTests(object): return True except libvirt.libvirtError: return False + + @staticmethod + def change_live_vm_network(): + with RollbackContext() as rollback: + FeatureTests.disable_screen_error_logging() + rollback.prependDefer(FeatureTests.enable_screen_error_logging) + conn = libvirt.open('qemu:///system') + rollback.prependDefer(conn.close) + net1_name = "isolated_test_net1" + net2_name = "isolated_test_net2" + net1 = conn.networkCreateXML(SIMPLE_NETWORK_XML % net1_name) + rollback.prependDefer(net1.destroy) + net2 = conn.networkCreateXML(SIMPLE_NETWORK_XML % net2_name) + rollback.prependDefer(net2.destroy) + iface1_xml = VM_IFACE_XML % net1_name + iface2_xml = VM_IFACE_XML % net2_name + dom = conn.createXML(SIMPLE_VM_XML % iface1_xml, flags=0) + rollback.prependDefer(dom.destroy) + try: + dom.updateDeviceFlags(iface2_xml, + libvirt.VIR_DOMAIN_AFFECT_LIVE) + return True + except libvirt.libvirtError: + return False diff --git a/src/kimchi/model/config.py b/src/kimchi/model/config.py index 0ef0855..88ab681 100644 --- a/src/kimchi/model/config.py +++ b/src/kimchi/model/config.py @@ -54,6 +54,7 @@ class CapabilitiesModel(object): self.libvirt_stream_protocols = [] self.fc_host_support = False self.metadata_support = False + self.change_live_vm_network = False # Subscribe function to set host capabilities to be run when cherrypy # server is up @@ -67,6 +68,8 @@ class CapabilitiesModel(object): self.nfs_target_probe = FeatureTests.libvirt_support_nfs_probe() self.fc_host_support = FeatureTests.libvirt_support_fc_host() self.metadata_support = FeatureTests.has_metadata_support() + self.change_live_vm_network = FeatureTests.change_live_vm_network() + self.libvirt_stream_protocols = [] for p in ['http', 'https', 'ftp', 'ftps', 'tftp']: -- 1.9.0