Compare commits

..

No commits in common. "a9-deprecated" and "c8" have entirely different histories.

16 changed files with 1236 additions and 579 deletions

2
.gitignore vendored
View File

@ -1 +1 @@
SOURCES/virt-manager-4.0.0.tar.gz
SOURCES/virt-manager-3.2.0.tar.gz

View File

@ -1 +1 @@
853b1a65b346ac7be7c68d83697b4107bb780683 SOURCES/virt-manager-4.0.0.tar.gz
f620494a41f898422581846ccf38b0e4540ea54e SOURCES/virt-manager-3.2.0.tar.gz

View File

@ -1,31 +0,0 @@
From d6affa0209c727e0cd60b0700351f3f7c78c375e Mon Sep 17 00:00:00 2001
From: Pino Toscano <ptoscano@redhat.com>
Date: Mon, 1 Nov 2021 15:06:04 +0100
Subject: [PATCH] osinfo: use the OS kernel-url-argument if available
Each OS may specify which kernel argument is needed to specify the
installation source; use it as primary source, falling back to the
current logic. This should help supporting new OSes OOTB.
Signed-off-by: Pino Toscano <ptoscano@redhat.com>
---
virtinst/osdict.py | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/virtinst/osdict.py b/virtinst/osdict.py
index 1273b934b..3e9cf6dd7 100644
--- a/virtinst/osdict.py
+++ b/virtinst/osdict.py
@@ -593,6 +593,12 @@ def get_kernel_url_arg(self):
Kernel argument name the distro's installer uses to reference
a network source, possibly bypassing some installer prompts
"""
+ # Let's ask the OS for its kernel argument for the source
+ if hasattr(self._os, "get_kernel_url_argument"):
+ osarg = self._os.get_kernel_url_argument()
+ if osarg is not None:
+ return osarg
+
# SUSE distros
if self.distro in ["caasp", "sle", "sled", "sles", "opensuse"]:
return "install"

View File

@ -0,0 +1,112 @@
From 3e150cab1c478e1ce95f4f1466ecbac0b693e375 Mon Sep 17 00:00:00 2001
From: Jonathon Jongsma <jjongsma@redhat.com>
Date: Tue, 26 Oct 2021 14:18:40 -0500
Subject: [PATCH] Handle new nodedev name for mediated devices
libvirt recently changed the nodedev names for mediated devices due to
the fact that mdevctl supports defining multiple mediated devices with
the same UUID as long as only one is active at a time. This means that
the nodedev name changed from the format 'mdev_$UUID' to the format
'mdev_$UUID_$PARENT'.
Unfortunately, virt-install was parsing the nodedev name to extract the
UUID of a mediated device. This fails with the new name format.
Fortunately, in libvirt 7.3.0, a <uuid> field was added to the xml
schema for mdev devices, so we can simply use this instead, and fall
back to the name parsing if it doesn't exist.
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
(cherry picked from commit 0c146b250384ddddcefd2cc0d76b9e808377ebe5)
https://bugzilla.redhat.com/show_bug.cgi?id=2020241
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
---
tests/data/testdriver/testdriver.xml | 14 ++++++++++++++
tests/test_nodedev.py | 14 ++++++++++++++
virtinst/nodedev.py | 7 +++++++
3 files changed, 35 insertions(+)
diff --git a/tests/data/testdriver/testdriver.xml b/tests/data/testdriver/testdriver.xml
index 5875732a..e4880936 100644
--- a/tests/data/testdriver/testdriver.xml
+++ b/tests/data/testdriver/testdriver.xml
@@ -3725,4 +3725,18 @@ ba</description>
</capability>
</device>
+<device>
+ <name>mdev_35ceae7f_eea5_4f28_b7f3_7b12a3e62d3c_0000_06_00_0</name>
+ <path>/sys/devices/pci0000:00/0000:00:02.0/35ceae7f-eea5-4f28-b7f3-7b12a3e62d3c</path>
+ <parent>pci_0000_06_00_0</parent>
+ <driver>
+ <name>vfio_mdev</name>
+ </driver>
+ <capability type='mdev'>
+ <type id='nvidia-11'/>
+ <iommuGroup number='12'/>
+ <uuid>35ceae7f-eea5-4f28-b7f3-7b12a3e62d3c</uuid>
+ </capability>
+</device>
+
</node>
diff --git a/tests/test_nodedev.py b/tests/test_nodedev.py
index 79678bc8..41435262 100644
--- a/tests/test_nodedev.py
+++ b/tests/test_nodedev.py
@@ -8,6 +8,7 @@
import os.path
import pytest
+import libvirt
from virtinst import Guest
from virtinst import NodeDevice
@@ -154,6 +155,19 @@ def testPCIMdev():
assert dev.parent == "pci_0000_06_00_0"
assert dev.device_type == "mdev"
assert dev.type_id == "nvidia-11"
+ assert dev.get_mdev_uuid() == "4b20d080-1b54-4048-85b3-a6a62d165c01"
+
+# libvirt <7.3.0 doesn't support <uuid> in the mdev node device xml
+@pytest.mark.skipif(libvirt.getVersion() < 7003000, reason="libvirt version doesn't support new mdev format")
+def testPCIMdevNewFormat():
+ conn = utils.URIs.open_testdriver_cached()
+ devname = "mdev_35ceae7f_eea5_4f28_b7f3_7b12a3e62d3c_0000_06_00_0"
+ dev = _nodeDevFromName(conn, devname)
+ assert dev.name == devname
+ assert dev.parent == "pci_0000_06_00_0"
+ assert dev.device_type == "mdev"
+ assert dev.type_id == "nvidia-11"
+ assert dev.get_mdev_uuid() == "35ceae7f-eea5-4f28-b7f3-7b12a3e62d3c"
# NodeDevice 2 Device XML tests
diff --git a/virtinst/nodedev.py b/virtinst/nodedev.py
index f54a311c..248723b9 100644
--- a/virtinst/nodedev.py
+++ b/virtinst/nodedev.py
@@ -94,6 +94,12 @@ class NodeDevice(XMLBuilder):
device_type = XMLProperty("./capability/@type")
def get_mdev_uuid(self):
+ # libvirt 7.3.0 added a <uuid> element to the nodedev xml for mdev
+ # types. For older versions, we unfortunately have to parse the nodedev
+ # name, which uses the format "mdev_$UUID_WITH_UNDERSCORES"
+ if self.uuid is not None:
+ return self.uuid
+
return self.name[5:].replace('_', '-')
def compare_to_hostdev(self, hostdev):
@@ -191,6 +197,7 @@ class NodeDevice(XMLBuilder):
# type='mdev' options
type_id = XMLProperty("./capability/type/@id")
+ uuid = XMLProperty("./capability/uuid")
def _AddressStringToHostdev(conn, addrstr):
--
2.31.1

View File

@ -0,0 +1,33 @@
From b533019b5776207412ed1aa886d97ead2550695a Mon Sep 17 00:00:00 2001
From: Cole Robinson <crobinso@redhat.com>
Date: Sat, 21 Nov 2020 17:17:33 -0500
Subject: [PATCH] addstorage: Don't pass None to widget.set_active()
Older pygobject can't handle it. Mentioned here:
https://github.com/virt-manager/virt-manager/issues/188
Signed-off-by: Cole Robinson <crobinso@redhat.com>
(cherry picked from commit e7222b5058c8874b15fbfd998e5eeb233f571075)
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2026987
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
---
virtManager/device/addstorage.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/virtManager/device/addstorage.py b/virtManager/device/addstorage.py
index dee0160c..49d0b693 100644
--- a/virtManager/device/addstorage.py
+++ b/virtManager/device/addstorage.py
@@ -310,7 +310,7 @@ class vmmAddStorage(vmmGObjectUI):
detect_zeroes = disk.driver_detect_zeroes
ro = disk.read_only
share = disk.shareable
- removable = disk.removable
+ removable = bool(disk.removable)
serial = disk.serial
self.set_disk_bus(disk.bus)
--
2.31.1

View File

@ -0,0 +1,112 @@
From fa5f5f8f9b2b00b7580cb55f82c17e66e54b438d Mon Sep 17 00:00:00 2001
From: Jonathon Jongsma <jjongsma@redhat.com>
Date: Tue, 11 Jan 2022 11:21:39 -0600
Subject: [PATCH] cli: add 'ioapic.driver' to --features
Add the ability to set the ioapic driver using the --features argument:
$ virt-install --features ioapic.driver=qemu ...
This results in the following xml:
<features>
...
<ioapic driver="qemu"/>
</features>
This is required in order to install a guest with >255 cpus. Such a
configuration requires an iommu with extended interrupt mode enabled,
which in turn requires IOMMU interrupt remapping to be enabled, which in
turn requires a split I/O APIC.
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
(cherry picked from commit 9766beea0432faad7cded9e0285d05851659020e)
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2037202
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
---
tests/data/cli/compare/virt-install-singleton-config-3.xml | 1 +
tests/data/xmlparse/change-guest-out.xml | 1 +
tests/test_cli.py | 2 +-
tests/test_xmlparse.py | 1 +
virtinst/cli.py | 1 +
virtinst/domain/features.py | 1 +
6 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/tests/data/cli/compare/virt-install-singleton-config-3.xml b/tests/data/cli/compare/virt-install-singleton-config-3.xml
index d2e7a363..a36c7bf2 100644
--- a/tests/data/cli/compare/virt-install-singleton-config-3.xml
+++ b/tests/data/cli/compare/virt-install-singleton-config-3.xml
@@ -73,6 +73,7 @@
<pvspinlock state="off"/>
<smm state="off"/>
<vmcoreinfo state="on"/>
+ <ioapic driver="qemu"/>
</features>
<cpu>
<topology sockets="1" cores="3" threads="2"/>
diff --git a/tests/data/xmlparse/change-guest-out.xml b/tests/data/xmlparse/change-guest-out.xml
index 17af0826..3faf8783 100644
--- a/tests/data/xmlparse/change-guest-out.xml
+++ b/tests/data/xmlparse/change-guest-out.xml
@@ -32,6 +32,7 @@
<hidden state="on"/>
</kvm>
<pvspinlock state="on"/>
+ <ioapic driver="qemu"/>
</features>
<numatune>
<memory nodeset="2,4,6"/>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 9f0cdfe9..75a891f0 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -558,7 +558,7 @@ c.add_compare("""
--vcpus vcpu.current=3,maxvcpus=4,vcpu.placement=auto
--memory hotplugmemorymax=2048,hotplugmemoryslots=2
--disk none
---features apic.eoi=off,hap=on,hyperv.synic.state=on,hyperv.reset.state=off,hyperv.spinlocks.state=on,hyperv.spinlocks.retries=5678,pae=on,pmu.state=on,pvspinlock.state=off,smm.state=off,viridian=on,vmcoreinfo.state=on,vmport.state=off,kvm.hidden.state=on,hyperv.vapic.state=off,hyperv.relaxed.state=off,gic.version=host,kvm.hint-dedicated.state=on
+--features apic.eoi=off,hap=on,hyperv.synic.state=on,hyperv.reset.state=off,hyperv.spinlocks.state=on,hyperv.spinlocks.retries=5678,pae=on,pmu.state=on,pvspinlock.state=off,smm.state=off,viridian=on,vmcoreinfo.state=on,vmport.state=off,kvm.hidden.state=on,hyperv.vapic.state=off,hyperv.relaxed.state=off,gic.version=host,kvm.hint-dedicated.state=on,ioapic.driver=qemu
--clock rtc_present=no,pit_present=yes,pit_tickpolicy=catchup,tsc_present=no,platform_present=no,hypervclock_present=no,platform_tickpolicy=foo,hpet_tickpolicy=bar,tsc_tickpolicy=wibble,kvmclock_tickpolicy=wobble,hypervclock_tickpolicy=woo
--boot bios.useserial=no,bios.rebootTimeout=60,cmdline=root=/foo,smbios.mode=host,bootmenu.enable=yes,loader_ro=yes,loader.type=rom,loader=/tmp/foo
--memorybacking access.mode=shared,source.type=anonymous,hugepages=on
diff --git a/tests/test_xmlparse.py b/tests/test_xmlparse.py
index 6d1aaddb..ac2fb38d 100644
--- a/tests/test_xmlparse.py
+++ b/tests/test_xmlparse.py
@@ -160,6 +160,7 @@ def testAlterGuest():
check("kvm_hidden", None, True)
check("pvspinlock", None, True)
check("gic_version", None, False)
+ check("ioapic_driver", None, "qemu")
check = _make_checker(guest.cpu)
check("match", "exact", "strict")
diff --git a/virtinst/cli.py b/virtinst/cli.py
index e1a988f9..dbd4a545 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -2777,6 +2777,7 @@ class ParserFeatures(VirtCLIParser):
cls.add_arg("smm.state", "smm", is_onoff=True)
cls.add_arg("vmcoreinfo.state", "vmcoreinfo", is_onoff=True)
+ cls.add_arg("ioapic.driver", "ioapic_driver")
###################
diff --git a/virtinst/domain/features.py b/virtinst/domain/features.py
index 246839f2..7d32edc0 100644
--- a/virtinst/domain/features.py
+++ b/virtinst/domain/features.py
@@ -41,6 +41,7 @@ class DomainFeatures(XMLBuilder):
smm = XMLProperty("./smm/@state", is_onoff=True)
vmcoreinfo = XMLProperty("./vmcoreinfo/@state", is_onoff=True)
+ ioapic_driver = XMLProperty("./ioapic/@driver")
##################
--
2.34.1

View File

@ -0,0 +1,71 @@
From c1da35159c20e0d633f6c568bb984311a4fed861 Mon Sep 17 00:00:00 2001
From: Pavel Hrdina <phrdina@redhat.com>
Date: Tue, 14 Sep 2021 17:08:35 +0200
Subject: [PATCH] cli: introduce --resource fibrechannel.appid option
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
(cherry picked from commit 0953e1aea1fd16cd1825c03f3b032c7f12f3322f)
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2011327
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
---
tests/data/cli/compare/virt-install-singleton-config-1.xml | 1 +
tests/test_cli.py | 2 +-
virtinst/cli.py | 1 +
virtinst/domain/resource.py | 3 ++-
4 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/tests/data/cli/compare/virt-install-singleton-config-1.xml b/tests/data/cli/compare/virt-install-singleton-config-1.xml
index 518a0099..b50d806e 100644
--- a/tests/data/cli/compare/virt-install-singleton-config-1.xml
+++ b/tests/data/cli/compare/virt-install-singleton-config-1.xml
@@ -19,6 +19,7 @@
</numatune>
<resource>
<partition>/virtualmachines/production</partition>
+ <fibrechannel appid="myapplication"/>
</resource>
<os>
<type arch="x86_64" machine="q35">hvm</type>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 5e69a135..5b174933 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -480,7 +480,7 @@ c.add_compare("""
--memorybacking hugepages=on
--features apic=off
--clock offset=localtime
---resource /virtualmachines/production
+--resource /virtualmachines/production,fibrechannel.appid=myapplication
--events on_crash=restart
--metadata genid_enable=yes
--sysinfo host
diff --git a/virtinst/cli.py b/virtinst/cli.py
index 8e5b13cd..e1a988f9 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -1999,6 +1999,7 @@ class ParserResource(VirtCLIParser):
def _init_class(cls, **kwargs):
VirtCLIParser._init_class(**kwargs)
cls.add_arg("partition", "partition")
+ cls.add_arg("fibrechannel.appid", "fibrechannel_appid", can_comma=True)
######################
diff --git a/virtinst/domain/resource.py b/virtinst/domain/resource.py
index d0962db9..8ad3df54 100644
--- a/virtinst/domain/resource.py
+++ b/virtinst/domain/resource.py
@@ -14,6 +14,7 @@ class DomainResource(XMLBuilder):
"""
XML_NAME = "resource"
- _XML_PROP_ORDER = ["partition"]
+ _XML_PROP_ORDER = ["partition", "fibrechannel_appid"]
partition = XMLProperty("./partition")
+ fibrechannel_appid = XMLProperty("./fibrechannel/@appid")
--
2.31.1

View File

@ -0,0 +1,50 @@
From 61e24e595852a552019912b9a9d6884f5012dc6e Mon Sep 17 00:00:00 2001
From: Pavel Hrdina <phrdina@redhat.com>
Date: Fri, 5 Feb 2021 12:15:46 +0100
Subject: [PATCH] console: fix error with old pygobject
The code doesn't work as expected. From python documentation:
x and y
is the same as
x if not x or y
so in the code if for some reasone `dev` is None the value stored in
`sensitive` will be None as well.
No the code itself works with pygobject >= 3.31.3 where they allowed
None as a valid boolean value, but with older versions it will fail
with this error message:
TypeError: Argument 1 does not allow None as a value
Resolves: https://github.com/virt-manager/virt-manager/issues/226
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
(cherry picked from commit cf93e2dbff28fe05d6d45364c579f923b157beb1)
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2026987
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
---
virtManager/details/console.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/virtManager/details/console.py b/virtManager/details/console.py
index c4ed478ed..18f9ddd91 100644
--- a/virtManager/details/console.py
+++ b/virtManager/details/console.py
@@ -258,7 +258,7 @@ class _ConsoleMenu:
cb = toggled_cb
cbdata = dev
- sensitive = dev and not tooltip
+ sensitive = bool(dev and not tooltip)
active = False
if oldlabel is None and sensitive:
--
2.35.1

View File

@ -0,0 +1,35 @@
From 99d841337bab8134c173168cabd93e9b133f6049 Mon Sep 17 00:00:00 2001
From: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
Date: Mon, 31 May 2021 21:54:27 +0200
Subject: [PATCH] hostdev: use method get_mdev_uuid()
Use method get_mdev_uuid() to retrieve the UUID of MDEV node device
object.
Reviewed-by: Cole Robinson <crobinso@redhat.com>
Signed-off-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
(cherry picked from commit f87e96d3d40891f1403601abc389c24800ba1069)
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1995125
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
---
virtinst/devices/hostdev.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/virtinst/devices/hostdev.py b/virtinst/devices/hostdev.py
index e8d0fae2..b3717430 100644
--- a/virtinst/devices/hostdev.py
+++ b/virtinst/devices/hostdev.py
@@ -78,7 +78,7 @@ class DeviceHostdev(Device):
_("Don't know how to generate nodedev for mdev type id '%s'") %
nodedev.type_id)
- self.uuid = nodedev.name[5:].replace('_', '-')
+ self.uuid = nodedev.get_mdev_uuid()
else:
raise ValueError(_("Unknown node device type %s") % nodedev)
--
2.31.1

View File

@ -0,0 +1,230 @@
From a243508cc0a896dd35a73277ca651fa8638b086b Mon Sep 17 00:00:00 2001
From: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
Date: Mon, 31 May 2021 21:54:28 +0200
Subject: [PATCH] tests: verify MDEV support
Add tests to verify add, edit and remove features of mediated
devices.
Reviewed-by: Cole Robinson <crobinso@redhat.com>
Signed-off-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
(cherry picked from commit 9d4002ee0f7088c490748ffb3144c006f4e39c68)
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1995125
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
---
.../virt-xml-add-hostdev-mdev-start.xml | 12 +++++++
.../cli/compare/virt-xml-add-hostdev-mdev.xml | 14 ++++++++
tests/data/cli/compare/virt-xml-edit-all.xml | 7 ++++
.../compare/virt-xml-edit-hostdev-mdev.xml | 11 +++++++
.../compare/virt-xml-edit-simple-redirdev.xml | 2 +-
.../compare/virt-xml-remove-hostdev-mdev.xml | 15 +++++++++
tests/data/testdriver/testsuite.xml | 32 +++++++++++++++++++
tests/test_cli.py | 4 +++
tests/utils.py | 2 +-
9 files changed, 97 insertions(+), 2 deletions(-)
create mode 100644 tests/data/cli/compare/virt-xml-add-hostdev-mdev-start.xml
create mode 100644 tests/data/cli/compare/virt-xml-add-hostdev-mdev.xml
create mode 100644 tests/data/cli/compare/virt-xml-edit-hostdev-mdev.xml
create mode 100644 tests/data/cli/compare/virt-xml-remove-hostdev-mdev.xml
diff --git a/tests/data/cli/compare/virt-xml-add-hostdev-mdev-start.xml b/tests/data/cli/compare/virt-xml-add-hostdev-mdev-start.xml
new file mode 100644
index 00000000..3742d454
--- /dev/null
+++ b/tests/data/cli/compare/virt-xml-add-hostdev-mdev-start.xml
@@ -0,0 +1,12 @@
+ <model type="cirrus" vram="16384" heads="1" primary="yes"/>
+ </video>
+ <memballoon model="virtio"/>
++ <hostdev mode="subsystem" type="mdev" managed="no" model="vfio-ccw">
++ <source>
++ <address uuid="8e37ee90-2b51-45e3-9b25-bf8283c03110"/>
++ </source>
++ </hostdev>
+ </devices>
+ </domain>
+
+Domain 'test-state-shutoff' started successfully.
diff --git a/tests/data/cli/compare/virt-xml-add-hostdev-mdev.xml b/tests/data/cli/compare/virt-xml-add-hostdev-mdev.xml
new file mode 100644
index 00000000..c2acff8f
--- /dev/null
+++ b/tests/data/cli/compare/virt-xml-add-hostdev-mdev.xml
@@ -0,0 +1,14 @@
+ <vsock model="virtio">
+ <cid auto="no" address="5"/>
+ </vsock>
++ <hostdev mode="subsystem" type="mdev" managed="no" model="vfio-ccw">
++ <source>
++ <address uuid="8e37ee90-2b51-45e3-9b25-bf8283c03110"/>
++ </source>
++ </hostdev>
+ </devices>
+ <seclabel type="dynamic" model="selinux" relabel="yes"/>
+ <keywrap>
+
+Domain 'test-for-virtxml' defined successfully.
+Changes will take effect after the domain is fully powered off.
diff --git a/tests/data/cli/compare/virt-xml-edit-all.xml b/tests/data/cli/compare/virt-xml-edit-all.xml
index ed09effc..5bdee2aa 100644
--- a/tests/data/cli/compare/virt-xml-edit-all.xml
+++ b/tests/data/cli/compare/virt-xml-edit-all.xml
@@ -8,6 +8,13 @@
<address domain="0x0000" bus="0x00" slot="0x19" function="0x0"/>
</source>
<rom bar="off"/>
++ <driver name="vfio"/>
+ </hostdev>
+ <hostdev mode="subsystem" type="mdev" managed="no" model="vfio-ccw">
+ <source>
+ <address uuid="b1ae8bf6-38b0-4c81-9d44-78ce3f520496"/>
+ </source>
+ <address type="ccw" cssid="0xfe" ssid="0x0" devno="0x0002"/>
+ <driver name="vfio"/>
</hostdev>
<redirdev bus="usb" type="tcp">
diff --git a/tests/data/cli/compare/virt-xml-edit-hostdev-mdev.xml b/tests/data/cli/compare/virt-xml-edit-hostdev-mdev.xml
new file mode 100644
index 00000000..ef5523db
--- /dev/null
+++ b/tests/data/cli/compare/virt-xml-edit-hostdev-mdev.xml
@@ -0,0 +1,11 @@
+ <source>
+ <address uuid="b1ae8bf6-38b0-4c81-9d44-78ce3f520496"/>
+ </source>
+- <address type="ccw" cssid="0xfe" ssid="0x0" devno="0x0002"/>
++ <address type="ccw" cssid="0xfe" ssid="0x0" devno="0x0008"/>
+ </hostdev>
+ <redirdev bus="usb" type="tcp">
+ <source mode="connect" host="localhost" service="4000"/>
+
+Domain 'test-for-virtxml' defined successfully.
+Changes will take effect after the domain is fully powered off.
diff --git a/tests/data/cli/compare/virt-xml-edit-simple-redirdev.xml b/tests/data/cli/compare/virt-xml-edit-simple-redirdev.xml
index 52ffddfe..f1a0ff6c 100644
--- a/tests/data/cli/compare/virt-xml-edit-simple-redirdev.xml
+++ b/tests/data/cli/compare/virt-xml-edit-simple-redirdev.xml
@@ -1,5 +1,5 @@
</source>
- <rom bar="off"/>
+ <address type="ccw" cssid="0xfe" ssid="0x0" devno="0x0002"/>
</hostdev>
- <redirdev bus="usb" type="tcp">
- <source mode="connect" host="localhost" service="4000"/>
diff --git a/tests/data/cli/compare/virt-xml-remove-hostdev-mdev.xml b/tests/data/cli/compare/virt-xml-remove-hostdev-mdev.xml
new file mode 100644
index 00000000..d4c33804
--- /dev/null
+++ b/tests/data/cli/compare/virt-xml-remove-hostdev-mdev.xml
@@ -0,0 +1,15 @@
+ </source>
+ <rom bar="off"/>
+ </hostdev>
+- <hostdev mode="subsystem" type="mdev" managed="no" model="vfio-ccw">
+- <source>
+- <address uuid="b1ae8bf6-38b0-4c81-9d44-78ce3f520496"/>
+- </source>
+- <address type="ccw" cssid="0xfe" ssid="0x0" devno="0x0002"/>
+- </hostdev>
+ <redirdev bus="usb" type="tcp">
+ <source mode="connect" host="localhost" service="4000"/>
+ <protocol type="raw"/>
+
+Domain 'test-for-virtxml' defined successfully.
+Changes will take effect after the domain is fully powered off.
diff --git a/tests/data/testdriver/testsuite.xml b/tests/data/testdriver/testsuite.xml
index fd255138..a073cbce 100644
--- a/tests/data/testdriver/testsuite.xml
+++ b/tests/data/testdriver/testsuite.xml
@@ -259,6 +259,12 @@
</source>
<rom bar='off'/>
</hostdev>
+ <hostdev mode="subsystem" type="mdev" managed="no" model="vfio-ccw">
+ <source>
+ <address uuid="b1ae8bf6-38b0-4c81-9d44-78ce3f520496"/>
+ </source>
+ <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0002'/>
+ </hostdev>
<serial type='null'/>
@@ -737,5 +743,31 @@
</capability>
</device>
+<device>
+ <name>mdev_8e37ee90_2b51_45e3_9b25_bf8283c03110</name>
+ <path>/sys/devices/css0/0.0.0023/8e37ee90-2b51-45e3-9b25-bf8283c03110</path>
+ <parent>css_0_0_0023</parent>
+ <driver>
+ <name>vfio_mdev</name>
+ </driver>
+ <capability type='mdev'>
+ <type id='vfio_ccw-io'/>
+ <iommuGroup number='0'/>
+ </capability>
+</device>
+
+<device>
+ <name>mdev_b1ae8bf6_38b0_4c81_9d44_78ce3f520496</name>
+ <path>/sys/devices/css0/0.0.0023/b1ae8bf6-38b0-4c81-9d44-78ce3f520496</path>
+ <parent>css_0_0_0023</parent>
+ <driver>
+ <name>vfio_mdev</name>
+ </driver>
+ <capability type='mdev'>
+ <type id='vfio_ccw-io'/>
+ <iommuGroup number='0'/>
+ </capability>
+</device>
+
</node>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 5f94e009..9f0cdfe9 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -1274,6 +1274,7 @@ c.add_compare("--edit mac=00:11:7f:33:44:55 --network target=nic55", "edit-selec
c.add_compare("--edit target=hda --disk boot_order=1", "edit-select-disk-bootorder")
c.add_compare("--edit path=/dev/null --disk path=,target=fdb,boot_order=12", "edit-disk-unset") # --disk matching, using empty value to unset path
c.add_compare("--edit --memballoon none", "edit-disable-memballoon")
+c.add_compare("--edit address.devno=0x0002 --hostdev address.devno=0x0008", "edit-hostdev-mdev")
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")
@@ -1308,6 +1309,8 @@ c.add_compare("--remove-device --disk /dev/null", "remove-disk-path")
c.add_compare("--remove-device --video all", "remove-video-all")
c.add_compare("--remove-device --host-device 0x04b3:0x4485", "remove-hostdev-name")
c.add_compare("--remove-device --memballoon all", "remove-memballoon")
+c.add_compare("--add-device --hostdev mdev_8e37ee90_2b51_45e3_9b25_bf8283c03110", "add-hostdev-mdev")
+c.add_compare("--remove-device --hostdev mdev_b1ae8bf6_38b0_4c81_9d44_78ce3f520496", "remove-hostdev-mdev")
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
@@ -1318,6 +1321,7 @@ c.add_compare("--define --add-device --host-device usb_device_4b3_4485_noserial"
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.add_compare("--add-device --hostdev mdev_8e37ee90_2b51_45e3_9b25_bf8283c03110", "add-hostdev-mdev-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
diff --git a/tests/utils.py b/tests/utils.py
index 16ba26b4..62443ca8 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -231,7 +231,7 @@ def diff_compare(actual_out, filename=None, expect_out=None):
open(filename, "w").write(actual_out)
expect_out = open(filename).read()
- diff = xmlutil.diff(expect_out, actual_out,
+ diff = xmlutil.diff(expect_out.rstrip(), actual_out.rstrip(),
filename or '', "Generated output")
if diff:
raise AssertionError("Conversion outputs did not match.\n%s" % diff)
--
2.31.1

View File

@ -0,0 +1,256 @@
From 5245be196682b78c225e67f211c02e3802ca4bd6 Mon Sep 17 00:00:00 2001
From: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
Date: Wed, 14 Apr 2021 17:18:55 +0200
Subject: [PATCH] virt-install: add mediated device
Add support to install a virtual server with passed-through mediated
device. Mediated device can be created using vGPU attached to
vfio_pci driver or DASD attached to vfio_ccw driver or APQNs attached
to vfio_ap driver.
Reviewed-by: Cole Robinson <crobinso@redhat.com>
Signed-off-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
(cherry picked from commit 965480e8bc85caf8a4f36b4a2f07963067b63cf6)
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1995125
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
---
.../cli/compare/virt-install-many-devices.xml | 19 +++++++++
tests/data/testdriver/testdriver.xml | 40 +++++++++++++++++++
tests/test_cli.py | 3 ++
tests/test_nodedev.py | 30 ++++++++++++++
virtinst/devices/hostdev.py | 36 ++++++++++++++++-
virtinst/nodedev.py | 4 ++
6 files changed, 131 insertions(+), 1 deletion(-)
diff --git a/tests/data/cli/compare/virt-install-many-devices.xml b/tests/data/cli/compare/virt-install-many-devices.xml
index 49e9dcc7..3bd756b3 100644
--- a/tests/data/cli/compare/virt-install-many-devices.xml
+++ b/tests/data/cli/compare/virt-install-many-devices.xml
@@ -592,6 +592,25 @@
<char>/dev/pty7</char>
</source>
</hostdev>
+ <hostdev mode="subsystem" type="mdev" managed="no" model="vfio-ccw">
+ <address type="ccw" cssid="0xfe" ssid="0x1" devno="0x0008"/>
+ <source>
+ <address uuid="8e37ee90-2b51-45e3-9b25-bf8283c03110"/>
+ </source>
+ </hostdev>
+ <hostdev mode="subsystem" type="mdev" managed="no" model="vfio-ap">
+ <source>
+ <address uuid="11f92c9d-b0b0-4016-b306-a8071277f8b9"/>
+ </source>
+ </hostdev>
+ <hostdev mode="subsystem" type="mdev" managed="yes" model="vfio-pci" display="off" ramfb="off">
+ <address type="pci" domain="0" bus="1" slot="1" function="0">
+ <zpci uid="0x0001" fid="0x00000001"/>
+ </address>
+ <source>
+ <address uuid="4b20d080-1b54-4048-85b3-a6a62d165c01"/>
+ </source>
+ </hostdev>
<redirdev bus="usb" type="spicevmc"/>
<redirdev bus="usb" type="tcp">
<source host="localhost" service="4000"/>
diff --git a/tests/data/testdriver/testdriver.xml b/tests/data/testdriver/testdriver.xml
index ea90f0f7..b8d67bac 100644
--- a/tests/data/testdriver/testdriver.xml
+++ b/tests/data/testdriver/testdriver.xml
@@ -3645,5 +3645,45 @@ ba</description>
</capability>
</device>
+<device>
+ <name>mdev_8e37ee90_2b51_45e3_9b25_bf8283c03110</name>
+ <path>/sys/devices/css0/0.0.0023/8e37ee90-2b51-45e3-9b25-bf8283c03110</path>
+ <parent>css_0_0_0023</parent>
+ <driver>
+ <name>vfio_mdev</name>
+ </driver>
+ <capability type='mdev'>
+ <type id='vfio_ccw-io'/>
+ <iommuGroup number='0'/>
+ </capability>
+</device>
+
+<device>
+ <name>mdev_11f92c9d_b0b0_4016_b306_a8071277f8b9</name>
+ <path>/sys/devices/vfio_ap/matrix/11f92c9d-b0b0-4016-b306-a8071277f8b9</path>
+ <parent>ap_matrix</parent>
+ <driver>
+ <name>vfio_mdev</name>
+ </driver>
+ <capability type='mdev'>
+ <type id='vfio_ap-passthrough'/>
+ <iommuGroup number='2'/>
+ <attr name='assign_adapter' value='1'/>
+ <attr name='assign_domain' value='2'/>
+ </capability>
+</device>
+
+<device>
+ <name>mdev_4b20d080_1b54_4048_85b3_a6a62d165c01</name>
+ <path>/sys/devices/pci0000:00/0000:00:02.0/4b20d080-1b54-4048-85b3-a6a62d165c01</path>
+ <parent>pci_0000_06_00_0</parent>
+ <driver>
+ <name>vfio_mdev</name>
+ </driver>
+ <capability type='mdev'>
+ <type id='nvidia-11'/>
+ <iommuGroup number='12'/>
+ </capability>
+</device>
</node>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 5b174933..5f94e009 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -675,6 +675,9 @@ source.reservations.managed=no,source.reservations.source.type=unix,source.reser
--hostdev wlan0,type=net
--hostdev /dev/vdz,type=storage
--hostdev /dev/pty7,type=misc
+--hostdev mdev_8e37ee90_2b51_45e3_9b25_bf8283c03110,address.type=ccw,address.cssid=0xfe,address.ssid=0x1,address.devno=0x0008
+--hostdev mdev_11f92c9d_b0b0_4016_b306_a8071277f8b9
+--hostdev mdev_4b20d080_1b54_4048_85b3_a6a62d165c01,address.type=pci,address.domain=0x0000,address.bus=0x01,address.slot=0x01,address.function=0x0,address.zpci.uid=0x0001,address.zpci.fid=0x00000001
--filesystem /source,/target,alias.name=testfsalias,driver.ats=on,driver.iommu=off,driver.packed=on
diff --git a/tests/test_nodedev.py b/tests/test_nodedev.py
index 406e321f..79678bc8 100644
--- a/tests/test_nodedev.py
+++ b/tests/test_nodedev.py
@@ -126,6 +126,36 @@ def testDRMDevice():
assert dev.get_devnode("frob")
+def testDASDMdev():
+ conn = utils.URIs.open_testdriver_cached()
+ devname = "mdev_8e37ee90_2b51_45e3_9b25_bf8283c03110"
+ dev = _nodeDevFromName(conn, devname)
+ assert dev.name == devname
+ assert dev.parent == "css_0_0_0023"
+ assert dev.device_type == "mdev"
+ assert dev.type_id == "vfio_ccw-io"
+
+
+def testAPQNMdev():
+ conn = utils.URIs.open_testdriver_cached()
+ devname = "mdev_11f92c9d_b0b0_4016_b306_a8071277f8b9"
+ dev = _nodeDevFromName(conn, devname)
+ assert dev.name == devname
+ assert dev.parent == "ap_matrix"
+ assert dev.device_type == "mdev"
+ assert dev.type_id == "vfio_ap-passthrough"
+
+
+def testPCIMdev():
+ conn = utils.URIs.open_testdriver_cached()
+ devname = "mdev_4b20d080_1b54_4048_85b3_a6a62d165c01"
+ dev = _nodeDevFromName(conn, devname)
+ assert dev.name == devname
+ assert dev.parent == "pci_0000_06_00_0"
+ assert dev.device_type == "mdev"
+ assert dev.type_id == "nvidia-11"
+
+
# NodeDevice 2 Device XML tests
def testNodeDev2USB1():
diff --git a/virtinst/devices/hostdev.py b/virtinst/devices/hostdev.py
index 3e9de2ad..e8d0fae2 100644
--- a/virtinst/devices/hostdev.py
+++ b/virtinst/devices/hostdev.py
@@ -4,6 +4,8 @@
# This work is licensed under the GNU GPLv2 or later.
# See the COPYING file in the top-level directory.
+import re
+
from .device import Device
from ..nodedev import NodeDevice
from ..xmlbuilder import XMLProperty
@@ -53,16 +55,45 @@ class DeviceHostdev(Device):
self.scsi_unit = nodedev.lun
self.managed = False
+ elif nodedev.device_type == nodedev.CAPABILITY_TYPE_MDEV:
+ self.type = "mdev"
+
+ if nodedev.type_id == "vfio_ccw-io":
+ self.model = "vfio-ccw"
+ self.managed = "no"
+
+ elif nodedev.type_id == "vfio_ap-passthrough":
+ self.model = "vfio-ap"
+ self.managed = "no"
+
+ elif (re.match("^nvidia-[0-9]{2}", nodedev.type_id) or
+ re.match("^i915-GVTg_V[0-9]_[0-9]", nodedev.type_id)):
+ self.model = "vfio-pci"
+ self.managed = "yes"
+ self.display = "off"
+ self.ramfb = "off"
+
+ else:
+ raise ValueError( # pragma: no cover
+ _("Don't know how to generate nodedev for mdev type id '%s'") %
+ nodedev.type_id)
+
+ self.uuid = nodedev.name[5:].replace('_', '-')
+
else:
raise ValueError(_("Unknown node device type %s") % nodedev)
_XML_PROP_ORDER = ["mode", "type", "managed", "vendor", "product",
- "domain", "bus", "slot", "function"]
+ "domain", "bus", "slot", "function", "model",
+ "display", "ramfb"]
mode = XMLProperty("./@mode")
type = XMLProperty("./@type")
managed = XMLProperty("./@managed", is_yesno=True)
+ model = XMLProperty("./@model")
+ display = XMLProperty("./@display")
+ ramfb = XMLProperty("./@ramfb")
vendor = XMLProperty("./source/vendor/@id")
product = XMLProperty("./source/product/@id")
@@ -92,6 +123,9 @@ class DeviceHostdev(Device):
# type=misc handling
storage_block = XMLProperty("./source/block")
+ # type=mdev
+ uuid = XMLProperty("./source/address/@uuid")
+
##################
# Default config #
diff --git a/virtinst/nodedev.py b/virtinst/nodedev.py
index 9d2c8f10..97841794 100644
--- a/virtinst/nodedev.py
+++ b/virtinst/nodedev.py
@@ -40,6 +40,7 @@ class NodeDevice(XMLBuilder):
CAPABILITY_TYPE_SCSIBUS = "scsi_host"
CAPABILITY_TYPE_SCSIDEV = "scsi"
CAPABILITY_TYPE_DRM = "drm"
+ CAPABILITY_TYPE_MDEV = "mdev"
@staticmethod
def lookupNodedevFromString(conn, idstring):
@@ -168,6 +169,9 @@ class NodeDevice(XMLBuilder):
if len(self.devnodes) > 0:
return self.devnodes[0]
+ # type='mdev' options
+ type_id = XMLProperty("./capability/type/@id")
+
def _AddressStringToHostdev(conn, addrstr):
from .devices import DeviceHostdev
--
2.31.1

View File

@ -1,146 +0,0 @@
From 6ec78c1b8a935bd5fe0896dc323bfdf51cc67585 Mon Sep 17 00:00:00 2001
From: Jonathon Jongsma <jjongsma@redhat.com>
Date: Wed, 18 May 2022 17:03:29 -0500
Subject: [PATCH] virt-install: add support for qemu-vdagent channel
This allows support for host/guest clipboard sharing when using vnc
guests (and possibly other graphics types in the future). This channel
is similar to the spicevmc channel, but it contains a couple additional
options to enable/disable clipboard sharing and specify the mouse mode.
In the case of spice, these settings are specified on the 'graphics'
element, but for qemu-vdagent, they are specified on the channel. For
example:
--channel=qemu-vdagent,source.clipboard.copypaste=on,source.mouse.mode=client
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
(cherry picked from commit 44355e5ed0d0791675e8113732dde37664d5aa91)
Resolves https://bugzilla.redhat.com/show_bug.cgi?id=2060724
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
---
man/virt-install.rst | 9 +++++++++
tests/data/cli/compare/virt-install-many-devices.xml | 7 +++++++
tests/test_cli.py | 5 +++--
virtinst/cli.py | 2 ++
virtinst/devices/char.py | 8 +++++++-
5 files changed, 28 insertions(+), 3 deletions(-)
diff --git a/man/virt-install.rst b/man/virt-install.rst
index c1d1c1aa1..3a6e8dcd2 100644
--- a/man/virt-install.rst
+++ b/man/virt-install.rst
@@ -1761,6 +1761,15 @@ Some of the types of character device redirection are:
and can be any string, such as the default com.redhat.spice.0 that
specifies how the guest will see the channel.
+``--channel qemu-vdagent,target.type=virtio[,target.name=NAME]``
+ Communication channel for QEMU vd agent, using virtio serial (requires
+ 2.6.34 or later host and guest). This allows copy/paste functionality with
+ VNC guests. Note that the guest clipboard integration is implemented via
+ spice-vdagent, which must be running even when the guest does not use spice
+ graphics. NAME is optional metadata that specifies how the guest will see
+ the channel, and should be left as the default com.redhat.spice.0 unless you
+ know what you are doing.
+
Use --channel=? to see a list of all available sub options.
Complete details at https://libvirt.org/formatdomain.html#elementsCharChannel
diff --git a/tests/data/cli/compare/virt-install-many-devices.xml b/tests/data/cli/compare/virt-install-many-devices.xml
index 4c0024225..be82032fe 100644
--- a/tests/data/cli/compare/virt-install-many-devices.xml
+++ b/tests/data/cli/compare/virt-install-many-devices.xml
@@ -647,6 +647,13 @@
<channel type="spicevmc">
<target type="virtio" name="com.redhat.spice.0"/>
</channel>
+ <channel type="qemu-vdagent">
+ <source>
+ <clipboard copypaste="yes"/>
+ <mouse mode="client"/>
+ </source>
+ <target type="virtio" name="com.redhat.spice.0"/>
+ </channel>
<input type="keyboard" bus="usb"/>
<input type="tablet" bus="usb"/>
<input type="mouse" bus="ps2"/>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 8b78a1a78..22749d43a 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -669,6 +669,7 @@ source.reservations.managed=no,source.reservations.source.type=unix,source.reser
--channel pty,target_type=virtio,name=org.linux-kvm.port1
--channel pty,target.type=virtio,target.name=org.linux-kvm.port2
--channel spicevmc
+--channel qemu-vdagent,source.clipboard.copypaste=on,source.mouse.mode=client
--console pty,target_type=virtio
@@ -734,7 +735,7 @@ source.reservations.managed=no,source.reservations.source.type=unix,source.reser
--rng /dev/random
---rng device=/dev/urandom,backend.protocol.type=,backend.log.file=,backend.log.append=
+--rng device=/dev/urandom,backend.protocol.type=,backend.log.file=,backend.log.append=,backend.source.clipboard.copypaste=,backend.source.mouse.mode=
--rng type=egd,backend.type=nmdm,backend.source.master=/dev/foo1,backend.source.slave=/dev/foo2
--rng egd,backend_host=127.0.0.1,backend_service=8000,backend_type=udp,backend_mode=bind,backend_connect_host=foo,backend_connect_service=708,rate.bytes=1234,rate.period=1000,model=virtio
@@ -786,7 +787,7 @@ source.reservations.managed=no,source.reservations.source.type=unix,source.reser
--xml xpath.delete=./deleteme/deleteme2
-""", "many-devices", predefine_check="7.4.0")
+""", "many-devices", predefine_check="8.4.0")
# Specific XML test cases #1
diff --git a/virtinst/cli.py b/virtinst/cli.py
index 52be9f298..c869c323a 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -3396,6 +3396,8 @@ def _add_char_source_args(cls, prefix=""):
_add_arg("protocol.type", "source.protocol")
_add_arg("log.file", "source.log_file")
_add_arg("log.append", "source.log_append", is_onoff=True)
+ _add_arg("source.clipboard.copypaste", "source.clipboard_copypaste", is_onoff=True)
+ _add_arg("source.mouse.mode", "source.mouse_mode")
##################
diff --git a/virtinst/devices/char.py b/virtinst/devices/char.py
index 9547c649e..01fc634b1 100644
--- a/virtinst/devices/char.py
+++ b/virtinst/devices/char.py
@@ -45,6 +45,10 @@ class CharSource(XMLBuilder):
slave = XMLProperty("./@slave")
mode = XMLProperty("./@mode")
+ # for qemu-vdagent channel
+ clipboard_copypaste = XMLProperty("./clipboard/@copypaste", is_yesno=True)
+ mouse_mode = XMLProperty("./mouse/@mode")
+
# It's weird to track these properties here, since the XML is set on
# the parent, but this is how libvirt does it internally, which means
# everything that shares a charsource has these values too.
@@ -80,6 +84,7 @@ class _DeviceChar(Device):
TYPE_SPICEVMC = "spicevmc"
TYPE_SPICEPORT = "spiceport"
TYPE_NMDM = "nmdm"
+ TYPE_QEMUVDAGENT = "qemu-vdagent"
CHANNEL_NAME_SPICE = "com.redhat.spice.0"
CHANNEL_NAME_QEMUGA = "org.qemu.guest_agent.0"
@@ -117,7 +122,8 @@ class _DeviceChar(Device):
self.source.mode = "bind"
if not self.target_type and self.DEVICE_TYPE == "channel":
self.target_type = "virtio"
- if not self.target_name and self.type == self.TYPE_SPICEVMC:
+ if not self.target_name and (self.type == self.TYPE_SPICEVMC or
+ self.type == self.TYPE_QEMUVDAGENT):
self.target_name = self.CHANNEL_NAME_SPICE
--
2.35.3

View File

@ -1,231 +0,0 @@
From e4e7210b3bd669bfeb8015f66163e7e49d710d1d Mon Sep 17 00:00:00 2001
From: Jonathon Jongsma <jjongsma@redhat.com>
Date: Wed, 18 May 2022 17:03:30 -0500
Subject: [PATCH] virt-manager: add support for qemu-vdagent channel
This provides the UI support for the qemu-vdagent channel which allows
clipboard sharing with VNC graphics (see previous commit for more
information).
The channel name in the device list was changed slightly in order to
avoid confusion. Due to the fact that both the spice-vdagent and the
qemu-vdagent specify the same virtio name (com.redhat.spice.0), both of
these channels were showing up in the device list as "Channel spice",
which is a bit confusing.
In order to disambiguate these, channels now show up in the device list
as "Channel {type} ({name})" instead of "Channel {name}". So for
example, a qemu-vdagent channel would show up as:
Channel Qemu vdagent (spice)
Whereas a spice-vdagent channel would show up as:
Channel Spice agent (spice)
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
(cherry picked from commit caa99a6001be0c86a1dd0eb5fc0ce142ab929a31)
Resolves https://bugzilla.redhat.com/show_bug.cgi?id=2060724
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
---
ui/addhardware.ui | 28 +++++++++++++++++++++++++++-
ui/details.ui | 27 ++++++++++++++++++++++++++-
virtManager/addhardware.py | 10 +++++++++-
virtManager/details/details.py | 7 +++++--
4 files changed, 67 insertions(+), 5 deletions(-)
diff --git a/ui/addhardware.ui b/ui/addhardware.ui
index fa88127b8..f212481a3 100644
--- a/ui/addhardware.ui
+++ b/ui/addhardware.ui
@@ -725,7 +725,7 @@
</packing>
</child>
<child>
- <!-- n-columns=2 n-rows=6 -->
+ <!-- n-columns=2 n-rows=7 -->
<object class="GtkGrid" id="char-table">
<property name="visible">True</property>
<property name="can-focus">False</property>
@@ -901,6 +901,32 @@
<property name="top-attach">2</property>
</packing>
</child>
+ <child>
+ <object class="GtkLabel" id="char-vdagent-clipboard-label">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes">_Share Clipboard:</property>
+ <property name="use-underline">True</property>
+ <property name="mnemonic-widget">char-vdagent-clipboard</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">6</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkCheckButton" id="char-vdagent-clipboard">
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="halign">start</property>
+ <property name="draw-indicator">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">6</property>
+ </packing>
+ </child>
<child internal-child="accessible">
<object class="AtkObject" id="char-table-atkobject">
<property name="AtkObject::accessible-name">char-tab</property>
diff --git a/ui/details.ui b/ui/details.ui
index 10b308242..264f7cdd4 100644
--- a/ui/details.ui
+++ b/ui/details.ui
@@ -3506,7 +3506,7 @@
<property name="margin-start">12</property>
<property name="margin-top">3</property>
<child>
- <!-- n-columns=2 n-rows=7 -->
+ <!-- n-columns=2 n-rows=8 -->
<object class="GtkGrid" id="table37">
<property name="visible">True</property>
<property name="can-focus">False</property>
@@ -3601,6 +3601,19 @@
<property name="top-attach">6</property>
</packing>
</child>
+ <child>
+ <object class="GtkLabel" id="char-clipboard-sharing">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="halign">start</property>
+ <property name="label" translatable="yes">label507</property>
+ <property name="selectable">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">7</property>
+ </packing>
+ </child>
<child>
<object class="GtkLabel" id="char-source-host">
<property name="visible">True</property>
@@ -3673,6 +3686,18 @@
<property name="top-attach">6</property>
</packing>
</child>
+ <child>
+ <object class="GtkLabel" id="char-clipboard-sharing-label">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Clipboard:</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">7</property>
+ </packing>
+ </child>
<child>
<object class="GtkLabel" id="char-source-path-label">
<property name="visible">True</property>
diff --git a/virtManager/addhardware.py b/virtManager/addhardware.py
index 8c7fa0c72..0a8e33d30 100644
--- a/virtManager/addhardware.py
+++ b/virtManager/addhardware.py
@@ -308,6 +308,7 @@ class vmmAddHardware(vmmGObjectUI):
self.widget("char-path").set_text("")
self.widget("char-channel").set_text("")
self.widget("char-auto-socket").set_active(True)
+ self.widget("char-vdagent-clipboard").set_active(True)
# RNG params
@@ -399,7 +400,8 @@ class vmmAddHardware(vmmGObjectUI):
DeviceSerial.TYPE_UNIX]
if char_class.XML_NAME == "channel":
ret = [DeviceSerial.TYPE_SPICEVMC,
- DeviceSerial.TYPE_SPICEPORT] + ret
+ DeviceSerial.TYPE_SPICEPORT,
+ DeviceSerial.TYPE_QEMUVDAGENT] + ret
return ret
@staticmethod
@@ -425,6 +427,7 @@ class vmmAddHardware(vmmGObjectUI):
DeviceSerial.TYPE_UNIX: _("UNIX socket"),
DeviceSerial.TYPE_SPICEVMC: _("Spice agent"),
DeviceSerial.TYPE_SPICEPORT: _("Spice port"),
+ DeviceSerial.TYPE_QEMUVDAGENT: _("QEMU vdagent"),
}
return labels.get(val, val)
@@ -1114,11 +1117,14 @@ class vmmAddHardware(vmmGObjectUI):
supports_path = [dev.TYPE_FILE, dev.TYPE_UNIX,
dev.TYPE_DEV, dev.TYPE_PIPE]
supports_channel = [dev.TYPE_SPICEPORT]
+ supports_clipboard = [dev.TYPE_QEMUVDAGENT]
uiutil.set_grid_row_visible(self.widget("char-path-label"),
devtype in supports_path)
uiutil.set_grid_row_visible(self.widget("char-channel-label"),
devtype in supports_channel)
+ uiutil.set_grid_row_visible(self.widget("char-vdagent-clipboard-label"),
+ devtype in supports_clipboard)
uiutil.set_grid_row_visible(
self.widget("char-target-name-label"), ischan)
@@ -1472,6 +1478,7 @@ class vmmAddHardware(vmmGObjectUI):
source_channel = self.widget("char-channel").get_text()
target_name = self.widget("char-target-name").get_child().get_text()
target_type = uiutil.get_list_selection(typebox)
+ clipboard = self.widget("char-vdagent-clipboard").get_active()
if not self.widget("char-path").get_visible():
source_path = None
@@ -1486,6 +1493,7 @@ class vmmAddHardware(vmmGObjectUI):
dev.type = devtype
dev.source.path = source_path
dev.source.channel = source_channel
+ dev.source.clipboard_copypaste = clipboard
dev.target_name = target_name
dev.target_type = target_type
return dev
diff --git a/virtManager/details/details.py b/virtManager/details/details.py
index 24810f0ff..ddc43b767 100644
--- a/virtManager/details/details.py
+++ b/virtManager/details/details.py
@@ -207,10 +207,10 @@ def _label_for_device(dev, disk_bus_index):
return _("Console %(num)d") % {"num": port + 1}
if devtype == "channel":
+ pretty_type = vmmAddHardware.char_pretty_type(dev.type)
name = vmmAddHardware.char_pretty_channel_name(dev.target_name)
if name:
- return _("Channel %(name)s") % {"name": name}
- pretty_type = vmmAddHardware.char_pretty_type(dev.type)
+ return _("Channel %(type)s (%(name)s)") % {"type": pretty_type, "name": name}
return _("Channel %(type)s") % {"type": pretty_type}
if devtype == "graphics":
@@ -2098,6 +2098,7 @@ class vmmDetails(vmmGObjectUI):
primary = self.vm.serial_is_console_dup(chardev)
show_target_type = not (char_type in ["serial", "parallel"])
is_qemuga = chardev.target_name == chardev.CHANNEL_NAME_QEMUGA
+ show_clipboard = chardev.type == chardev.TYPE_QEMUVDAGENT
if char_type == "serial":
typelabel = _("Serial Device")
@@ -2152,6 +2153,8 @@ class vmmDetails(vmmGObjectUI):
# notifiations about connection state. For spice this UI field
# can get out of date
show_ui("char-target-state", chardev.target_state, doshow=is_qemuga)
+ clipboard = _("On") if chardev.source.clipboard_copypaste else _("Off")
+ show_ui("char-clipboard-sharing", clipboard, doshow=show_clipboard)
def _refresh_hostdev_page(self, hostdev):
rom_bar = hostdev.rom_bar
--
2.35.3

View File

@ -0,0 +1,164 @@
From bacab3883858b137f82ab2b3dea308289f65138c Mon Sep 17 00:00:00 2001
From: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
Date: Mon, 7 Jun 2021 11:34:21 +0200
Subject: [PATCH] virt-manager: enable MDEV support
Enable virt-manager GUI to support add, edit, remove, hot-plug and
hot-unplug of mediated devices (like DASDs, APQNs and PCIs) in virtual
server.
It is not possible to edit MDEV when a virtual server is in
running state, as this is not supported by libvirt.
Reviewed-by: Cole Robinson <crobinso@redhat.com>
Signed-off-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
(cherry picked from commit 0e15cd51dfbdaa09f7d34ed1edce2f5416130361)
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1995125
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
---
tests/data/testdriver/testdriver.xml | 39 ++++++++++++++++++++++++++++
tests/uitests/test_addhardware.py | 6 +++++
virtManager/addhardware.py | 19 +++++++++++++-
3 files changed, 63 insertions(+), 1 deletion(-)
diff --git a/tests/data/testdriver/testdriver.xml b/tests/data/testdriver/testdriver.xml
index b8d67bac..5875732a 100644
--- a/tests/data/testdriver/testdriver.xml
+++ b/tests/data/testdriver/testdriver.xml
@@ -3645,6 +3645,27 @@ ba</description>
</capability>
</device>
+<device>
+ <name>css_0_0_0023</name>
+ <path>/sys/devices/css0/0.0.0023</path>
+ <parent>computer</parent>
+ <driver>
+ <name>vfio_ccw</name>
+ </driver>
+ <capability type='css'>
+ <cssid>0x0</cssid>
+ <ssid>0x0</ssid>
+ <devno>0x0023</devno>
+ <capability type='mdev_types'>
+ <type id='vfio_ccw-io'>
+ <name>I/O subchannel (Non-QDIO)</name>
+ <deviceAPI>vfio-ccw</deviceAPI>
+ <availableInstances>0</availableInstances>
+ </type>
+ </capability>
+ </capability>
+</device>
+
<device>
<name>mdev_8e37ee90_2b51_45e3_9b25_bf8283c03110</name>
<path>/sys/devices/css0/0.0.0023/8e37ee90-2b51-45e3-9b25-bf8283c03110</path>
@@ -3658,6 +3679,24 @@ ba</description>
</capability>
</device>
+<device>
+ <name>ap_matrix</name>
+ <path>/sys/devices/vfio_ap/matrix</path>
+ <parent>computer</parent>
+ <driver>
+ <name>vfio_ap</name>
+ </driver>
+ <capability type='ap_matrix'>
+ <capability type='mdev_types'>
+ <type id='vfio_ap-passthrough'>
+ <name>VFIO AP Passthrough Device</name>
+ <deviceAPI>vfio-ap</deviceAPI>
+ <availableInstances>65536</availableInstances>
+ </type>
+ </capability>
+ </capability>
+</device>
+
<device>
<name>mdev_11f92c9d_b0b0_4016_b306_a8071277f8b9</name>
<path>/sys/devices/vfio_ap/matrix/11f92c9d-b0b0-4016-b306-a8071277f8b9</path>
diff --git a/tests/uitests/test_addhardware.py b/tests/uitests/test_addhardware.py
index ce3da57c..56acc2fa 100644
--- a/tests/uitests/test_addhardware.py
+++ b/tests/uitests/test_addhardware.py
@@ -459,6 +459,12 @@ def testAddHosts(app):
app.click_alert_button("device is already in use by", "Yes")
lib.utils.check(lambda: details.active)
+ # Add MDEV device
+ _open_addhw(app, details)
+ tab = _select_hw(addhw, "MDEV Host Device", "host-tab")
+ tab.find_fuzzy("mdev_8e37ee90_2b51_45e3_9b25_bf8283c03110",
+ "table cell").click()
+ _finish(addhw, check=details)
def testAddChars(app):
diff --git a/virtManager/addhardware.py b/virtManager/addhardware.py
index cbf19f58..13b899c3 100644
--- a/virtManager/addhardware.py
+++ b/virtManager/addhardware.py
@@ -249,6 +249,10 @@ class vmmAddHardware(vmmGObjectUI):
add_hw_option(_("PCI Host Device"), "system-run", PAGE_HOSTDEV,
nodedev_enabled, nodedev_errstr, "pci")
+ add_hw_option(_("MDEV Host Device"), "system-run", PAGE_HOSTDEV,
+ self.conn.support.conn_nodedev(),
+ _("Connection does not support host device enumeration"),
+ "mdev")
add_hw_option(_("Video"), "video-display", PAGE_VIDEO, True,
_("Libvirt version does not support video devices."))
add_hw_option(_("Watchdog"), "device_pci", PAGE_WATCHDOG,
@@ -656,6 +660,9 @@ class vmmAddHardware(vmmGObjectUI):
(dehex(hostdev.domain), dehex(hostdev.bus),
dehex(hostdev.slot), dehex(hostdev.function)))
+ elif hostdev.uuid:
+ label += " %s" % (str(hostdev.uuid))
+
return label
@@ -775,6 +782,12 @@ class vmmAddHardware(vmmGObjectUI):
if dev.xmlobj.name == subdev.xmlobj.parent:
prettyname += " (%s)" % subdev.pretty_name()
+ if devtype == "mdev":
+ for parentdev in self.conn.list_nodedevs():
+ if dev.xmlobj.parent == parentdev.xmlobj.name:
+ prettyname = "%s %s" % (
+ parentdev.pretty_name(), prettyname)
+
model.append([dev.xmlobj, prettyname])
if len(model) == 0:
@@ -981,11 +994,13 @@ class vmmAddHardware(vmmGObjectUI):
if page == PAGE_HOSTDEV:
# Need to do this here, since we share the hostdev page
- # between two different HW options
+ # between different HW options
row = self._get_hw_selection()
devtype = "usb_device"
if row and row[5] == "pci":
devtype = "pci"
+ if row and row[5] == "mdev":
+ devtype = "mdev"
self._populate_hostdev_model(devtype)
if page == PAGE_CONTROLLER:
@@ -1036,6 +1051,8 @@ class vmmAddHardware(vmmGObjectUI):
row = self._get_hw_selection()
if row and row[5] == "pci":
return _("PCI Device")
+ if row and row[5] == "mdev":
+ return _("MDEV Device")
return _("USB Device")
raise RuntimeError("Unknown page %s" % page) # pragma: no cover
--
2.31.1

View File

@ -0,0 +1,77 @@
From 1822e898d556eb5bb80e5c01386b5ad65db01592 Mon Sep 17 00:00:00 2001
From: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
Date: Mon, 31 May 2021 21:54:26 +0200
Subject: [PATCH] virt-xml: add support for mediated devices
Provide support to add/remove MDEV in a guest domain, which is in
shut-off or running state (hotplug/unplug). Also support update of
already existing MDEV device, when the guest domain is in shut-off
state. Please note that libvirt does not support update of MDEV
device, when the guest domain is in running state.
Reviewed-by: Cole Robinson <crobinso@redhat.com>
Signed-off-by: Shalini Chellathurai Saroja <shalini@linux.ibm.com>
(cherry picked from commit 9363e1e692bb0d01184ecc7991d61c95542f690b)
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1995125
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
---
virtinst/nodedev.py | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/virtinst/nodedev.py b/virtinst/nodedev.py
index 97841794..f54a311c 100644
--- a/virtinst/nodedev.py
+++ b/virtinst/nodedev.py
@@ -5,6 +5,7 @@
# See the COPYING file in the top-level directory.
import os
+import uuid
from .logger import log
from .xmlbuilder import XMLBuilder, XMLProperty, XMLChildProperty
@@ -25,6 +26,16 @@ def _compare_int(nodedev_val, hostdev_val):
return (nodedev_val == hostdev_val or hostdev_val == -1)
+def _compare_uuid(nodedev_val, hostdev_val):
+ try:
+ nodedev_val = uuid.UUID(nodedev_val)
+ hostdev_val = uuid.UUID(hostdev_val)
+ except Exception: # pragma: no cover
+ return -1
+
+ return (nodedev_val == hostdev_val)
+
+
class DevNode(XMLBuilder):
XML_NAME = "devnode"
@@ -82,6 +93,9 @@ class NodeDevice(XMLBuilder):
parent = XMLProperty("./parent")
device_type = XMLProperty("./capability/@type")
+ def get_mdev_uuid(self):
+ return self.name[5:].replace('_', '-')
+
def compare_to_hostdev(self, hostdev):
if self.device_type == "pci":
if hostdev.type != "pci":
@@ -101,6 +115,12 @@ class NodeDevice(XMLBuilder):
_compare_int(self.bus, hostdev.bus) and
_compare_int(self.device, hostdev.device))
+ if self.device_type == "mdev":
+ if hostdev.type != "mdev":
+ return False
+
+ return _compare_uuid(self.get_mdev_uuid(), hostdev.uuid)
+
return False
--
2.31.1

View File

@ -7,8 +7,8 @@
# End local config
Name: virt-manager
Version: 4.0.0
Release: 1%{?dist}%{?extra_release}.alma
Version: 3.2.0
Release: 4%{?dist}%{?extra_release}
%global verrel %{version}-%{release}
Summary: Desktop tool for managing virtual machines via libvirt
@ -18,21 +18,27 @@ URL: https://virt-manager.org/
Source0: https://virt-manager.org/download/sources/%{name}/%{name}-%{version}.tar.gz
Source1: symlinks
Patch1: virt-manager-virt-install-add-support-for-qemu-vdagent-channel.patch
Patch2: virt-manager-virt-manager-add-support-for-qemu-vdagent-channel.patch
# AlmaLinux support patch
Patch1000: 322.patch
Patch1: virt-manager-cli-introduce-resource-fibrechannel.appid-option.patch
Patch2: virt-manager-virt-install-add-mediated-device.patch
Patch3: virt-manager-virt-xml-add-support-for-mediated-devices.patch
Patch4: virt-manager-hostdev-use-method-get_mdev_uuid.patch
Patch5: virt-manager-tests-verify-MDEV-support.patch
Patch6: virt-manager-virt-manager-enable-MDEV-support.patch
Patch7: virt-manager-Handle-new-nodedev-name-for-mediated-devices.patch
Patch8: virt-manager-addstorage-Don-t-pass-None-to-widget.set_active.patch
Patch9: virt-manager-cli-add-ioapic.driver-to-features.patch
Patch10: virt-manager-console-fix-error-with-old-pygobject.patch
Requires: virt-manager-common = %{verrel}
Requires: python3-gobject >= 3.31.3
Requires: gtk3 >= 3.22.0
Requires: python3-gobject
Requires: gtk3
Requires: libvirt-glib >= 0.0.9
Requires: gtk-vnc2
Requires: spice-gtk3
# We can work with gtksourceview 3 or gtksourceview4, pick the latest one
Requires: gtksourceview4
# We can work with gtksourceview 3 or gtksourceview4, rhel has only the older one
Requires: gtksourceview3
# virt-manager is one of those apps that people will often install onto
# a headless machine for use over SSH. This means the virt-manager dep
@ -59,7 +65,6 @@ BuildRequires: git
BuildRequires: gettext
BuildRequires: python3-devel
BuildRequires: python3-docutils
BuildRequires: python3-setuptools
%description
@ -80,8 +85,8 @@ Requires: python3-requests
Requires: libosinfo >= 0.2.10
# Required for gobject-introspection infrastructure
Requires: python3-gobject-base
# Required for pulling files from iso media
Requires: xorriso
# Required for pulling files from iso media with isoinfo
Requires: genisoimage
%description common
Common files used by the different virt-manager interfaces, as well as
@ -132,8 +137,7 @@ git config gc.auto 0
%endif
./setup.py configure \
%{?_default_hvs} \
--default-graphics=vnc
%{?_default_hvs}
%install
@ -144,12 +148,19 @@ git config gc.auto 0
%if 0%{?py_byte_compile:1}
# https://docs.fedoraproject.org/en-US/packaging-guidelines/Python_Appendix/#manual-bytecompilation
%py_byte_compile %{__python3} %{buildroot}%{_datadir}/virt-manager/
%py_byte_compile %{python3} %{buildroot}%{_datadir}/virt-manager/
%endif
# Replace '#!/usr/bin/env python3' with '#!/usr/bin/python3'
# The format is ideal for upstream, but not a distro. See:
# https://fedoraproject.org/wiki/Features/SystemPythonExecutablesUseSystemPython
for f in $(find %{buildroot} -type f -executable -print); do
sed -i "1 s|^#!/usr/bin/env python3|#!%{__python3}|" $f || :
done
%files
%doc README.md COPYING NEWS.md
%{_bindir}/%{name}
%{_mandir}/man1/%{name}.1*
@ -166,10 +177,8 @@ git config gc.auto 0
%files common -f %{name}.lang
%license COPYING
%doc README.md NEWS.md
%dir %{_datadir}/%{name}
%{_datadir}/%{name}/virtinst
@ -188,170 +197,86 @@ git config gc.auto 0
%changelog
* Tue Nov 15 2022 Eduard Abdullin <eabdullin@almalinux.org> - 4.0.0-1.alma
- Add AlmaLinux support
* Thu Mar 10 2022 Jonathon Jongsma <jjongsma@redhat.com> - 3.2.0-4
- console: fix error with old pygobject (rhbz#2026987)
* Thu Jul 7 2022 Jonathon Jongsma <jjongsma@redhat.com> - 4.0.0-1
- Rebased to virt-manager-4.0.0 (rhbz#2100525)
- virt-install: add support for qemu-vdagent channel (rhbz#2060724)
- virt-manager: add support for qemu-vdagent channel (rhbz#2060724)
* Wed Feb 9 2022 Jonathon Jongsma <jjongsma@redhat.com> - 3.2.0-14
- man: fix default value for filesystem accessmode option (rhbz#2045932)
* Fri Jan 21 2022 Jonathon Jongsma <jjongsma@redhat.com> - 3.2.0-3
- cli: add 'ioapic.driver' to --features (rhbz#2037202)
* Mon Feb 7 2022 Jonathon Jongsma <jjongsma@redhat.com> - 3.2.0-13
- cli: --filesystem: add binary.sandbox.mode and source.socket (rhbz#2045932)
- nodedev: Improve error with unknown address strings (rhbz#2017840)
* Thu Dec 9 2021 Jonathon Jongsma <jjongsma@redhat.com> - 3.2.0-2
- addstorage: Don't pass None to widget.set_active() (rhbz#2026987)
* Thu Jan 20 2022 Jonathon Jongsma <jjongsma@redhat.com> - 3.2.0-12
- cli: add 'ioapic.driver' to --features (rhbz#2039127)
* Fri Nov 19 2021 Jonathon Jongsma <jjongsma@redhat.com> - 3.2.0-1
- Rebased to virt-manager-3.2.0 (rhbz#2009080)
- The rebase also fixes the following bugs:
rhbz#2001794
- cli: introduce --resource fibrechannel.appid option (rhbz#2011327)
- virt-install: add mediated device (rhbz#1995125)
- virt-xml: add support for mediated devices (rhbz#1995125)
- hostdev: use method get_mdev_uuid() (rhbz#1995125)
- tests: verify MDEV support (rhbz#1995125)
- virt-manager: enable MDEV support (rhbz#1995125)
- Handle new nodedev name for mediated devices (rhbz#2020241)
* Fri Nov 19 2021 Jonathon Jongsma <jjongsma@redhat.com> - 3.2.0-11
- Handle new nodedev name for mediated devices (rhbz#2023650)
* Mon Nov 23 2020 Pavel Hrdina <phrdina@redhat.com> - 2.2.1-4
- virt-install: Use minutes instead of seconds on get_time_string() (rhbz#1777664)
- details: Fix showing the firmware type in case of firmware auto selection (rhbz#1857069)
- details: fix detection of firmware auto-selection (rhbz#1857069)
- domain: Fix VM deletion with firmare='efi' (rhbz#1869135)
- virt-xml: fix defined_xml_is_unchanged (rhbz#1857504)
* Thu Nov 11 2021 Jonathon Jongsma <jjongsma@redhat.com> - 3.2.0-10
- cli: introduce --resource fibrechannel.appid option (rhbz#2011328)
* Mon Dec 2 2019 Pavel Hrdina <phrdina@redhat.com> - 2.2.1-3
- guest: Drop set_capabilities_defaults call from get_uefi_path (rhbz#1753644)
- devices: video: Simplify model hvm check (rhbz#1753644)
- domcapabilities: Get video devices (rhbz#1753644)
- domcapabilities: Add supports_video_bochs() (rhbz#1753644)
- video: Prefer "bochs" when it's supported. (rhbz#1753644)
- addhardware: Add "bochs" display to the video list (rhbz#1753644)
- osdict: Always return the most generic tree (rhbz#1749865)
- osdict: Choose the most appropriate tree when a profile is set (rhbz#1749865)
* Thu Sep 9 2021 Jonathon Jongsma <jjongsma@redhat.com> - 3.2.0-9
- virt-install: add mediated device (rhbz#1995131)
- virt-xml: add support for mediated devices (rhbz#1995131)
- hostdev: use method get_mdev_uuid() (rhbz#1995131)
- tests: verify MDEV support (rhbz#1995131)
- virt-manager: enable MDEV support (rhbz#1995131)
* Fri Aug 16 2019 Pavel Hrdina <phrdina@redhat.com> - 2.2.1-2
- man: virt-install: Fix a couple of launchSecurity related typos (rhbz#1741846)
* Tue Aug 10 2021 Mohan Boddu <mboddu@redhat.com> - 3.2.0-8
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags
Related: rhbz#1991688
* Thu Jul 11 2019 Pavel Hrdina <phrdina@redhat.com> - 2.2.1-1
- Rebased to virt-manager-2.2.1 (rhbz#1726535)
- The rebase also fixes the following bugs:
rhbz#1727881, rhbz#1724287, rhbz#1727811
- spec: add gtksourceview3 dependency introduced by upstream (rhbz#1722820)
- guest: fix warning message when machine type is changed for secure boot (rhbz#1727811)
* Fri Jul 30 2021 Jonathon Jongsma <jjongsma@redhat.com> - 3.2.0-7
- urlfetcher: Silence xorisso stderr output (rhbz#1973236)
* Mon Jun 24 2019 Pavel Hrdina <phrdina@redhat.com> - 2.2.0-2
- xmleditor: Handle gtksourceview3 as well as gtksourceview4 (rhbz#1722820)
- xmleditor: Fix the gtksource version checking (rhbz#1722820)
- spec: add gtksourceview3 dependency introduced by upstream (rhbz#1722820)
* Fri Jul 23 2021 Jonathon Jongsma <jjongsma@redhat.com> - 3.2.0-6
- installer: Prefer xorrisofs over genisoimage/mkisofs (rhbz#1973236)
- urlfetcher: Factor out ISOReader class (rhbz#1973236)
- urlfetcher: Add xorriso ISOReader implementation (rhbz#1973236)
- urlfetcher: Delete the 'isoinfo' ISOReader (rhbz#1973236)
- Add gating.yaml for RHEL-9 (rhbz#1984222)
* Mon Jun 17 2019 Pavel Hrdina <phrdina@redhat.com> - 2.2.0-1
- Rebased to virt-manager-2.2.0 (rhbz#1721001)
- The rebase also fixes the following bugs:
rhbz#1718065, rhbz#1714304, rhbz#1709857, rhbz#1707379, rhbz#1700354
rhbz#1692489, rhbz#1690687, rhbz#1690685, rhbz#1683609, rhbz#1679018
rhbz#1677019, rhbz#1671599, rhbz#1667025, rhbz#1666597, rhbz#1663430
rhbz#1661867, rhbz#1660467, rhbz#1660123, rhbz#1659354, rhbz#1658511
rhbz#1648939, rhbz#1599139, rhbz#1508147, rhbz#1501608
- spec: add build dependencies that are now required for build (rhbz#1721001)
* Wed Jun 09 2021 Jonathon Jongsma <jjongsma@redhat.com> - 3.2.0-5
- Disable spice options in virt-manager. Resolves: rhbz#1946939
* Fri Feb 8 2019 Pavel Hrdina <phrdina@redhat.com> - 2.0.0-4
- inspection: fix check of null icon (rhbz#1671278)
* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 3.2.0-4
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937
* Fri Feb 1 2019 Pavel Hrdina <phrdina@redhat.com> - 2.0.0-3
- diskbackend: Fix backtrace cloning with block storage (bz #1661986) (rhbz#1661986)
* Wed Jan 27 2021 Fedora Release Engineering <releng@fedoraproject.org> - 3.2.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Mon Jan 11 2021 Cole Robinson <crobinso@redhat.com> - 3.2.0-2
- Fix 'domain not found' race (bz #1901081)
* Sat Nov 14 2020 Cole Robinson <crobinso@redhat.com> - 3.2.0-1
- Update to version 3.2.0
- Slim down filesystem device editor UI
- Fix TOCTTOU virt-install bugs (Martin Pitt)
- Several other bug fixes
* Wed Sep 30 2020 Cole Robinson <crobinso@redhat.com> - 3.1.0-1
- Update to version 3.1.0
* Tue Sep 15 2020 Cole Robinson <crobinso@redhat.com> - 3.0.0-1
- Update to version 3.0.0
* Mon Aug 31 2020 Cole Robinson <aintdiscole@gmail.com> - 2.2.1-6
- spec: Switch to latest Fedora bytecompile macros
* Sat Aug 01 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2.2.1-5
- Second attempt - Rebuilt for
https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Wed Jul 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2.2.1-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Fri Jan 31 2020 Fedora Release Engineering <releng@fedoraproject.org> - 2.2.1-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Sat Jul 27 2019 Fedora Release Engineering <releng@fedoraproject.org> - 2.2.1-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Wed Jul 03 2019 Cole Robinson <crobinso@redhat.com> - 2.2.1-1
- Rebased to version 2.2.1
- CVE-2019-10183: Replace --unattended user-password and admin-password with
user-password-file and admin-password-file (Fabiano Fidêncio)
- Consistent --memballoon default across non-x86 (Andrea Bolognani)
- virt-install: add --numatune memnode.* (Athina Plaskasoviti)
- Drop hard dep on gtksourceview4, gtksourceview3 is fine as well
* Tue Jun 18 2019 Cole Robinson <crobinso@redhat.com> - 2.2.0-2
- Add missing dep on gtksourceview
* Mon Jun 17 2019 Cole Robinson <crobinso@redhat.com> - 2.2.0-1
- Rebased to version 2.2.0
- libvirt XML viewing and editing UI for new and existing domain, pools,
volumes, networks
- virt-install: libosinfo --unattended support (Fabiano Fidêncio, Cole
Robinson)
- Improve CPU model security defaults (Pavel Hrdina)
- virt-install: new --install option. Ex: virt-install --install fedora29
- virt-install: new --install kernel=,initrd=
- virt-install: --disk, --memory, --name defaults from libosinfo (Fabiano
Fidêncio, Cole Robinson)
- virt-install: add device suboption aliases which consistently match
libvirt XML naming
- virt-xml: new --start, --no-define options (Marc Hartmayer)
- virt-install: Add driver_queues argument to --controller (Vasudeva Kamath)
- RISC-V support (Andrea Bolognani)
- Device default improvements for non-x86 KVM (Andrea Bolognani)
- Redesigned 'New Network' wizard
- libguestfs inspection improvements (Pino Toscano)
- virt-install: Add support for xenbus controller (Jim Fehlig)
- cli: Add --disk wwn=,rawio= (Athina Plaskasoviti)
- cli: Add --memballoon autodeflate=,stats.period= (Athina Plaskasoviti)
- cli: Add --iothreads (Athina Plaskasoviti)
- cli: Add --numatune memory.placement (Athina Plaskasoviti)
- cli: Add --launchSecurity option (Erik Skultety)
- cli: Fill in --memorybacking options
- cli: --smartcard: support database= and certificate[0-9]*=
- cli: --sysinfo: Add chasis suboptions
- cli: --metadata: add genid= and genid_enable=
- cli: --vcpus: add vcpus.vcpu[0-9]* config
- cli: fill in all common char source options for --serial, --parellel,
--console, --channel, --smartcard, --rng, --redirdev
* Wed Apr 03 2019 Cole Robinson <crobinso@redhat.com> - 2.1.0-2
- Fix --initrd-inject with f30 URLs (bz #1686464)
* Sun Feb 03 2019 Cole Robinson <crobinso@redhat.com> - 2.1.0-1
- Rebased to version 2.1.0
- Bash autocompletion support (Lin Ma, Cole Robinson)
- UI and command line --vsock support (Slavomir Kaslev)
- virt-xml: Add --os-variant option (Andrea Bolognani)
- virt-install: use libosinfo cpu, mem, disk size defaults (Fabiano
Fidencio)
- virt-install: Better usage of libosinfo -unknown distro IDs (Fabiano
Fidencio)
- virt-install: More usage of libosinfo for ISO --location detection
- virt-install: Add --location LOCATION,kernel=X,initrd=Y for pointing to
kernel/initrd in media that virt-install/libosinfo fails to detect
* Sun Feb 03 2019 Fedora Release Engineering <releng@fedoraproject.org> - 2.0.0-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Fri Dec 21 2018 Pavel Hrdina <phrdina@redhat.com> - 2.0.0-2
- virt-install: Fix description for --os-variant (rhbz#1649406)
- virt-install: Add "Guest OS" options group (rhbz#1649406)
- virt-xml: Accept --os-variant option (rhbz#1649406)
- tests: Add some tests for virt-xml with KVM (rhbz#1649406)
- virt-xml: Start using --os-variant (rhbz#1649406)
- cli: s390x+graphics specified, use video=virtio (bz #1654994) (rhbz#1654994)
* Mon Oct 15 2018 Cole Robinson <crobinso@redhat.com> - 2.0.0-1
- Rebased to version 2.0.0
- Finish port to Python 3
- Improved VM defaults: q35 PCIe, usb3, CPU host-model
- Search based OS selection UI for new VMs
- Track OS name for lifetime of domain in <metadata> XML
- Host interface management UI has been completely removed
- Show domain IP on interface details page
* Fri Sep 07 2018 Cole Robinson <crobinso@redhat.com> - 1.6.0-1.3.3.git3bc7ff24c
- Enable arm32+uefi (bz #1613996)
* Sat Jul 14 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.6.0-0.3.git3bc7ff24c
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Tue Jun 19 2018 Miro Hrončok <mhroncok@redhat.com> - 1.6.0-0.2.git3bc7ff24c
- Rebuilt for Python 3.7
- Use q35 default for appropriate OS (bz #1599777)
* Thu Apr 26 2018 Cole Robinson <crobinso@redhat.com> - 1.6.0-0.1.git3bc7ff24c
- Update to latest git snapshot, contains python3 port