- jsc#SLE-6262, fate#327048: KVM: Boot Configuration Override

001-adf30349-cli-refactor-get_prop.patch
  002-60c7e778-xmlapi-add-set_prop.patch
  003-5bad22e8-tests-Use-get-set_prop.patch
  004-ee5f3eab-support-Add-SUPPORT_CONN_DEVICE_BOOT_ORDER.patch
  005-7768eb17-cli-Add-check-if-device-boot-order-is-supported.patch
  006-ecc0861c-tests-xmlparse-refactor-method-for-generating-out-file-path.patch
  007-c9d070da-guest-Add-reorder_boot_order-method.patch
  008-1b535940-tests-Add-test-case-for-reorder_boot_order-method.patch
  009-b83a0a61-cli-Use-reorder_boot_order-for-setting-the-boot-order.patch
  010-c896d19d-tests-cli-Add-boot.order-tests.patch
  011-29f9f2ac-virt-xml-Add-no-define-argument.patch
  012-c2bff509-tests-cli-Add-test-case-for-no-define-argument.patch
  013-90b1a3ab-virt-xml-Add-support-for-starting-the-domain.patch
  014-908b8e8d-tests-virt-xml-Add-test-cases-for-start-option.patch

OBS-URL: https://build.opensuse.org/package/show/Virtualization/virt-manager?expand=0&rev=468
This commit is contained in:
Charles Arnold 2019-05-23 15:40:50 +00:00 committed by Git OBS Bridge
parent 081f979e1e
commit 2677655bda
23 changed files with 1296 additions and 18 deletions

View File

@ -0,0 +1,67 @@
References: jsc#SLE-6262, fate#327048: KVM: Boot Configuration Override (virt-manager)
Subject: cli: refactor get_prop
From: Marc Hartmayer mhartmay@linux.ibm.com Tue Feb 26 10:56:31 2019 +0100
Date: Wed Mar 6 13:13:13 2019 -0500:
Git: adf30349c3a0cb07674bc00a4aa2f8e278c584a6
Refactor get_prop since it will be used in the next patches at other
places as well.
Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
Index: virt-manager-2.1.0/virtinst/cli.py
===================================================================
--- virt-manager-2.1.0.orig/virtinst/cli.py
+++ virt-manager-2.1.0/virtinst/cli.py
@@ -22,7 +22,7 @@ import libvirt
from virtcli import CLIConfig
-from . import util
+from . import util, xmlapi
from .devices import (Device, DeviceController, DeviceDisk, DeviceGraphics,
DeviceInterface, DevicePanic)
from .domain import DomainClock, DomainOs
@@ -1223,12 +1223,7 @@ class VirtCLIParser(metaclass=InitClass)
"""
if not cls.propname:
return None
- parent = obj
- pieces = cls.propname.split(".")
- for piece in pieces[:-1]:
- parent = getattr(parent, piece)
-
- return getattr(parent, pieces[-1])
+ return xmlapi.get_prop(obj, cls.propname)
@classmethod
def prop_is_list(cls, obj):
Index: virt-manager-2.1.0/virtinst/xmlapi.py
===================================================================
--- virt-manager-2.1.0.orig/virtinst/xmlapi.py
+++ virt-manager-2.1.0/virtinst/xmlapi.py
@@ -11,6 +11,22 @@ from . import util
# pylint: disable=protected-access
+def get_prop(obj, prop_path):
+ """Return value of attribute identified by `prop_path`
+
+ Look up the attribute of `obj` identified by `prop_path`
+ (separated by "."). If any component along the path is missing an
+ `AttributeError` is raised.
+
+ """
+ parent = obj
+ pieces = prop_path.split(".")
+ for piece in pieces[:-1]:
+ parent = getattr(parent, piece)
+
+ return getattr(parent, pieces[-1])
+
+
class _XPathSegment(object):
"""
Class representing a single 'segment' of an xpath string. For example,

View File

@ -0,0 +1,39 @@
References: jsc#SLE-6262, fate#327048: KVM: Boot Configuration Override (virt-manager)
Subject: xmlapi: add set_prop
From: Marc Hartmayer mhartmay@linux.ibm.com Tue Feb 26 10:56:32 2019 +0100
Date: Wed Mar 6 13:13:13 2019 -0500:
Git: 60c7e778e306c66af2690cafea076aba15a2b233
Introduce set_prop helper function. It will be used in the next patch.
Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
diff --git a/virtinst/xmlapi.py b/virtinst/xmlapi.py
index 569e47f7..49ca0fa3 100644
--- a/virtinst/xmlapi.py
+++ b/virtinst/xmlapi.py
@@ -27,6 +27,22 @@ def get_prop(obj, prop_path):
return getattr(parent, pieces[-1])
+def set_prop(obj, prop_path, value):
+ """Set value of attribute identified by `prop_path`
+
+ Set the attribute of `obj` identified by `prop_path` (separated by
+ ".") to `value`. If any component along the path is missing an
+ `AttributeError` is raised.
+
+ """
+ parent = obj
+ pieces = prop_path.split(".")
+ for piece in pieces[:-1]:
+ parent = getattr(parent, piece)
+
+ return setattr(parent, pieces[-1], value)
+
+
class _XPathSegment(object):
"""
Class representing a single 'segment' of an xpath string. For example,

View File

@ -0,0 +1,30 @@
References: jsc#SLE-6262, fate#327048: KVM: Boot Configuration Override (virt-manager)
Subject: tests: Use (get|set)_prop
From: Marc Hartmayer mhartmay@linux.ibm.com Tue Feb 26 10:56:33 2019 +0100
Date: Wed Mar 6 13:13:13 2019 -0500:
Git: 5bad22e8375f60bb838f7f5e0bbf58d78ffd91ee
Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
diff --git a/tests/xmlparse.py b/tests/xmlparse.py
index 709bc48f..df6f022e 100644
--- a/tests/xmlparse.py
+++ b/tests/xmlparse.py
@@ -68,12 +68,12 @@ class XMLParseTest(unittest.TestCase):
Check expected initial value obj.param == initval, then
set newval, and make sure it is returned properly
"""
- curval = getattr(obj, param)
+ curval = virtinst.xmlapi.get_prop(obj, param)
self.assertEqual(initval, curval)
for newval in args:
- setattr(obj, param, newval)
- curval = getattr(obj, param)
+ virtinst.xmlapi.set_prop(obj, param, newval)
+ curval = virtinst.xmlapi.get_prop(obj, param)
self.assertEqual(newval, curval)
def _make_checker(self, obj):

View File

@ -0,0 +1,45 @@
References: jsc#SLE-6262, fate#327048: KVM: Boot Configuration Override (virt-manager)
Subject: support: Add SUPPORT_CONN_DEVICE_BOOT_ORDER
From: Marc Hartmayer mhartmay@linux.ibm.com Tue Feb 26 10:56:34 2019 +0100
Date: Wed Mar 6 13:15:34 2019 -0500:
Git: ee5f3eab4b52e09ae5d0e65ba42c508084f9b6d9
...and use it in domain.py.
Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
Index: virt-manager-2.1.0/virtManager/domain.py
===================================================================
--- virt-manager-2.1.0.orig/virtManager/domain.py
+++ virt-manager-2.1.0/virtManager/domain.py
@@ -17,6 +17,7 @@ from virtinst import Guest
from virtinst import util
from virtinst import DeviceController
from virtinst import DeviceDisk
+from virtinst import support
from .libvirtobject import vmmLibvirtObject
from .libvirtenummap import LibvirtEnumMap
@@ -1364,7 +1365,7 @@ class vmmDomain(vmmLibvirtObject):
def can_use_device_boot_order(self):
# Return 'True' if guest can use new style boot device ordering
- return self.conn.is_qemu() or self.conn.is_test()
+ return self.conn.check_support(support.SUPPORT_CONN_DEVICE_BOOT_ORDER)
def get_bootable_devices(self):
# redirdev can also be marked bootable, but it should be rarely
Index: virt-manager-2.1.0/virtinst/support.py
===================================================================
--- virt-manager-2.1.0.orig/virtinst/support.py
+++ virt-manager-2.1.0/virtinst/support.py
@@ -266,6 +266,7 @@ SUPPORT_CONN_USB3_PORTS = _make(version=
SUPPORT_CONN_MACHVIRT_PCI_DEFAULT = _make(version="3.0.0")
SUPPORT_CONN_QEMU_XHCI = _make(version="3.3.0", hv_version={"qemu": "2.9.0"})
SUPPORT_CONN_VNC_NONE_AUTH = _make(hv_version={"qemu": "2.9.0"})
+SUPPORT_CONN_DEVICE_BOOT_ORDER = _make(hv_version={"qemu": 0, "test": 0})
# We choose qemu 2.11.0 as the first version to target for q35 default.
# That's not really based on anything except reasonably modern at the

View File

@ -0,0 +1,80 @@
References: jsc#SLE-6262, fate#327048: KVM: Boot Configuration Override (virt-manager)
Subject: cli: Add check if device boot order is supported
From: Marc Hartmayer mhartmay@linux.ibm.com Tue Feb 26 10:56:35 2019 +0100
Date: Wed Mar 6 13:15:38 2019 -0500:
Git: 7768eb17d98352a29f2e5b62035630483d1f3b63
Add a check if device boot order is supported to
Parser(Network|Disk|Redirdev|...) and throw an exception if not.
Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
Index: virt-manager-2.1.0/virtinst/cli.py
===================================================================
--- virt-manager-2.1.0.orig/virtinst/cli.py
+++ virt-manager-2.1.0/virtinst/cli.py
@@ -20,6 +20,7 @@ import types
import libvirt
+from virtinst import support
from virtcli import CLIConfig
from . import util, xmlapi
@@ -2154,6 +2155,18 @@ def _add_device_address_args(cls):
cls.add_arg("address.base", "address.base")
+def _add_device_boot_order_arg(cls):
+ def set_boot_order_cb(self, inst, val, virtarg):
+ val = int(val)
+ guest = self.guest
+ if not guest.conn.check_support(support.SUPPORT_CONN_DEVICE_BOOT_ORDER):
+ raise NotImplementedError('Device boot order isn\'t supported by the connection')
+
+ inst.boot.order = val
+ cls.set_boot_order_cb = set_boot_order_cb
+ cls.add_arg("boot.order", "boot_order", cb=cls.set_boot_order_cb)
+
+
##################
# --disk parsing #
##################
@@ -2323,7 +2336,7 @@ class ParserDisk(VirtCLIParser):
cls.add_arg("startup_policy", "startup_policy")
cls.add_arg("read_only", "readonly", is_onoff=True)
cls.add_arg("shareable", "shareable", is_onoff=True)
- cls.add_arg("boot.order", "boot_order")
+ _add_device_boot_order_arg(cls)
cls.add_arg("iotune_rbs", "read_bytes_sec")
cls.add_arg("iotune_wbs", "write_bytes_sec")
@@ -2419,7 +2432,7 @@ class ParserNetwork(VirtCLIParser):
cls.add_arg("model", "model")
cls.add_arg("macaddr", "mac", cb=cls.set_mac_cb)
cls.add_arg("filterref", "filterref")
- cls.add_arg("boot.order", "boot_order")
+ _add_device_boot_order_arg(cls)
cls.add_arg("link_state", "link_state",
cb=cls.set_link_state)
@@ -2637,7 +2650,7 @@ class ParserRedir(VirtCLIParser):
_add_device_address_args(cls)
cls.add_arg("bus", "bus", ignore_default=True)
cls.add_arg("type", "type", ignore_default=True)
- cls.add_arg("boot.order", "boot_order")
+ _add_device_boot_order_arg(cls)
cls.add_arg(None, "server", cb=cls.set_server_cb)
@@ -3048,7 +3061,7 @@ class ParserHostdev(VirtCLIParser):
cb=cls.set_name_cb,
lookup_cb=cls.name_lookup_cb)
cls.add_arg("driver_name", "driver_name")
- cls.add_arg("boot.order", "boot_order")
+ _add_device_boot_order_arg(cls)
cls.add_arg("rom_bar", "rom_bar", is_onoff=True)

View File

@ -0,0 +1,36 @@
References: jsc#SLE-6262, fate#327048: KVM: Boot Configuration Override (virt-manager)
Subject: tests: xmlparse: refactor method for generating out file path
From: Marc Hartmayer mhartmay@linux.ibm.com Tue Feb 26 10:56:36 2019 +0100
Date: Wed Mar 6 13:15:38 2019 -0500:
Git: ecc0861c891263eacba8f63e9aa74797a1e7cba2
Refactor method for generating out file path. It will be used in a
upcoming patch.
Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
diff --git a/tests/xmlparse.py b/tests/xmlparse.py
index df6f022e..2dbaf24c 100644
--- a/tests/xmlparse.py
+++ b/tests/xmlparse.py
@@ -81,9 +81,17 @@ class XMLParseTest(unittest.TestCase):
return self._set_and_check(obj, name, initval, *args)
return check
+ def _gen_outfile_path(self, basename):
+ """
+ Returns relative path to the file containing the expected XML
+ output
+
+ """
+ return "tests/xmlparse-xml/{!s}-out.xml".format(basename)
+
def _get_test_content(self, basename, kvm=False):
infile = "tests/xmlparse-xml/%s-in.xml" % basename
- outfile = "tests/xmlparse-xml/%s-out.xml" % basename
+ outfile = self._gen_outfile_path(basename)
guest = virtinst.Guest(kvm and self.kvmconn or self.conn,
parsexml=open(infile).read())
return guest, outfile

View File

@ -0,0 +1,59 @@
References: jsc#SLE-6262, fate#327048: KVM: Boot Configuration Override (virt-manager)
Subject: guest: Add reorder_boot_order method
From: Marc Hartmayer mhartmay@linux.ibm.com Tue Feb 26 10:56:37 2019 +0100
Date: Wed Mar 6 13:15:38 2019 -0500:
Git: c9d070da4c3d31c3c504f52dbff775483ebf5e35
Add `reorder_boot_order` method to Guest class. It sets the boot order
of the passed `dev` to `boot_index` and adapts all other boot indices
of the guest accordingly.
Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
Index: virt-manager-2.1.0/virtinst/guest.py
===================================================================
--- virt-manager-2.1.0.orig/virtinst/guest.py
+++ virt-manager-2.1.0/virtinst/guest.py
@@ -257,6 +257,40 @@ class Guest(XMLBuilder):
return self.__osinfo
osinfo = property(_get_osinfo)
+ def reorder_boot_order(self, dev, boot_index):
+ """Sets boot order of `dev` to `boot_index`
+
+ Sets the boot order for device `dev` to value `boot_index` and
+ adjusts all other boot indices accordingly. Additionally the
+ boot order defined in the 'os' node of a domain definition is
+ disabled since they are mutually exclusive in libvirt.
+
+ """
+ # unset legacy boot order
+ self.os.bootorder = []
+
+ # Sort the bootable devices by boot order
+ devs_sorted = sorted([device for device in self.get_bootable_devices()
+ if device.boot.order is not None],
+ key=lambda device: device.boot.order)
+
+ # set new boot order
+ dev.boot.order = boot_index
+
+ next_boot_index = None
+ for device in devs_sorted:
+ if device is dev:
+ continue
+
+ if device.boot.order in [next_boot_index, boot_index]:
+ next_boot_index = device.boot.order + 1
+ device.boot.order = next_boot_index
+ continue
+
+ if next_boot_index is not None:
+ # we found a hole so we can stop here
+ break
+
def set_os_name(self, name):
obj = OSDB.lookup_os(name)
if obj is None:

View File

@ -0,0 +1,305 @@
References: jsc#SLE-6262, fate#327048: KVM: Boot Configuration Override (virt-manager)
Subject: tests: Add test case for reorder_boot_order method
From: Marc Hartmayer mhartmay@linux.ibm.com Tue Feb 26 10:56:38 2019 +0100
Date: Wed Mar 6 13:15:38 2019 -0500:
Git: 1b535940028dda1c63e9c1d98a40aa11223a05b2
Add a test case for `reorder_boot_order`. It verifies that the OS boot
order is removed and that all other boot order indices are adjusted
accordingly.
Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
diff --git a/tests/xmlparse-xml/change-devices-bootorder-fixed-out.xml b/tests/xmlparse-xml/change-devices-bootorder-fixed-out.xml
new file mode 100644
index 00000000..e8fa6975
--- /dev/null
+++ b/tests/xmlparse-xml/change-devices-bootorder-fixed-out.xml
@@ -0,0 +1,71 @@
+<domain type="kvm">
+ <name>TestGuest</name>
+ <metadata>
+ <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
+ <libosinfo:os id="http://fedoraproject.org/fedora/17"/>
+ </libosinfo:libosinfo>
+ </metadata>
+ <currentMemory>204800</currentMemory>
+ <memory>409600</memory>
+ <uuid>12345678-1234-1234-1234-123456789012</uuid>
+ <os>
+ <type arch="i686" machine="foobar">hvm</type>
+ </os>
+ <features>
+ <acpi/>
+ <apic/>
+ <hyperv>
+ <vapic state="off"/>
+ <spinlocks state="on" retries="12287"/>
+ </hyperv>
+ <vmport state="off"/>
+ </features>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <on_lockfailure>poweroff</on_lockfailure>
+ <devices>
+ <emulator>/usr/lib/xen/bin/qemu-dm</emulator>
+ <disk type="file" device="floppy">
+ <driver name="qemu" type="qcow2"/>
+ <source file="/dev/default-pool/testvol1.img"/>
+ <target dev="fda" bus="fdc"/>
+ <boot order="1"/>
+ </disk>
+ <disk type="file" device="disk">
+ <driver name="qemu" type="raw"/>
+ <source file="/tmp/test.img"/>
+ <target dev="vda" bus="virtio"/>
+ <boot order="10"/>
+ </disk>
+ <disk type="block" device="disk">
+ <driver name="qemu"/>
+ <source dev="/dev/null"/>
+ <target dev="vdb" bus="virtio"/>
+ <boot order="11"/>
+ </disk>
+ <disk type="block" device="cdrom">
+ <target dev="hdc" bus="ide"/>
+ <readonly/>
+ <boot order="2"/>
+ </disk>
+ <interface type="network">
+ <source network="default"/>
+ <mac address="22:22:33:44:55:66"/>
+ <model type="virtio"/>
+ <boot order="3"/>
+ </interface>
+ <interface type="network">
+ <source network="default"/>
+ <model type="virtio"/>
+ </interface>
+ <controller type="usb" index="0"/>
+ <redirdev bus="usb" type="tcp">
+ <source mode="connect" host="localhost" service="4000"/>
+ <boot order="4"/>
+ </redirdev>
+ <graphics type="vnc" display=":3.4" xauth="/tmp/.Xauthority"/>
+ <console type="pty"/>
+ <memballoon model="virtio"/>
+ </devices>
+</domain>
diff --git a/tests/xmlparse-xml/change-devices-bootorder-in.xml b/tests/xmlparse-xml/change-devices-bootorder-in.xml
new file mode 100644
index 00000000..66dd57a8
--- /dev/null
+++ b/tests/xmlparse-xml/change-devices-bootorder-in.xml
@@ -0,0 +1,71 @@
+<domain type="kvm">
+ <name>TestGuest</name>
+ <metadata>
+ <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
+ <libosinfo:os id="http://fedoraproject.org/fedora/17"/>
+ </libosinfo:libosinfo>
+ </metadata>
+ <currentMemory>204800</currentMemory>
+ <memory>409600</memory>
+ <uuid>12345678-1234-1234-1234-123456789012</uuid>
+ <os>
+ <type arch="i686" machine="foobar">hvm</type>
+ <boot dev="hd"/>
+ </os>
+ <features>
+ <acpi/>
+ <apic/>
+ <hyperv>
+ <vapic state="off"/>
+ <spinlocks state="on" retries="12287"/>
+ </hyperv>
+ <vmport state="off"/>
+ </features>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <on_lockfailure>poweroff</on_lockfailure>
+ <devices>
+ <emulator>/usr/lib/xen/bin/qemu-dm</emulator>
+ <disk type="file" device="floppy">
+ <driver name="qemu" type="qcow2"/>
+ <source file="/dev/default-pool/testvol1.img"/>
+ <target dev="fda" bus="fdc"/>
+ </disk>
+ <disk type="file" device="disk">
+ <driver name="qemu" type="raw"/>
+ <source file="/tmp/test.img"/>
+ <target dev="vda" bus="virtio"/>
+ <boot order="10"/>
+ </disk>
+ <disk type="block" device="disk">
+ <driver name="qemu"/>
+ <source dev="/dev/null"/>
+ <target dev="vdb" bus="virtio"/>
+ <boot order="10"/>
+ </disk>
+ <disk type="block" device="cdrom">
+ <target dev="hdc" bus="ide"/>
+ <readonly/>
+ <boot order="1"/>
+ </disk>
+ <interface type="network">
+ <source network="default"/>
+ <mac address="22:22:33:44:55:66"/>
+ <model type="virtio"/>
+ <boot order="2"/>
+ </interface>
+ <interface type="network">
+ <source network="default"/>
+ <model type="virtio"/>
+ </interface>
+ <controller type="usb" index="0"/>
+ <redirdev bus="usb" type="tcp">
+ <source mode="connect" host="localhost" service="4000"/>
+ <boot order="3"/>
+ </redirdev>
+ <graphics type="vnc" display=":3.4" xauth="/tmp/.Xauthority"/>
+ <console type="pty"/>
+ <memballoon model="virtio"/>
+ </devices>
+</domain>
diff --git a/tests/xmlparse-xml/change-devices-bootorder-out.xml b/tests/xmlparse-xml/change-devices-bootorder-out.xml
new file mode 100644
index 00000000..f03bc591
--- /dev/null
+++ b/tests/xmlparse-xml/change-devices-bootorder-out.xml
@@ -0,0 +1,71 @@
+<domain type="kvm">
+ <name>TestGuest</name>
+ <metadata>
+ <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
+ <libosinfo:os id="http://fedoraproject.org/fedora/17"/>
+ </libosinfo:libosinfo>
+ </metadata>
+ <currentMemory>204800</currentMemory>
+ <memory>409600</memory>
+ <uuid>12345678-1234-1234-1234-123456789012</uuid>
+ <os>
+ <type arch="i686" machine="foobar">hvm</type>
+ </os>
+ <features>
+ <acpi/>
+ <apic/>
+ <hyperv>
+ <vapic state="off"/>
+ <spinlocks state="on" retries="12287"/>
+ </hyperv>
+ <vmport state="off"/>
+ </features>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <on_lockfailure>poweroff</on_lockfailure>
+ <devices>
+ <emulator>/usr/lib/xen/bin/qemu-dm</emulator>
+ <disk type="file" device="floppy">
+ <driver name="qemu" type="qcow2"/>
+ <source file="/dev/default-pool/testvol1.img"/>
+ <target dev="fda" bus="fdc"/>
+ <boot order="1"/>
+ </disk>
+ <disk type="file" device="disk">
+ <driver name="qemu" type="raw"/>
+ <source file="/tmp/test.img"/>
+ <target dev="vda" bus="virtio"/>
+ <boot order="10"/>
+ </disk>
+ <disk type="block" device="disk">
+ <driver name="qemu"/>
+ <source dev="/dev/null"/>
+ <target dev="vdb" bus="virtio"/>
+ <boot order="10"/>
+ </disk>
+ <disk type="block" device="cdrom">
+ <target dev="hdc" bus="ide"/>
+ <readonly/>
+ <boot order="2"/>
+ </disk>
+ <interface type="network">
+ <source network="default"/>
+ <mac address="22:22:33:44:55:66"/>
+ <model type="virtio"/>
+ <boot order="3"/>
+ </interface>
+ <interface type="network">
+ <source network="default"/>
+ <model type="virtio"/>
+ </interface>
+ <controller type="usb" index="0"/>
+ <redirdev bus="usb" type="tcp">
+ <source mode="connect" host="localhost" service="4000"/>
+ <boot order="4"/>
+ </redirdev>
+ <graphics type="vnc" display=":3.4" xauth="/tmp/.Xauthority"/>
+ <console type="pty"/>
+ <memballoon model="virtio"/>
+ </devices>
+</domain>
diff --git a/tests/xmlparse.py b/tests/xmlparse.py
index 2dbaf24c..d12522ab 100644
--- a/tests/xmlparse.py
+++ b/tests/xmlparse.py
@@ -436,6 +436,55 @@ class XMLParseTest(unittest.TestCase):
self._alter_compare(guest.get_xml(), outfile)
+ def testAlterDevicesBootorder(self):
+ basename = "change-devices-bootorder"
+ guest, outfile = self._get_test_content(basename)
+ disk_1 = guest.devices.disk[0]
+ disk_2 = guest.devices.disk[1]
+ disk_3 = guest.devices.disk[2]
+ disk_4 = guest.devices.disk[3]
+ iface_1 = guest.devices.interface[0]
+ iface_2 = guest.devices.interface[1]
+ redirdev_1 = guest.devices.redirdev[0]
+
+ self.assertEqual(guest.os.bootorder, ['hd'])
+ self.assertEqual(disk_1.boot.order, None)
+ self.assertEqual(disk_2.boot.order, 10)
+ self.assertEqual(disk_3.boot.order, 10)
+ self.assertEqual(disk_4.boot.order, 1)
+ self.assertEqual(iface_1.boot.order, 2)
+ self.assertEqual(iface_2.boot.order, None)
+ self.assertEqual(redirdev_1.boot.order, 3)
+
+ guest.reorder_boot_order(disk_1, 1)
+
+ self.assertEqual(guest.os.bootorder, [])
+ self.assertEqual(disk_1.boot.order, 1)
+ self.assertEqual(disk_2.boot.order, 10)
+ self.assertEqual(disk_3.boot.order, 10)
+ # verify that the used algorithm preserves the order of
+ # records with equal boot indices
+ self.assertIs(disk_2, guest.devices.disk[1])
+ self.assertIs(disk_3, guest.devices.disk[2])
+ self.assertEqual(disk_4.boot.order, 2)
+ self.assertEqual(iface_1.boot.order, 3)
+ self.assertEqual(iface_2.boot.order, None)
+ self.assertEqual(redirdev_1.boot.order, 4)
+
+ try:
+ self._alter_compare(guest.get_xml(), outfile)
+ except RuntimeError as error:
+ self.assertIn("unsupported configuration", str(error))
+
+ guest.reorder_boot_order(disk_2, 10)
+ self.assertEqual(disk_2.boot.order, 10)
+ self.assertEqual(disk_3.boot.order, 11)
+ self.assertIs(disk_2, guest.devices.disk[1])
+ self.assertIs(disk_3, guest.devices.disk[2])
+
+ outfile = self._gen_outfile_path("change-devices-bootorder-fixed")
+ self._alter_compare(guest.get_xml(), outfile)
+
def testSingleDisk(self):
xml = ("""<disk type="file" device="disk"><source file="/a.img"/>\n"""
"""<target dev="hda" bus="ide"/></disk>\n""")

View File

@ -0,0 +1,27 @@
References: jsc#SLE-6262, fate#327048: KVM: Boot Configuration Override (virt-manager)
Subject: cli: Use reorder_boot_order for setting the boot order
From: Marc Hartmayer mhartmay@linux.ibm.com Tue Feb 26 10:56:39 2019 +0100
Date: Wed Mar 6 13:15:38 2019 -0500:
Git: b83a0a61a0da867048b232054a41c4c98edbb9d8
Use the newly introduced method `reorder_boot_order` for setting
the boot index of a device. This ensures that all other boot order
values of domain guest definition are adjusted accordingly.
Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
Index: virt-manager-2.1.0/virtinst/cli.py
===================================================================
--- virt-manager-2.1.0.orig/virtinst/cli.py
+++ virt-manager-2.1.0/virtinst/cli.py
@@ -2162,7 +2162,7 @@ def _add_device_boot_order_arg(cls):
if not guest.conn.check_support(support.SUPPORT_CONN_DEVICE_BOOT_ORDER):
raise NotImplementedError('Device boot order isn\'t supported by the connection')
- inst.boot.order = val
+ guest.reorder_boot_order(inst, val)
cls.set_boot_order_cb = set_boot_order_cb
cls.add_arg("boot.order", "boot_order", cb=cls.set_boot_order_cb)

View File

@ -0,0 +1,76 @@
References: jsc#SLE-6262, fate#327048: KVM: Boot Configuration Override (virt-manager)
Subject: tests: cli: Add boot.order tests
From: Marc Hartmayer mhartmay@linux.ibm.com Tue Feb 26 10:56:40 2019 +0100
Date: Wed Mar 6 13:15:38 2019 -0500:
Git: c896d19d7645a2728b064d2026610178358220c5
Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
diff --git a/tests/cli-test-xml/compare/virt-xml-edit-select-disk-bootorder.xml b/tests/cli-test-xml/compare/virt-xml-edit-select-disk-bootorder.xml
new file mode 100644
index 00000000..60114b99
--- /dev/null
+++ b/tests/cli-test-xml/compare/virt-xml-edit-select-disk-bootorder.xml
@@ -0,0 +1,19 @@
+ <total_iops_sec>50</total_iops_sec>
+ </iotune>
+ <address type="drive" controller="0" bus="0" target="0" unit="0"/>
++ <boot order="1"/>
+ </disk>
+ <disk type="file" device="disk">
+ <driver name="qemu" type="qcow2" cache="none"/>
+@@
+ </source>
+ <target dev="sda" bus="scsi"/>
+ <shareable/>
+- <boot order="1"/>
++ <boot order="2"/>
+ <address type="drive" controller="9" bus="0" target="0" unit="0"/>
+ </disk>
+ <controller type="scsi" index="0"/>
+
+Domain 'test-for-virtxml' defined successfully.
+Changes will take effect after the domain is fully powered off.
\ No newline at end of file
diff --git a/tests/cli-test-xml/compare/virt-xml-edit-select-disk-bootorder2.xml b/tests/cli-test-xml/compare/virt-xml-edit-select-disk-bootorder2.xml
new file mode 100644
index 00000000..0c35cd14
--- /dev/null
+++ b/tests/cli-test-xml/compare/virt-xml-edit-select-disk-bootorder2.xml
@@ -0,0 +1,18 @@
+ <os>
+ <type arch="i686">hvm</type>
+ <loader type="rom">/usr/lib/xen/boot/hvmloader</loader>
+- <boot dev="hd"/>
+ </os>
+ <features>
+ <acpi/>
+@@
+ <source file="/dev/default-pool/collidevol1.img"/>
+ <target dev="hda" bus="ide"/>
+ <address type="drive" controller="0" bus="0" target="0" unit="0"/>
++ <boot order="1"/>
+ </disk>
+ <controller type="ide" index="0"/>
+ <interface type="user">
+
+Domain 'test-collide' defined successfully.
+Changes will take effect after the domain is fully powered off.
\ No newline at end of file
diff --git a/tests/clitest.py b/tests/clitest.py
index a86c15cc..fff4b99f 100644
--- a/tests/clitest.py
+++ b/tests/clitest.py
@@ -965,6 +965,10 @@ c.add_compare("--edit ich6 --sound pcspk", "edit-select-sound-model", check_vers
c.add_compare("--edit target=hda --disk /dev/null", "edit-select-disk-target")
c.add_compare("--edit /tmp/foobar2 --disk shareable=off,readonly=on", "edit-select-disk-path")
c.add_compare("--edit mac=00:11:7f:33:44:55 --network target=nic55", "edit-select-network-mac")
+c.add_compare("--edit target=hda --disk boot_order=1", "edit-select-disk-bootorder")
+
+c = vixml.add_category("edit selection 2", "test-collide --print-diff --define")
+c.add_compare("--edit target=hda --disk boot_order=1", "edit-select-disk-bootorder2")
c = vixml.add_category("edit clear", "test-for-virtxml --print-diff --define")
c.add_invalid("--edit --memory 200,clearxml=yes") # clear isn't wired up for memory

View File

@ -0,0 +1,45 @@
References: jsc#SLE-6262, fate#327048: KVM: Boot Configuration Override (virt-manager)
Subject: virt-xml: Add --no-define argument
From: Marc Hartmayer mhartmay@linux.ibm.com Tue Feb 26 10:56:41 2019 +0100
Date: Wed Mar 6 13:15:38 2019 -0500:
Git: 29f9f2ac9c168b29043e8a443d354f2b7802c9f9
Add `--no-define` argument. It's mutually exclusive to the `--define`
argument and later on it allows the user to start a domain
transiently.
Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
Index: virt-manager-2.1.0/virt-xml
===================================================================
--- virt-manager-2.1.0.orig/virt-xml
+++ virt-manager-2.1.0/virt-xml
@@ -363,9 +363,13 @@ def parse_args():
"With --add-device, this is a hotplug operation.\n"
"With --remove-device, this is a hotunplug operation.\n"
"With --edit, this is an update device operation."))
- outg.add_argument("--define", action="store_true",
- help=_("Force defining the domain. Only required if a --print "
- "option was specified."))
+ define_g = outg.add_mutually_exclusive_group()
+ define_g.add_argument("--define", action="store_true",
+ help=_("Force defining the domain. Only required if a --print "
+ "option was specified."))
+ define_g.add_argument("--no-define", dest='define', action="store_false",
+ help=_("Force not defining the domain."))
+ define_g.set_defaults(define=None)
outg.add_argument("--print-diff", action="store_true",
help=_("Only print the requested change, in diff format"))
outg.add_argument("--print-xml", action="store_true",
@@ -426,7 +430,8 @@ def main(conn=None):
if not options.define:
options.print_xml = True
else:
- options.define = True
+ if options.define is None:
+ options.define = True
if options.confirm and not options.print_xml:
options.print_diff = True

View File

@ -0,0 +1,25 @@
References: jsc#SLE-6262, fate#327048: KVM: Boot Configuration Override (virt-manager)
Subject: tests: cli: Add test case for --no-define argument
From: Marc Hartmayer mhartmay@linux.ibm.com Tue Feb 26 10:56:42 2019 +0100
Date: Wed Mar 6 13:15:38 2019 -0500:
Git: c2bff50977b83bb1b4bddbfe579735c2fc9d9c65
Add a test case validating mutual exclusivity of `--no-define` and
'--define' arguments.
Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
diff --git a/tests/clitest.py b/tests/clitest.py
index fff4b99f..b4f41b79 100644
--- a/tests/clitest.py
+++ b/tests/clitest.py
@@ -902,6 +902,7 @@ c.add_invalid("test-for-virtxml --add-device --host-device 0x04b3:0x4485 --updat
c.add_invalid("test-for-virtxml --remove-device --host-device 1 --update") # test driver doesn't support detachdevice...
c.add_invalid("test-for-virtxml --edit --graphics password=foo --update") # test driver doesn't support updatdevice...
c.add_invalid("--build-xml --memory 10,maxmemory=20") # building XML for option that doesn't support it
+c.add_invalid("test --edit --boot network,cdrom --define --no-define")
c.add_compare("test --print-xml --edit --vcpus 7", "print-xml") # test --print-xml
c.add_compare("--edit --cpu host-passthrough", "stdin-edit", input_file=(XMLDIR + "/virtxml-stdin-edit.xml")) # stdin test
c.add_compare("--build-xml --cpu pentium3,+x2apic", "build-cpu")

View File

@ -0,0 +1,103 @@
References: jsc#SLE-6262, fate#327048: KVM: Boot Configuration Override (virt-manager)
Subject: virt-xml: Add support for starting the domain
From: Marc Hartmayer mhartmay@linux.ibm.com Tue Feb 26 10:56:43 2019 +0100
Date: Wed Mar 6 13:15:38 2019 -0500:
Git: 90b1a3ab7d9cb9c84e7dda7093ae2c97217fa591
Add support for starting the domain. By default, first the domain is
defined and then started. If the `--start` is used in combination with
`--no-define` a transient domain is created without persisting the
changes in the persistent domain definition.
Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
Index: virt-manager-2.1.0/virt-xml
===================================================================
--- virt-manager-2.1.0.orig/virt-xml
+++ virt-manager-2.1.0/virt-xml
@@ -257,9 +257,28 @@ def define_changes(conn, inactive_xmlobj
for dev in devs:
setup_device(dev)
- conn.defineXML(inactive_xmlobj.get_xml())
+ dom = conn.defineXML(inactive_xmlobj.get_xml())
print_stdout(_("Domain '%s' defined successfully.") % inactive_xmlobj.name)
- return True
+ return dom
+
+
+def start_domain_transient(conn, xmlobj, devs, action, confirm):
+ if confirm:
+ if not prompt_yes_or_no(
+ _("Start '%s' with the changed XML?") % xmlobj.name):
+ return False
+
+ if action == "hotplug":
+ for dev in devs:
+ setup_device(dev)
+
+ try:
+ dom = conn.createXML(xmlobj.get_xml())
+ except libvirt.libvirtError as e:
+ fail(_("Failed starting domain '%s': %s") % (xmlobj.name, e))
+ else:
+ print_stdout(_("Domain '%s' started successfully.") % xmlobj.name)
+ return dom
def update_changes(domain, devs, action, confirm):
@@ -370,6 +389,8 @@ def parse_args():
define_g.add_argument("--no-define", dest='define', action="store_false",
help=_("Force not defining the domain."))
define_g.set_defaults(define=None)
+ outg.add_argument("--start", action="store_true",
+ help=_("Start the domain."))
outg.add_argument("--print-diff", action="store_true",
help=_("Only print the requested change, in diff format"))
outg.add_argument("--print-xml", action="store_true",
@@ -411,6 +432,9 @@ def main(conn=None):
options.quiet = False
cli.setupLogging("virt-xml", options.debug, options.quiet)
+ if options.update and options.start:
+ fail(_("Either update or start a domain"))
+
if cli.check_option_introspection(options):
return 0
@@ -468,14 +492,27 @@ def main(conn=None):
else:
logging.warning(
_("The VM is not running, --update is inapplicable."))
- if options.define:
+
+ if options.define or options.start:
devs, action = prepare_changes(inactive_xmlobj, options, parserclass)
- applied = define_changes(conn, inactive_xmlobj,
+ if options.define:
+ dom = define_changes(conn, inactive_xmlobj,
devs, action, options.confirm)
- if not options.update and active_xmlobj and applied:
- print_stdout(
- _("Changes will take effect after the domain is fully powered off."))
- if not options.update and not options.define:
+ if dom and options.start:
+ try:
+ dom.create()
+ except libvirt.libvirtError as e:
+ fail(_("Failed starting domain '%s': %s") % (inactive_xmlobj.name, e))
+ print_stdout(_("Domain '%s' started successfully.") %
+ inactive_xmlobj.name)
+ elif not options.update and active_xmlobj and dom:
+ print_stdout(
+ _("Changes will take effect after the domain is fully powered off."))
+ else:
+ dom = start_domain_transient(conn, inactive_xmlobj, devs,
+ action, options.confirm)
+
+ if not options.update and not options.define and not options.start:
prepare_changes(inactive_xmlobj, options, parserclass)
return 0

View File

@ -0,0 +1,293 @@
References: jsc#SLE-6262, fate#327048: KVM: Boot Configuration Override (virt-manager)
Subject: tests: virt-xml: Add test cases for --start option
From: Marc Hartmayer mhartmay@linux.ibm.com Tue Feb 26 10:56:44 2019 +0100
Date: Wed Mar 6 13:15:38 2019 -0500:
Git: 908b8e8d7c3663ca791b068f2f03234e31281bbc
The test cases verify that:
+ --start works
+ --define --start works
+ --no-define --start works
+ --start works in combination with --add and --remove
+ combination of --start --update isn't valid
+ combination of --define --no-define --start isn't valid
Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
Reviewed-by: Boris Fiuczynski <fiuczy@linux.ibm.com>
diff --git a/tests/cli-test-xml/compare/virt-xml-add-disk-basic-start.xml b/tests/cli-test-xml/compare/virt-xml-add-disk-basic-start.xml
new file mode 100644
index 00000000..0071d9e7
--- /dev/null
+++ b/tests/cli-test-xml/compare/virt-xml-add-disk-basic-start.xml
@@ -0,0 +1,11 @@
+ <model type="cirrus" vram="16384" heads="1" primary="yes"/>
+ </video>
+ <memballoon model="virtio"/>
++ <disk type="file" device="disk">
++ <source file="/dev/default-pool/testvol1.img"/>
++ <target dev="vdf" bus="virtio"/>
++ </disk>
+ </devices>
+ </domain>
+
+Domain 'test-state-shutoff' started successfully.
\ No newline at end of file
diff --git a/tests/cli-test-xml/compare/virt-xml-add-disk-create-storage-start.xml b/tests/cli-test-xml/compare/virt-xml-add-disk-create-storage-start.xml
new file mode 100644
index 00000000..6a02dcc3
--- /dev/null
+++ b/tests/cli-test-xml/compare/virt-xml-add-disk-create-storage-start.xml
@@ -0,0 +1,11 @@
+ <model type="cirrus" vram="16384" heads="1" primary="yes"/>
+ </video>
+ <memballoon model="virtio"/>
++ <disk type="file" device="disk">
++ <source file="/dev/default-pool/new1.img"/>
++ <target dev="hdd" bus="ide"/>
++ </disk>
+ </devices>
+ </domain>
+
+Domain 'test-state-shutoff' started successfully.
\ No newline at end of file
diff --git a/tests/cli-test-xml/compare/virt-xml-add-host-device-start.xml b/tests/cli-test-xml/compare/virt-xml-add-host-device-start.xml
new file mode 100644
index 00000000..b3db5279
--- /dev/null
+++ b/tests/cli-test-xml/compare/virt-xml-add-host-device-start.xml
@@ -0,0 +1,14 @@
+ <model type="cirrus" vram="16384" heads="1" primary="yes"/>
+ </video>
+ <memballoon model="virtio"/>
++ <hostdev mode="subsystem" type="usb" managed="yes">
++ <source>
++ <vendor id="0x04b3"/>
++ <product id="0x4485"/>
++ </source>
++ </hostdev>
+ </devices>
+ </domain>
+
+Domain 'test-state-shutoff' defined successfully.
+Domain 'test-state-shutoff' started successfully.
\ No newline at end of file
diff --git a/tests/cli-test-xml/compare/virt-xml-remove-disk-path-start.xml b/tests/cli-test-xml/compare/virt-xml-remove-disk-path-start.xml
new file mode 100644
index 00000000..e04db8fb
--- /dev/null
+++ b/tests/cli-test-xml/compare/virt-xml-remove-disk-path-start.xml
@@ -0,0 +1,20 @@
+ <on_lockfailure>poweroff</on_lockfailure>
+ <devices>
+ <emulator>/usr/lib/xen/bin/qemu-dm</emulator>
+- <disk type="block" device="disk">
+- <driver name="qemu"/>
+- <source dev="/dev/null"/>
+- <target dev="vda" bus="virtio"/>
+- <boot order="10"/>
+- </disk>
+- <disk type="block" device="disk">
+- <driver name="qemu"/>
+- <source dev="/dev/null"/>
+- <target dev="vdb" bus="virtio"/>
+- <boot order="3"/>
+- </disk>
+ <disk type="block" device="cdrom">
+ <target dev="hdc" bus="ide"/>
+ <readonly/>
+
+Domain 'test-state-shutoff' started successfully.
\ No newline at end of file
diff --git a/tests/cli-test-xml/compare/virt-xml-start-select-disk-bootorder.xml b/tests/cli-test-xml/compare/virt-xml-start-select-disk-bootorder.xml
new file mode 100644
index 00000000..280d9fc5
--- /dev/null
+++ b/tests/cli-test-xml/compare/virt-xml-start-select-disk-bootorder.xml
@@ -0,0 +1,33 @@
+ <driver name="qemu"/>
+ <source dev="/dev/null"/>
+ <target dev="vda" bus="virtio"/>
+- <boot order="10"/>
++ <boot order="1"/>
+ </disk>
+ <disk type="block" device="disk">
+ <driver name="qemu"/>
+ <source dev="/dev/null"/>
+ <target dev="vdb" bus="virtio"/>
+- <boot order="3"/>
++ <boot order="4"/>
+ </disk>
+ <disk type="block" device="cdrom">
+ <target dev="hdc" bus="ide"/>
+ <readonly/>
+- <boot order="1"/>
++ <boot order="2"/>
+ <address type="drive" controller="0" bus="1" target="0" unit="0"/>
+ </disk>
+ <controller type="ide" index="0"/>
+@@
+ <source network="default"/>
+ <target dev="testnet0"/>
+ <model type="virtio"/>
+- <boot order="2"/>
++ <boot order="3"/>
+ </interface>
+ <interface type="network">
+ <mac address="52:54:00:11:fa:28"/>
+
+Domain 'test-state-shutoff' defined successfully.
+Domain 'test-state-shutoff' started successfully.
\ No newline at end of file
diff --git a/tests/cli-test-xml/compare/virt-xml-start-select-disk-bootorder2.xml b/tests/cli-test-xml/compare/virt-xml-start-select-disk-bootorder2.xml
new file mode 100644
index 00000000..1144f4c5
--- /dev/null
+++ b/tests/cli-test-xml/compare/virt-xml-start-select-disk-bootorder2.xml
@@ -0,0 +1,32 @@
+ <driver name="qemu"/>
+ <source dev="/dev/null"/>
+ <target dev="vda" bus="virtio"/>
+- <boot order="10"/>
++ <boot order="1"/>
+ </disk>
+ <disk type="block" device="disk">
+ <driver name="qemu"/>
+ <source dev="/dev/null"/>
+ <target dev="vdb" bus="virtio"/>
+- <boot order="3"/>
++ <boot order="4"/>
+ </disk>
+ <disk type="block" device="cdrom">
+ <target dev="hdc" bus="ide"/>
+ <readonly/>
+- <boot order="1"/>
++ <boot order="2"/>
+ <address type="drive" controller="0" bus="1" target="0" unit="0"/>
+ </disk>
+ <controller type="ide" index="0"/>
+@@
+ <source network="default"/>
+ <target dev="testnet0"/>
+ <model type="virtio"/>
+- <boot order="2"/>
++ <boot order="3"/>
+ </interface>
+ <interface type="network">
+ <mac address="52:54:00:11:fa:28"/>
+
+Domain 'test-state-shutoff' started successfully.
\ No newline at end of file
diff --git a/tests/clitest.py b/tests/clitest.py
index b4f41b79..1c3cd5a5 100644
--- a/tests/clitest.py
+++ b/tests/clitest.py
@@ -893,6 +893,7 @@ c = vixml.add_category("misc", "")
c.add_valid("--help") # basic --help test
c.add_valid("--sound=? --tpm=?") # basic introspection test
c.add_valid("test-state-shutoff --edit --update --boot menu=on") # --update with inactive VM, should work but warn
+c.add_invalid("test-state-shutoff --edit --update --boot menu=on --start")
c.add_invalid("test --edit --hostdev driver_name=vfio") # Guest has no hostdev to edit
c.add_invalid("test --edit --cpu host-passthrough --boot hd,network") # Specified more than 1 option
c.add_invalid("test --edit") # specified no edit option
@@ -968,6 +969,12 @@ c.add_compare("--edit /tmp/foobar2 --disk shareable=off,readonly=on", "edit-sele
c.add_compare("--edit mac=00:11:7f:33:44:55 --network target=nic55", "edit-select-network-mac")
c.add_compare("--edit target=hda --disk boot_order=1", "edit-select-disk-bootorder")
+c = vixml.add_category("edit and start selection", "test-state-shutoff --print-diff --start")
+c.add_compare("--define --edit target=vda --disk boot_order=1", "start-select-disk-bootorder")
+c.add_invalid("--define --no-define --edit target=vda --disk boot_order=1")
+c.add_compare("--edit target=vda --disk boot_order=1", "start-select-disk-bootorder2")
+c.add_compare("--no-define --edit target=vda --disk boot_order=1", "start-select-disk-bootorder2")
+
c = vixml.add_category("edit selection 2", "test-collide --print-diff --define")
c.add_compare("--edit target=hda --disk boot_order=1", "edit-select-disk-bootorder2")
@@ -995,6 +1002,16 @@ c.add_compare("--remove-device --disk /dev/null", "remove-disk-path")
c.add_compare("--remove-device --video all", "remove-video-all", check_version="1.3.3") # check_version=video primary= attribute
c.add_compare("--remove-device --host-device 0x04b3:0x4485", "remove-hostdev-name", check_version="1.2.11") # check_version=video ram output change
+c = vixml.add_category("add/rm devices and start", "test-state-shutoff --print-diff --start")
+c.add_invalid("--add-device --pm suspend_to_disk=yes") # --add-device without a device
+c.add_invalid("--remove-device --clock utc") # --remove-device without a dev
+# one test in combination with --define
+c.add_compare("--define --add-device --host-device usb_device_4b3_4485_noserial", "add-host-device-start")
+# all other test cases without
+c.add_compare("--add-device --disk %(EXISTIMG1)s,bus=virtio,target=vdf", "add-disk-basic-start")
+c.add_compare("--add-device --disk %(NEWIMG1)s,size=.01", "add-disk-create-storage-start")
+c.add_compare("--remove-device --disk /dev/null", "remove-disk-path-start")
+
c = vixml.add_category("add/rm devices OS KVM", "--connect %(URI-KVM)s test --print-diff --define")
c.add_compare("--add-device --disk %(EXISTIMG1)s", "kvm-add-disk-os-from-xml") # Guest OS (none) from XML
c.add_compare("--add-device --disk %(EXISTIMG1)s --os-variant fedora28", "kvm-add-disk-os-from-cmdline") # Guest OS (fedora) provided on command line
diff --git a/tests/testsuite.xml b/tests/testsuite.xml
index fa0a077f..2e6f0fd6 100644
--- a/tests/testsuite.xml
+++ b/tests/testsuite.xml
@@ -289,6 +289,64 @@
<memory>1048576</memory>
<bootloader>/tmp/bootfoo</bootloader>
<test:runstate>5</test:runstate>
+ <metadata>
+ <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
+ <libosinfo:os id="http://fedoraproject.org/fedora/17"/>
+ </libosinfo:libosinfo>
+ </metadata>
+ <currentMemory>204800</currentMemory>
+ <memory>409600</memory>
+ <uuid>12345678-1234-1234-1234-123456789012</uuid>
+ <os>
+ <type arch="i686" machine="foobar">hvm</type>
+ </os>
+ <features>
+ <acpi/>
+ <apic/>
+ <hyperv>
+ <vapic state="off"/>
+ <spinlocks state="on" retries="12287"/>
+ </hyperv>
+ <vmport state="off"/>
+ </features>
+ <on_poweroff>destroy</on_poweroff>
+ <on_reboot>restart</on_reboot>
+ <on_crash>destroy</on_crash>
+ <on_lockfailure>poweroff</on_lockfailure>
+ <devices>
+ <emulator>/usr/lib/xen/bin/qemu-dm</emulator>
+ <disk type="block" device="disk">
+ <driver name="qemu"/>
+ <source dev="/dev/null"/>
+ <target dev="vda" bus="virtio"/>
+ <boot order="10"/>
+ </disk>
+ <disk type="block" device="disk">
+ <driver name="qemu"/>
+ <source dev="/dev/null"/>
+ <target dev="vdb" bus="virtio"/>
+ <boot order="3"/>
+ </disk>
+ <disk type="block" device="cdrom">
+ <target dev="hdc" bus="ide"/>
+ <readonly/>
+ <boot order="1"/>
+ </disk>
+ <interface type="network">
+ <source network="default"/>
+ <mac address="22:22:33:44:55:66"/>
+ <model type="virtio"/>
+ <boot order="2"/>
+ </interface>
+ <interface type="network">
+ <source network="default"/>
+ <mac address="52:54:00:11:fa:28"/>
+ <model type="virtio"/>
+ </interface>
+ <graphics type="vnc" display=":3.4" xauth="/tmp/.Xauthority"/>
+ <console type="pty"/>
+ <memballoon model="virtio"/>
+ </devices>
</domain>

View File

@ -12,7 +12,7 @@ Index: virt-manager-2.1.0/tests/clitest.py
=================================================================== ===================================================================
--- virt-manager-2.1.0.orig/tests/clitest.py --- virt-manager-2.1.0.orig/tests/clitest.py
+++ virt-manager-2.1.0/tests/clitest.py +++ virt-manager-2.1.0/tests/clitest.py
@@ -908,8 +908,8 @@ c.add_compare("--build-xml --cpu pentium @@ -910,8 +910,8 @@ c.add_compare("--build-xml --cpu pentium
c.add_compare("--build-xml --tpm /dev/tpm", "build-tpm") c.add_compare("--build-xml --tpm /dev/tpm", "build-tpm")
c.add_compare("--build-xml --blkiotune weight=100,device_path=/dev/sdf,device_weight=200", "build-blkiotune") c.add_compare("--build-xml --blkiotune weight=100,device_path=/dev/sdf,device_weight=200", "build-blkiotune")
c.add_compare("--build-xml --idmap uid_start=0,uid_target=1000,uid_count=10,gid_start=0,gid_target=1000,gid_count=10", "build-idmap") c.add_compare("--build-xml --idmap uid_start=0,uid_target=1000,uid_count=10,gid_start=0,gid_target=1000,gid_count=10", "build-idmap")

View File

@ -67,7 +67,7 @@ Index: virt-manager-2.1.0/virtinst/cli.py
=================================================================== ===================================================================
--- virt-manager-2.1.0.orig/virtinst/cli.py --- virt-manager-2.1.0.orig/virtinst/cli.py
+++ virt-manager-2.1.0/virtinst/cli.py +++ virt-manager-2.1.0/virtinst/cli.py
@@ -2430,6 +2430,7 @@ class ParserNetwork(VirtCLIParser): @@ -2438,6 +2438,7 @@ class ParserNetwork(VirtCLIParser):
cls.add_arg("driver_name", "driver_name") cls.add_arg("driver_name", "driver_name")
cls.add_arg("driver_queues", "driver_queues") cls.add_arg("driver_queues", "driver_queues")

View File

@ -18,7 +18,7 @@ Index: virt-manager-2.1.0/virtinst/cli.py
=================================================================== ===================================================================
--- virt-manager-2.1.0.orig/virtinst/cli.py --- virt-manager-2.1.0.orig/virtinst/cli.py
+++ virt-manager-2.1.0/virtinst/cli.py +++ virt-manager-2.1.0/virtinst/cli.py
@@ -2263,7 +2263,9 @@ class ParserDisk(VirtCLIParser): @@ -2271,7 +2271,9 @@ class ParserDisk(VirtCLIParser):
poolobj = None poolobj = None
if poolname: if poolname:
if poolname == "default": if poolname == "default":

View File

@ -23,7 +23,7 @@ Index: virt-manager-2.1.0/virtinst/guest.py
=================================================================== ===================================================================
--- virt-manager-2.1.0.orig/virtinst/guest.py --- virt-manager-2.1.0.orig/virtinst/guest.py
+++ virt-manager-2.1.0/virtinst/guest.py +++ virt-manager-2.1.0/virtinst/guest.py
@@ -588,6 +588,17 @@ class Guest(XMLBuilder): @@ -622,6 +622,17 @@ class Guest(XMLBuilder):
dev.bus = "usb" dev.bus = "usb"
self.add_device(dev) self.add_device(dev)

View File

@ -1,3 +1,22 @@
-------------------------------------------------------------------
Thu May 23 08:17:01 MDT 2019 - carnold@suse.com
- jsc#SLE-6262, fate#327048: KVM: Boot Configuration Override
001-adf30349-cli-refactor-get_prop.patch
002-60c7e778-xmlapi-add-set_prop.patch
003-5bad22e8-tests-Use-get-set_prop.patch
004-ee5f3eab-support-Add-SUPPORT_CONN_DEVICE_BOOT_ORDER.patch
005-7768eb17-cli-Add-check-if-device-boot-order-is-supported.patch
006-ecc0861c-tests-xmlparse-refactor-method-for-generating-out-file-path.patch
007-c9d070da-guest-Add-reorder_boot_order-method.patch
008-1b535940-tests-Add-test-case-for-reorder_boot_order-method.patch
009-b83a0a61-cli-Use-reorder_boot_order-for-setting-the-boot-order.patch
010-c896d19d-tests-cli-Add-boot.order-tests.patch
011-29f9f2ac-virt-xml-Add-no-define-argument.patch
012-c2bff509-tests-cli-Add-test-case-for-no-define-argument.patch
013-90b1a3ab-virt-xml-Add-support-for-starting-the-domain.patch
014-908b8e8d-tests-virt-xml-Add-test-cases-for-start-option.patch
------------------------------------------------------------------- -------------------------------------------------------------------
Tue Apr 9 10:21:29 MDT 2019 - carnold@suse.com Tue Apr 9 10:21:29 MDT 2019 - carnold@suse.com

View File

@ -40,13 +40,28 @@ Patch5: 26a433fc-virtManager-clone-check-which-storage-pools-supports-vo
Patch6: 4f66c423-cloner-Handle-nonsparse-for-qcow2-images.patch Patch6: 4f66c423-cloner-Handle-nonsparse-for-qcow2-images.patch
Patch7: a02fc0d0-virtManager-clone-build-default-clone-path-if-we-know-how.patch Patch7: a02fc0d0-virtManager-clone-build-default-clone-path-if-we-know-how.patch
Patch8: 1856c1fa-support-Fix-minimum-version-check.patch Patch8: 1856c1fa-support-Fix-minimum-version-check.patch
Patch9: 5bc847eb-virt-install-Do-not-warn-about-consoles-on-s390x.patch # jsc#SLE-6262 - KVM: Boot Configuration Override (virt-manager)
Patch10: 74bbc3db-urldetect-Check-also-for-treeinfo.patch Patch9: 001-adf30349-cli-refactor-get_prop.patch
Patch11: 708af01c-osdict-Add-supports_virtioinput.patch Patch10: 002-60c7e778-xmlapi-add-set_prop.patch
Patch12: f23b01be-guest-Add-VirtIO-input-devices-to-s390x-guests-with-graphics.patch Patch11: 003-5bad22e8-tests-Use-get-set_prop.patch
Patch13: 7afbb90b-virt-xml-Handle-VM-names-that-look-like-id-uuid.patch Patch12: 004-ee5f3eab-support-Add-SUPPORT_CONN_DEVICE_BOOT_ORDER.patch
Patch14: 8d9743d6-virt-install-Add-support-for-xenbus-controller.patch Patch13: 005-7768eb17-cli-Add-check-if-device-boot-order-is-supported.patch
Patch15: a0ca387a-cli-Fix-pool-default-when-path-belongs-to-another-pool.patch Patch14: 006-ecc0861c-tests-xmlparse-refactor-method-for-generating-out-file-path.patch
Patch15: 007-c9d070da-guest-Add-reorder_boot_order-method.patch
Patch16: 008-1b535940-tests-Add-test-case-for-reorder_boot_order-method.patch
Patch17: 009-b83a0a61-cli-Use-reorder_boot_order-for-setting-the-boot-order.patch
Patch18: 010-c896d19d-tests-cli-Add-boot.order-tests.patch
Patch19: 011-29f9f2ac-virt-xml-Add-no-define-argument.patch
Patch20: 012-c2bff509-tests-cli-Add-test-case-for-no-define-argument.patch
Patch21: 013-90b1a3ab-virt-xml-Add-support-for-starting-the-domain.patch
Patch22: 014-908b8e8d-tests-virt-xml-Add-test-cases-for-start-option.patch
Patch23: 5bc847eb-virt-install-Do-not-warn-about-consoles-on-s390x.patch
Patch24: 74bbc3db-urldetect-Check-also-for-treeinfo.patch
Patch25: 708af01c-osdict-Add-supports_virtioinput.patch
Patch26: f23b01be-guest-Add-VirtIO-input-devices-to-s390x-guests-with-graphics.patch
Patch27: 7afbb90b-virt-xml-Handle-VM-names-that-look-like-id-uuid.patch
Patch28: 8d9743d6-virt-install-Add-support-for-xenbus-controller.patch
Patch29: a0ca387a-cli-Fix-pool-default-when-path-belongs-to-another-pool.patch
# SUSE Only # SUSE Only
Patch70: virtman-desktop.patch Patch70: virtman-desktop.patch
Patch71: virtman-kvm.patch Patch71: virtman-kvm.patch
@ -187,6 +202,20 @@ machine).
%patch13 -p1 %patch13 -p1
%patch14 -p1 %patch14 -p1
%patch15 -p1 %patch15 -p1
%patch16 -p1
%patch17 -p1
%patch18 -p1
%patch19 -p1
%patch20 -p1
%patch21 -p1
%patch22 -p1
%patch23 -p1
%patch24 -p1
%patch25 -p1
%patch26 -p1
%patch27 -p1
%patch28 -p1
%patch29 -p1
# SUSE Only # SUSE Only
%patch70 -p1 %patch70 -p1
%patch71 -p1 %patch71 -p1

View File

@ -32,7 +32,7 @@ Index: virt-manager-2.1.0/virtinst/guest.py
=================================================================== ===================================================================
--- virt-manager-2.1.0.orig/virtinst/guest.py --- virt-manager-2.1.0.orig/virtinst/guest.py
+++ virt-manager-2.1.0/virtinst/guest.py +++ virt-manager-2.1.0/virtinst/guest.py
@@ -574,7 +574,7 @@ class Guest(XMLBuilder): @@ -608,7 +608,7 @@ class Guest(XMLBuilder):
usb_tablet = False usb_tablet = False
usb_keyboard = False usb_keyboard = False
@ -45,7 +45,7 @@ Index: virt-manager-2.1.0/virtManager/domain.py
=================================================================== ===================================================================
--- virt-manager-2.1.0.orig/virtManager/domain.py --- virt-manager-2.1.0.orig/virtManager/domain.py
+++ virt-manager-2.1.0/virtManager/domain.py +++ virt-manager-2.1.0/virtManager/domain.py
@@ -1224,6 +1224,8 @@ class vmmDomain(vmmLibvirtObject): @@ -1225,6 +1225,8 @@ class vmmDomain(vmmLibvirtObject):
return self.get_xmlobj().os.is_xenpv() return self.get_xmlobj().os.is_xenpv()
def is_hvm(self): def is_hvm(self):
return self.get_xmlobj().os.is_hvm() return self.get_xmlobj().os.is_hvm()

View File

@ -16,7 +16,7 @@ Index: virt-manager-2.1.0/virtinst/guest.py
self.skip_default_rng = False self.skip_default_rng = False
self.x86_cpu_default = self.cpu.SPECIAL_MODE_APP_DEFAULT self.x86_cpu_default = self.cpu.SPECIAL_MODE_APP_DEFAULT
@@ -289,7 +292,7 @@ class Guest(XMLBuilder): @@ -323,7 +326,7 @@ class Guest(XMLBuilder):
if not os_support: if not os_support:
return False return False
@ -25,7 +25,7 @@ Index: virt-manager-2.1.0/virtinst/guest.py
return True return True
return False return False
@@ -612,7 +615,7 @@ class Guest(XMLBuilder): @@ -646,7 +649,7 @@ class Guest(XMLBuilder):
self.add_device(dev) self.add_device(dev)
def _add_default_video_device(self): def _add_default_video_device(self):
@ -34,7 +34,7 @@ Index: virt-manager-2.1.0/virtinst/guest.py
return return
if self.devices.video: if self.devices.video:
return return
@@ -676,7 +679,7 @@ class Guest(XMLBuilder): @@ -710,7 +713,7 @@ class Guest(XMLBuilder):
return return
if self.os.is_container() and not self.conn.is_vz(): if self.os.is_container() and not self.conn.is_vz():
return return

View File

@ -24,10 +24,10 @@ Index: virt-manager-2.1.0/virtinst/support.py
=================================================================== ===================================================================
--- virt-manager-2.1.0.orig/virtinst/support.py --- virt-manager-2.1.0.orig/virtinst/support.py
+++ virt-manager-2.1.0/virtinst/support.py +++ virt-manager-2.1.0/virtinst/support.py
@@ -266,6 +266,8 @@ SUPPORT_CONN_USB3_PORTS = _make(version= @@ -267,6 +267,8 @@ SUPPORT_CONN_MACHVIRT_PCI_DEFAULT = _mak
SUPPORT_CONN_MACHVIRT_PCI_DEFAULT = _make(version="3.0.0")
SUPPORT_CONN_QEMU_XHCI = _make(version="3.3.0", hv_version={"qemu": "2.9.0"}) SUPPORT_CONN_QEMU_XHCI = _make(version="3.3.0", hv_version={"qemu": "2.9.0"})
SUPPORT_CONN_VNC_NONE_AUTH = _make(hv_version={"qemu": "2.9.0"}) SUPPORT_CONN_VNC_NONE_AUTH = _make(hv_version={"qemu": "2.9.0"})
SUPPORT_CONN_DEVICE_BOOT_ORDER = _make(hv_version={"qemu": 0, "test": 0})
+SUPPORT_CONN_NOCOW = _make( +SUPPORT_CONN_NOCOW = _make(
+ version="1.2.18", hv_version={"qemu": "2.2.0", "test": 0}) + version="1.2.18", hv_version={"qemu": "2.2.0", "test": 0})