[PATCH] Make VMs for tests auto-destroy'd and transient

If Kimchi's startup is interrupted for some reason, a VM created during the feature tests may be left defined. When this happens, the next time Kimchi is started it will fail with an error that the domain already exists (for example, "libvirtError: operation failed: domain 'A_SIMPLE_VM' already exists with uuid e6fccea8-f7ed-4320-a4cb-b85217d23985"). About the new flag: "If the VIR_DOMAIN_START_AUTODESTROY flag is set, the guest domain will be automatically destroyed when the virConnectPtr object is finally released. This will also happen if the client application crashes / loses its connection to the libvirtd daemon. Any domains marked for auto destroy will block attempts at migration, save-to-file, or snapshots." This patch also changes the memory in the test VMs, due to the fact that the domain will be started, and some platforms (Power is a known example) require at least 128M of memory for a guest. Signed-off-by: Christy Perez <christy@linux.vnet.ibm.com> --- src/kimchi/kvmusertests.py | 5 ++--- src/kimchi/model/featuretests.py | 14 ++++++++------ 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/kimchi/kvmusertests.py b/src/kimchi/kvmusertests.py index 408706d..3abf148 100644 --- a/src/kimchi/kvmusertests.py +++ b/src/kimchi/kvmusertests.py @@ -54,9 +54,8 @@ def probe_user(cls): with RollbackContext() as rollback: conn = libvirt.open(None) rollback.prependDefer(conn.close) - dom = conn.defineXML(xml) - rollback.prependDefer(dom.undefine) - dom.create() + dom = conn.createXML(xml, + flags=libvirt.VIR_DOMAIN_START_AUTODESTROY) rollback.prependDefer(dom.destroy) with open('/var/run/libvirt/qemu/%s.pid' % vm_name) as f: pidStr = f.read() diff --git a/src/kimchi/model/featuretests.py b/src/kimchi/model/featuretests.py index 5a45990..ef7dcc5 100644 --- a/src/kimchi/model/featuretests.py +++ b/src/kimchi/model/featuretests.py @@ -58,7 +58,7 @@ SIMPLE_VM_XML = """ <domain type='%(domain)s'> <name>A_SIMPLE_VM</name> - <memory unit='KiB'>10240</memory> + <memory unit='KiB'>131072</memory> <os> <type arch='%(arch)s'>hvm</type> <boot dev='hd'/> @@ -109,8 +109,9 @@ def libvirt_supports_iso_stream(conn, protocol): 'arch': arch} try: FeatureTests.disable_libvirt_error_logging() - dom = conn.defineXML(xml) - dom.undefine() + dom = conn.createXML(xml, + flags=libvirt.VIR_DOMAIN_START_AUTODESTROY) + dom.destroy() return True except libvirt.libvirtError, e: kimchi_log.error(e.message) @@ -196,9 +197,10 @@ def has_metadata_support(conn): domain_type = 'test' if conn.getType().lower() == 'test' else 'kvm' arch = 'ppc64' if platform.machine() == 'ppc64le' \ else platform.machine() - dom = conn.defineXML(SIMPLE_VM_XML % {'domain': domain_type, - 'arch': arch}) - rollback.prependDefer(dom.undefine) + dom = conn.createXML(SIMPLE_VM_XML % {'domain': domain_type, + 'arch': arch}, + flags=libvirt.VIR_DOMAIN_START_AUTODESTROY) + rollback.prependDefer(dom.destroy) try: dom.setMetadata(libvirt.VIR_DOMAIN_METADATA_ELEMENT, "<metatest/>", KIMCHI_NAMESPACE, -- 1.9.3

After applying this patch I got several error when starting up the Kimchi server. Please, check below. Also the Capabilities API is returning a different result with/without this patch: *with* this patch: alinefm@alinefm:~/kimchi$ curl -u <user:password> -H "Content-Type: application/json" -H "Accept: application/json" -k https://localhst:8001/config/capabilities { "kernel_vfio":true, "repo_mngt_tool":"deb", "qemu_spice":true, "screenshot":null, "system_report_tool":true, "update_tool":true, "qemu_stream":true, "libvirt_stream_protocols":[], "auth":"pam", "federation":"off" } *without* this patch: alinefm@alinefm:~/kimchi$ curl -u <user:password> -H "Content-Type: application/json" -H "Accept: application/json" -k https://localhost:8001/config/capabilities { "kernel_vfio":true, "repo_mngt_tool":"deb", "qemu_spice":true, "screenshot":null, "system_report_tool":true, "update_tool":true, "qemu_stream":true, "libvirt_stream_protocols":[ "http", "https", "ftp", "ftps", "tftp" ], "auth":"pam", "federation":"off" } alinefm@alinefm:~/kimchi$ sudo python src/kimchid --environment=development Loading AptUpdate features. [05/Feb/2015:16:48:47] ENGINE Listening for SIGHUP. [05/Feb/2015:16:48:47] ENGINE Listening for SIGTERM. [05/Feb/2015:16:48:47] ENGINE Listening for SIGUSR1. [05/Feb/2015:16:48:47] ENGINE Bus STARTING [05/Feb/2015:16:48:47] ENGINE Started monitor thread 'Autoreloader'. [05/Feb/2015:16:48:47] ENGINE Serving on http://127.0.0.1:8010 *** Running feature tests *** 127.0.0.1 - - [05/Feb/2015:16:48:47] "HEAD /images/icon-fedora.png HTTP/1.1" 200 4449 "" "" 127.0.0.1 - - [05/Feb/2015:16:48:47] "GET /images/icon-fedora.png HTTP/1.1" 206 4449 "" "" 127.0.0.1 - - [05/Feb/2015:16:48:47] "HEAD /images/icon-fedora.png HTTP/1.1" 200 4449 "" "" 127.0.0.1 - - [05/Feb/2015:16:48:47] "GET /images/icon-fedora.png HTTP/1.1" 206 4449 "" "" libvirt: error : internal error: Child process (/sbin/showmount --no-headers --exports localhost) unexpected exit status 1: clnt_create: RPC: Program not registered internal error: Child process (/sbin/showmount --no-headers --exports localhost) unexpected exit status 1: clnt_create: RPC: Program not registered libvirt: QEMU Driver error : internal error: early end of file from monitor: possible problem: p11-kit: couldn't list directory: /usr/share/p11-kit/modules: Permission denied 2015-02-05T18:48:49.906991Z qemu-system-x86_64: -drive file=http://host.name:1234/url/path/to/iso/file,if=none,id=drive-ide0-1-0,readonl...: could not open disk image http://host.name:1234/url/path/to/iso/file: CURL: Error opening file: Could not resolve host: host.name internal error: early end of file from monitor: possible problem: p11-kit: couldn't list directory: /usr/share/p11-kit/modules: Permission denied 2015-02-05T18:48:49.906991Z qemu-system-x86_64: -drive file=http://host.name:1234/url/path/to/iso/file,if=none,id=drive-ide0-1-0,readonl...: could not open disk image http://host.name:1234/url/path/to/iso/file: CURL: Error opening file: Could not resolve host: host.name libvirt: QEMU Driver error : internal error: process exited while connecting to monitor: p11-kit: couldn't list directory: /usr/share/p11-kit/modules: Permission denied 2015-02-05T18:48:51.067337Z qemu-system-x86_64: -drive file=https://host.name:1234/url/path/to/iso/file,if=none,id=drive-ide0-1-0,readon...: could not open disk image https://host.name:1234/url/path/to/iso/file: CURL: Error opening file: Could not resolve host: host.name internal error: process exited while connecting to monitor: p11-kit: couldn't list directory: /usr/share/p11-kit/modules: Permission denied 2015-02-05T18:48:51.067337Z qemu-system-x86_64: -drive file=https://host.name:1234/url/path/to/iso/file,if=none,id=drive-ide0-1-0,readon...: could not open disk image https://host.name:1234/url/path/to/iso/file: CURL: Error opening file: Could not resolve host: host.name libvirt: QEMU Driver error : internal error: process exited while connecting to monitor: p11-kit: couldn't list directory: /usr/share/p11-kit/modules: Permission denied 2015-02-05T18:48:52.208882Z qemu-system-x86_64: -drive file=ftp://host.name:1234/url/path/to/iso/file,if=none,id=drive-ide0-1-0,readonly=on,format=raw: could not open disk image ftp://host.name:1234/url/path/to/iso/file: CURL: Error opening file: Could not resolve host: host.name internal error: process exited while connecting to monitor: p11-kit: couldn't list directory: /usr/share/p11-kit/modules: Permission denied 2015-02-05T18:48:52.208882Z qemu-system-x86_64: -drive file=ftp://host.name:1234/url/path/to/iso/file,if=none,id=drive-ide0-1-0,readonly=on,format=raw: could not open disk image ftp://host.name:1234/url/path/to/iso/file: CURL: Error opening file: Could not resolve host: host.name libvirt: QEMU Driver error : internal error: process exited while connecting to monitor: p11-kit: couldn't list directory: /usr/share/p11-kit/modules: Permission denied 2015-02-05T18:48:53.354543Z qemu-system-x86_64: -drive file=ftps://host.name:1234/url/path/to/iso/file,if=none,id=drive-ide0-1-0,readonly=on,format=raw: could not open disk image ftps://host.name:1234/url/path/to/iso/file: CURL: Error opening file: Could not resolve host: host.name internal error: process exited while connecting to monitor: p11-kit: couldn't list directory: /usr/share/p11-kit/modules: Permission denied 2015-02-05T18:48:53.354543Z qemu-system-x86_64: -drive file=ftps://host.name:1234/url/path/to/iso/file,if=none,id=drive-ide0-1-0,readonly=on,format=raw: could not open disk image ftps://host.name:1234/url/path/to/iso/file: CURL: Error opening file: Could not resolve host: host.name libvirt: QEMU Driver error : internal error: process exited while connecting to monitor: p11-kit: couldn't list directory: /usr/share/p11-kit/modules: Permission denied 2015-02-05T18:48:54.532055Z qemu-system-x86_64: -drive file=tftp://host.name:1234/url/path/to/iso/file,if=none,id=drive-ide0-1-0,readonly=on,format=raw: could not open disk image tftp://host.name:1234/url/path/to/iso/file: CURL: Error opening file: Could not resolve host: host.name internal error: process exited while connecting to monitor: p11-kit: couldn't list directory: /usr/share/p11-kit/modules: Permission denied 2015-02-05T18:48:54.532055Z qemu-system-x86_64: -drive file=tftp://host.name:1234/url/path/to/iso/file,if=none,id=drive-ide0-1-0,readonly=on,format=raw: could not open disk image tftp://host.name:1234/url/path/to/iso/file: CURL: Error opening file: Could not resolve host: host.name *** Feature tests completed *** [05/Feb/2015:16:48:54] ENGINE Bus STARTED [05/Feb/2015:16:49:26] ENGINE Started monitor thread 'Session cleanup'. 127.0.0.1 - - [05/Feb/2015:16:49:26] "GET /plugins HTTP/1.0" 200 2 "" "curl/7.37.1" 127.0.0.1 - - [05/Feb/2015:16:49:31] "GET /config HTTP/1.0" 200 69 "" "curl/7.37.1" 127.0.0.1 - - [05/Feb/2015:16:49:35] "GET /config/capabilities HTTP/1.0" 200 236 "" "curl/7.37.1" ^C[05/Feb/2015:16:49:39] ENGINE Keyboard Interrupt: shutting down bus [05/Feb/2015:16:49:39] ENGINE Bus STOPPING [05/Feb/2015:16:49:39] ENGINE HTTP Server cherrypy._cpwsgi_server.CPWSGIServer(('127.0.0.1', 8010)) shut down [05/Feb/2015:16:49:39] ENGINE Stopped thread 'Autoreloader'. [05/Feb/2015:16:49:39] ENGINE Stopped thread 'Session cleanup'. [05/Feb/2015:16:49:39] ENGINE Bus STOPPED [05/Feb/2015:16:49:39] ENGINE Bus EXITING [05/Feb/2015:16:49:39] ENGINE Bus EXITED [05/Feb/2015:16:49:39] ENGINE Waiting for child threads to terminate... On 03/02/2015 17:57, Christy Perez wrote:
If Kimchi's startup is interrupted for some reason, a VM created during the feature tests may be left defined. When this happens, the next time Kimchi is started it will fail with an error that the domain already exists (for example, "libvirtError: operation failed: domain 'A_SIMPLE_VM' already exists with uuid e6fccea8-f7ed-4320-a4cb-b85217d23985").
About the new flag: "If the VIR_DOMAIN_START_AUTODESTROY flag is set, the guest domain will be automatically destroyed when the virConnectPtr object is finally released. This will also happen if the client application crashes / loses its connection to the libvirtd daemon. Any domains marked for auto destroy will block attempts at migration, save-to-file, or snapshots."
This patch also changes the memory in the test VMs, due to the fact that the domain will be started, and some platforms (Power is a known example) require at least 128M of memory for a guest.
Signed-off-by: Christy Perez <christy@linux.vnet.ibm.com> --- src/kimchi/kvmusertests.py | 5 ++--- src/kimchi/model/featuretests.py | 14 ++++++++------ 2 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/src/kimchi/kvmusertests.py b/src/kimchi/kvmusertests.py index 408706d..3abf148 100644 --- a/src/kimchi/kvmusertests.py +++ b/src/kimchi/kvmusertests.py @@ -54,9 +54,8 @@ def probe_user(cls): with RollbackContext() as rollback: conn = libvirt.open(None) rollback.prependDefer(conn.close) - dom = conn.defineXML(xml) - rollback.prependDefer(dom.undefine) - dom.create() + dom = conn.createXML(xml, + flags=libvirt.VIR_DOMAIN_START_AUTODESTROY) rollback.prependDefer(dom.destroy) with open('/var/run/libvirt/qemu/%s.pid' % vm_name) as f: pidStr = f.read() diff --git a/src/kimchi/model/featuretests.py b/src/kimchi/model/featuretests.py index 5a45990..ef7dcc5 100644 --- a/src/kimchi/model/featuretests.py +++ b/src/kimchi/model/featuretests.py @@ -58,7 +58,7 @@ SIMPLE_VM_XML = """ <domain type='%(domain)s'> <name>A_SIMPLE_VM</name> - <memory unit='KiB'>10240</memory> + <memory unit='KiB'>131072</memory> <os> <type arch='%(arch)s'>hvm</type> <boot dev='hd'/> @@ -109,8 +109,9 @@ def libvirt_supports_iso_stream(conn, protocol): 'arch': arch} try: FeatureTests.disable_libvirt_error_logging() - dom = conn.defineXML(xml) - dom.undefine() + dom = conn.createXML(xml, + flags=libvirt.VIR_DOMAIN_START_AUTODESTROY) + dom.destroy() return True except libvirt.libvirtError, e: kimchi_log.error(e.message) @@ -196,9 +197,10 @@ def has_metadata_support(conn): domain_type = 'test' if conn.getType().lower() == 'test' else 'kvm' arch = 'ppc64' if platform.machine() == 'ppc64le' \ else platform.machine() - dom = conn.defineXML(SIMPLE_VM_XML % {'domain': domain_type, - 'arch': arch}) - rollback.prependDefer(dom.undefine) + dom = conn.createXML(SIMPLE_VM_XML % {'domain': domain_type, + 'arch': arch}, + flags=libvirt.VIR_DOMAIN_START_AUTODESTROY) + rollback.prependDefer(dom.destroy) try: dom.setMetadata(libvirt.VIR_DOMAIN_METADATA_ELEMENT, "<metatest/>", KIMCHI_NAMESPACE,

Ah. I didn't check the error log, so I didn't see these messages. I just ran the tests and things came out fine. It looks like we'll have to come up with a better way to make sure that these VMs don't hang around. Or a better way to test that libvirt support each protocol for streaming... Thanks. - Christy On 02/05/2015 12:54 PM, Aline Manera wrote:
After applying this patch I got several error when starting up the Kimchi server. Please, check below.
Also the Capabilities API is returning a different result with/without this patch:
*with* this patch:
alinefm@alinefm:~/kimchi$ curl -u <user:password> -H "Content-Type: application/json" -H "Accept: application/json" -k https://localhst:8001/config/capabilities { "kernel_vfio":true, "repo_mngt_tool":"deb", "qemu_spice":true, "screenshot":null, "system_report_tool":true, "update_tool":true, "qemu_stream":true, "libvirt_stream_protocols":[], "auth":"pam", "federation":"off" }
*without* this patch:
alinefm@alinefm:~/kimchi$ curl -u <user:password> -H "Content-Type: application/json" -H "Accept: application/json" -k https://localhost:8001/config/capabilities { "kernel_vfio":true, "repo_mngt_tool":"deb", "qemu_spice":true, "screenshot":null, "system_report_tool":true, "update_tool":true, "qemu_stream":true, "libvirt_stream_protocols":[ "http", "https", "ftp", "ftps", "tftp" ], "auth":"pam", "federation":"off" }
alinefm@alinefm:~/kimchi$ sudo python src/kimchid --environment=development Loading AptUpdate features. [05/Feb/2015:16:48:47] ENGINE Listening for SIGHUP. [05/Feb/2015:16:48:47] ENGINE Listening for SIGTERM. [05/Feb/2015:16:48:47] ENGINE Listening for SIGUSR1. [05/Feb/2015:16:48:47] ENGINE Bus STARTING [05/Feb/2015:16:48:47] ENGINE Started monitor thread 'Autoreloader'. [05/Feb/2015:16:48:47] ENGINE Serving on http://127.0.0.1:8010 *** Running feature tests *** 127.0.0.1 - - [05/Feb/2015:16:48:47] "HEAD /images/icon-fedora.png HTTP/1.1" 200 4449 "" "" 127.0.0.1 - - [05/Feb/2015:16:48:47] "GET /images/icon-fedora.png HTTP/1.1" 206 4449 "" "" 127.0.0.1 - - [05/Feb/2015:16:48:47] "HEAD /images/icon-fedora.png HTTP/1.1" 200 4449 "" "" 127.0.0.1 - - [05/Feb/2015:16:48:47] "GET /images/icon-fedora.png HTTP/1.1" 206 4449 "" "" libvirt: error : internal error: Child process (/sbin/showmount --no-headers --exports localhost) unexpected exit status 1: clnt_create: RPC: Program not registered internal error: Child process (/sbin/showmount --no-headers --exports localhost) unexpected exit status 1: clnt_create: RPC: Program not registered
libvirt: QEMU Driver error : internal error: early end of file from monitor: possible problem: p11-kit: couldn't list directory: /usr/share/p11-kit/modules: Permission denied 2015-02-05T18:48:49.906991Z qemu-system-x86_64: -drive file=http://host.name:1234/url/path/to/iso/file,if=none,id=drive-ide0-1-0,readonl...: could not open disk image http://host.name:1234/url/path/to/iso/file: CURL: Error opening file: Could not resolve host: host.name internal error: early end of file from monitor: possible problem: p11-kit: couldn't list directory: /usr/share/p11-kit/modules: Permission denied 2015-02-05T18:48:49.906991Z qemu-system-x86_64: -drive file=http://host.name:1234/url/path/to/iso/file,if=none,id=drive-ide0-1-0,readonl...: could not open disk image http://host.name:1234/url/path/to/iso/file: CURL: Error opening file: Could not resolve host: host.name
libvirt: QEMU Driver error : internal error: process exited while connecting to monitor: p11-kit: couldn't list directory: /usr/share/p11-kit/modules: Permission denied 2015-02-05T18:48:51.067337Z qemu-system-x86_64: -drive file=https://host.name:1234/url/path/to/iso/file,if=none,id=drive-ide0-1-0,readon...: could not open disk image https://host.name:1234/url/path/to/iso/file: CURL: Error opening file: Could not resolve host: host.name internal error: process exited while connecting to monitor: p11-kit: couldn't list directory: /usr/share/p11-kit/modules: Permission denied 2015-02-05T18:48:51.067337Z qemu-system-x86_64: -drive file=https://host.name:1234/url/path/to/iso/file,if=none,id=drive-ide0-1-0,readon...: could not open disk image https://host.name:1234/url/path/to/iso/file: CURL: Error opening file: Could not resolve host: host.name
libvirt: QEMU Driver error : internal error: process exited while connecting to monitor: p11-kit: couldn't list directory: /usr/share/p11-kit/modules: Permission denied 2015-02-05T18:48:52.208882Z qemu-system-x86_64: -drive file=ftp://host.name:1234/url/path/to/iso/file,if=none,id=drive-ide0-1-0,readonly=on,format=raw: could not open disk image ftp://host.name:1234/url/path/to/iso/file: CURL: Error opening file: Could not resolve host: host.name internal error: process exited while connecting to monitor: p11-kit: couldn't list directory: /usr/share/p11-kit/modules: Permission denied 2015-02-05T18:48:52.208882Z qemu-system-x86_64: -drive file=ftp://host.name:1234/url/path/to/iso/file,if=none,id=drive-ide0-1-0,readonly=on,format=raw: could not open disk image ftp://host.name:1234/url/path/to/iso/file: CURL: Error opening file: Could not resolve host: host.name
libvirt: QEMU Driver error : internal error: process exited while connecting to monitor: p11-kit: couldn't list directory: /usr/share/p11-kit/modules: Permission denied 2015-02-05T18:48:53.354543Z qemu-system-x86_64: -drive file=ftps://host.name:1234/url/path/to/iso/file,if=none,id=drive-ide0-1-0,readonly=on,format=raw: could not open disk image ftps://host.name:1234/url/path/to/iso/file: CURL: Error opening file: Could not resolve host: host.name internal error: process exited while connecting to monitor: p11-kit: couldn't list directory: /usr/share/p11-kit/modules: Permission denied 2015-02-05T18:48:53.354543Z qemu-system-x86_64: -drive file=ftps://host.name:1234/url/path/to/iso/file,if=none,id=drive-ide0-1-0,readonly=on,format=raw: could not open disk image ftps://host.name:1234/url/path/to/iso/file: CURL: Error opening file: Could not resolve host: host.name
libvirt: QEMU Driver error : internal error: process exited while connecting to monitor: p11-kit: couldn't list directory: /usr/share/p11-kit/modules: Permission denied 2015-02-05T18:48:54.532055Z qemu-system-x86_64: -drive file=tftp://host.name:1234/url/path/to/iso/file,if=none,id=drive-ide0-1-0,readonly=on,format=raw: could not open disk image tftp://host.name:1234/url/path/to/iso/file: CURL: Error opening file: Could not resolve host: host.name internal error: process exited while connecting to monitor: p11-kit: couldn't list directory: /usr/share/p11-kit/modules: Permission denied 2015-02-05T18:48:54.532055Z qemu-system-x86_64: -drive file=tftp://host.name:1234/url/path/to/iso/file,if=none,id=drive-ide0-1-0,readonly=on,format=raw: could not open disk image tftp://host.name:1234/url/path/to/iso/file: CURL: Error opening file: Could not resolve host: host.name
*** Feature tests completed *** [05/Feb/2015:16:48:54] ENGINE Bus STARTED [05/Feb/2015:16:49:26] ENGINE Started monitor thread 'Session cleanup'. 127.0.0.1 - - [05/Feb/2015:16:49:26] "GET /plugins HTTP/1.0" 200 2 "" "curl/7.37.1" 127.0.0.1 - - [05/Feb/2015:16:49:31] "GET /config HTTP/1.0" 200 69 "" "curl/7.37.1" 127.0.0.1 - - [05/Feb/2015:16:49:35] "GET /config/capabilities HTTP/1.0" 200 236 "" "curl/7.37.1" ^C[05/Feb/2015:16:49:39] ENGINE Keyboard Interrupt: shutting down bus [05/Feb/2015:16:49:39] ENGINE Bus STOPPING [05/Feb/2015:16:49:39] ENGINE HTTP Server cherrypy._cpwsgi_server.CPWSGIServer(('127.0.0.1', 8010)) shut down [05/Feb/2015:16:49:39] ENGINE Stopped thread 'Autoreloader'. [05/Feb/2015:16:49:39] ENGINE Stopped thread 'Session cleanup'. [05/Feb/2015:16:49:39] ENGINE Bus STOPPED [05/Feb/2015:16:49:39] ENGINE Bus EXITING [05/Feb/2015:16:49:39] ENGINE Bus EXITED [05/Feb/2015:16:49:39] ENGINE Waiting for child threads to terminate...
On 03/02/2015 17:57, Christy Perez wrote:
If Kimchi's startup is interrupted for some reason, a VM created during the feature tests may be left defined. When this happens, the next time Kimchi is started it will fail with an error that the domain already exists (for example, "libvirtError: operation failed: domain 'A_SIMPLE_VM' already exists with uuid e6fccea8-f7ed-4320-a4cb-b85217d23985").
About the new flag: "If the VIR_DOMAIN_START_AUTODESTROY flag is set, the guest domain will be automatically destroyed when the virConnectPtr object is finally released. This will also happen if the client application crashes / loses its connection to the libvirtd daemon. Any domains marked for auto destroy will block attempts at migration, save-to-file, or snapshots."
This patch also changes the memory in the test VMs, due to the fact that the domain will be started, and some platforms (Power is a known example) require at least 128M of memory for a guest.
Signed-off-by: Christy Perez <christy@linux.vnet.ibm.com> --- src/kimchi/kvmusertests.py | 5 ++--- src/kimchi/model/featuretests.py | 14 ++++++++------ 2 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/src/kimchi/kvmusertests.py b/src/kimchi/kvmusertests.py index 408706d..3abf148 100644 --- a/src/kimchi/kvmusertests.py +++ b/src/kimchi/kvmusertests.py @@ -54,9 +54,8 @@ def probe_user(cls): with RollbackContext() as rollback: conn = libvirt.open(None) rollback.prependDefer(conn.close) - dom = conn.defineXML(xml) - rollback.prependDefer(dom.undefine) - dom.create() + dom = conn.createXML(xml, + flags=libvirt.VIR_DOMAIN_START_AUTODESTROY) rollback.prependDefer(dom.destroy) with open('/var/run/libvirt/qemu/%s.pid' % vm_name) as f: pidStr = f.read() diff --git a/src/kimchi/model/featuretests.py b/src/kimchi/model/featuretests.py index 5a45990..ef7dcc5 100644 --- a/src/kimchi/model/featuretests.py +++ b/src/kimchi/model/featuretests.py @@ -58,7 +58,7 @@ SIMPLE_VM_XML = """ <domain type='%(domain)s'> <name>A_SIMPLE_VM</name> - <memory unit='KiB'>10240</memory> + <memory unit='KiB'>131072</memory> <os> <type arch='%(arch)s'>hvm</type> <boot dev='hd'/> @@ -109,8 +109,9 @@ def libvirt_supports_iso_stream(conn, protocol): 'arch': arch} try: FeatureTests.disable_libvirt_error_logging() - dom = conn.defineXML(xml) - dom.undefine() + dom = conn.createXML(xml, + flags=libvirt.VIR_DOMAIN_START_AUTODESTROY) + dom.destroy() return True except libvirt.libvirtError, e: kimchi_log.error(e.message) @@ -196,9 +197,10 @@ def has_metadata_support(conn): domain_type = 'test' if conn.getType().lower() == 'test' else 'kvm' arch = 'ppc64' if platform.machine() == 'ppc64le' \ else platform.machine() - dom = conn.defineXML(SIMPLE_VM_XML % {'domain': domain_type, - 'arch': arch}) - rollback.prependDefer(dom.undefine) + dom = conn.createXML(SIMPLE_VM_XML % {'domain': domain_type, + 'arch': arch}, + flags=libvirt.VIR_DOMAIN_START_AUTODESTROY) + rollback.prependDefer(dom.destroy) try: dom.setMetadata(libvirt.VIR_DOMAIN_METADATA_ELEMENT, "<metatest/>", KIMCHI_NAMESPACE,
participants (2)
-
Aline Manera
-
Christy Perez