!12 升级virt-manager至4.1.0版本
From: @crrs666 Reviewed-by: @jxy_git Signed-off-by: @jxy_git
This commit is contained in:
commit
fd6317c639
@ -1,44 +0,0 @@
|
|||||||
From 4d0e323227f18e58283c45be4d240b506faacb22 Mon Sep 17 00:00:00 2001
|
|
||||||
Message-Id: <4d0e323227f18e58283c45be4d240b506faacb22.1610390294.git.crobinso@redhat.com>
|
|
||||||
From: Martin Pitt <martin@piware.de>
|
|
||||||
Date: Tue, 24 Nov 2020 14:24:06 +0100
|
|
||||||
Subject: [PATCH virt-manager] virtinst: Fix TOCTOU in domain enumeration
|
|
||||||
|
|
||||||
Similar to commit 49a01b5482, _fetch_all_domains_raw() has a race
|
|
||||||
condition where a domain may disappear (from parallel libvirt
|
|
||||||
operations) in between enumerating and inspecting the objects.
|
|
||||||
|
|
||||||
Ignore these missing domains instead of crashing.
|
|
||||||
|
|
||||||
https://bugzilla.redhat.com/show_bug.cgi?id=1901081
|
|
||||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
||||||
---
|
|
||||||
virtinst/connection.py | 12 ++++++++++--
|
|
||||||
1 file changed, 10 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/virtinst/connection.py b/virtinst/connection.py
|
|
||||||
index fec273b7..06bc60ad 100644
|
|
||||||
--- a/virtinst/connection.py
|
|
||||||
+++ b/virtinst/connection.py
|
|
||||||
@@ -182,8 +182,16 @@ class VirtinstConnection(object):
|
|
||||||
def _fetch_all_domains_raw(self):
|
|
||||||
dummy1, dummy2, ret = pollhelpers.fetch_vms(
|
|
||||||
self, {}, lambda obj, ignore: obj)
|
|
||||||
- return [Guest(weakref.proxy(self), parsexml=obj.XMLDesc(0))
|
|
||||||
- for obj in ret]
|
|
||||||
+ domains = []
|
|
||||||
+ for obj in ret:
|
|
||||||
+ # TOCTOU race: a domain may go away in between enumeration and inspection
|
|
||||||
+ try:
|
|
||||||
+ xml = obj.XMLDesc(0)
|
|
||||||
+ except libvirt.libvirtError as e: # pragma: no cover
|
|
||||||
+ log.debug("Fetching domain XML failed: %s", e)
|
|
||||||
+ continue
|
|
||||||
+ domains.append(Guest(weakref.proxy(self), parsexml=xml))
|
|
||||||
+ return domains
|
|
||||||
|
|
||||||
def _build_pool_raw(self, poolobj):
|
|
||||||
return StoragePool(weakref.proxy(self),
|
|
||||||
--
|
|
||||||
2.29.2
|
|
||||||
|
|
||||||
Binary file not shown.
BIN
virt-manager-4.1.0.tar.gz
Normal file
BIN
virt-manager-4.1.0.tar.gz
Normal file
Binary file not shown.
@ -1,112 +0,0 @@
|
|||||||
From 9cb766bec0296720e98101807726dd9a488486c4 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)
|
|
||||||
|
|
||||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2023650
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
@ -1,112 +0,0 @@
|
|||||||
From a024c96367ce5f1f8e24e19e9d0735de308d870b 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=2039127
|
|
||||||
|
|
||||||
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 aba1fe3c..2034d21c 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
|
|
||||||
|
|
||||||
@ -1,93 +0,0 @@
|
|||||||
From 5c16353a007fd7f18eb44a7413d0c146b7de1a4c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Cole Robinson <crobinso@redhat.com>
|
|
||||||
Date: Fri, 30 Jul 2021 13:15:29 -0400
|
|
||||||
Subject: [PATCH] cli: --filesystem: add binary.sandbox.mode and source.socket
|
|
||||||
|
|
||||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
||||||
(cherry picked from commit 520b3a3b35359ddd07f3a818d6cc3e6740079eff)
|
|
||||||
|
|
||||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2045932
|
|
||||||
|
|
||||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
|
||||||
---
|
|
||||||
tests/data/cli/compare/virt-install-many-devices.xml | 5 ++++-
|
|
||||||
tests/test_cli.py | 2 +-
|
|
||||||
virtinst/cli.py | 2 ++
|
|
||||||
virtinst/devices/filesystem.py | 2 ++
|
|
||||||
4 files changed, 9 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/tests/data/cli/compare/virt-install-many-devices.xml b/tests/data/cli/compare/virt-install-many-devices.xml
|
|
||||||
index 3bd756b3..417d8db0 100644
|
|
||||||
--- a/tests/data/cli/compare/virt-install-many-devices.xml
|
|
||||||
+++ b/tests/data/cli/compare/virt-install-many-devices.xml
|
|
||||||
@@ -293,11 +293,14 @@
|
|
||||||
<readonly/>
|
|
||||||
<space_hard_limit>1234</space_hard_limit>
|
|
||||||
<space_soft_limit>500</space_soft_limit>
|
|
||||||
- <source pool="pool1" volume="vol"/>
|
|
||||||
+ <source pool="pool1" volume="vol">
|
|
||||||
+ <socket>/tmp/foo.sock</socket>
|
|
||||||
+ </source>
|
|
||||||
<target dir="/foo"/>
|
|
||||||
<binary path="/foo/virtiofsd" xattr="off">
|
|
||||||
<cache mode="always"/>
|
|
||||||
<lock posix="off" flock="on"/>
|
|
||||||
+ <sandbox mode="chroot"/>
|
|
||||||
</binary>
|
|
||||||
<driver name="virtiofs" queue="3"/>
|
|
||||||
</filesystem>
|
|
||||||
diff --git a/tests/test_cli.py b/tests/test_cli.py
|
|
||||||
index 2034d21c..862d19dd 100644
|
|
||||||
--- a/tests/test_cli.py
|
|
||||||
+++ b/tests/test_cli.py
|
|
||||||
@@ -686,7 +686,7 @@ source.reservations.managed=no,source.reservations.source.type=unix,source.reser
|
|
||||||
--filesystem type-mount,source.dir=/,target=/
|
|
||||||
--filesystem type=template,source.name=foo,target=/
|
|
||||||
--filesystem type=file,source.file=foo.img,target=/
|
|
||||||
---filesystem type=volume,model=virtio,multidevs=remap,readonly=on,space_hard_limit=1234,space_soft_limit=500,source.pool=pool1,source.volume=vol,driver.name=virtiofs,driver.queue=3,binary.path=/foo/virtiofsd,binary.xattr=off,binary.cache.mode=always,binary.lock.posix=off,binary.lock.flock=on,target.dir=/foo
|
|
||||||
+--filesystem type=volume,model=virtio,multidevs=remap,readonly=on,space_hard_limit=1234,space_soft_limit=500,source.pool=pool1,source.volume=vol,driver.name=virtiofs,driver.queue=3,binary.path=/foo/virtiofsd,binary.xattr=off,binary.cache.mode=always,binary.lock.posix=off,binary.lock.flock=on,target.dir=/foo,binary.sandbox.mode=chroot,source.socket=/tmp/foo.sock
|
|
||||||
--filesystem type=block,source.dev=/dev/foo,target.dir=/
|
|
||||||
--filesystem type=ram,source.usage=1024,source.units=MiB,target=/
|
|
||||||
|
|
||||||
diff --git a/virtinst/cli.py b/virtinst/cli.py
|
|
||||||
index dbd4a545..13782fc8 100644
|
|
||||||
--- a/virtinst/cli.py
|
|
||||||
+++ b/virtinst/cli.py
|
|
||||||
@@ -4225,6 +4225,7 @@ class ParserFilesystem(VirtCLIParser):
|
|
||||||
cls.add_arg("source.volume", "source_volume")
|
|
||||||
cls.add_arg("source.units", "source_units")
|
|
||||||
cls.add_arg("source.usage", "source_usage")
|
|
||||||
+ cls.add_arg("source.socket", "source_socket")
|
|
||||||
|
|
||||||
cls.add_arg("target.dir", "target_dir")
|
|
||||||
|
|
||||||
@@ -4233,6 +4234,7 @@ class ParserFilesystem(VirtCLIParser):
|
|
||||||
cls.add_arg("binary.cache.mode", "binary_cache_mode")
|
|
||||||
cls.add_arg("binary.lock.posix", "binary_lock_posix", is_onoff=True)
|
|
||||||
cls.add_arg("binary.lock.flock", "binary_lock_flock", is_onoff=True)
|
|
||||||
+ cls.add_arg("binary.sandbox.mode", "binary_sandbox_mode")
|
|
||||||
|
|
||||||
cls.add_arg("driver.format", "driver_format")
|
|
||||||
cls.add_arg("driver.name", "driver_name")
|
|
||||||
diff --git a/virtinst/devices/filesystem.py b/virtinst/devices/filesystem.py
|
|
||||||
index 574844b6..02402bac 100644
|
|
||||||
--- a/virtinst/devices/filesystem.py
|
|
||||||
+++ b/virtinst/devices/filesystem.py
|
|
||||||
@@ -49,12 +49,14 @@ class DeviceFilesystem(Device):
|
|
||||||
source_units = XMLProperty("./source/@units")
|
|
||||||
source_pool = XMLProperty("./source/@pool")
|
|
||||||
source_volume = XMLProperty("./source/@volume")
|
|
||||||
+ source_socket = XMLProperty("./source/socket")
|
|
||||||
|
|
||||||
binary_path = XMLProperty("./binary/@path")
|
|
||||||
binary_xattr = XMLProperty("./binary/@xattr", is_onoff=True)
|
|
||||||
binary_cache_mode = XMLProperty("./binary/cache/@mode")
|
|
||||||
binary_lock_posix = XMLProperty("./binary/lock/@posix", is_onoff=True)
|
|
||||||
binary_lock_flock = XMLProperty("./binary/lock/@flock", is_onoff=True)
|
|
||||||
+ binary_sandbox_mode = XMLProperty("./binary/sandbox/@mode")
|
|
||||||
|
|
||||||
def _type_to_source_prop(self):
|
|
||||||
if self.type == DeviceFilesystem.TYPE_TEMPLATE:
|
|
||||||
--
|
|
||||||
2.34.1
|
|
||||||
|
|
||||||
@ -1,71 +0,0 @@
|
|||||||
From ddedf5e1b34568adbbfed6a052bf96b7d1eda6f1 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=2011328
|
|
||||||
|
|
||||||
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 4b714e3e..aba1fe3c 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
|
|
||||||
|
|
||||||
@ -1,35 +0,0 @@
|
|||||||
From 1bba2d4e7de4a921921f2ae5d0d09589a180b70b 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>
|
|
||||||
|
|
||||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1995131
|
|
||||||
|
|
||||||
(cherry picked from commit f87e96d3d40891f1403601abc389c24800ba1069)
|
|
||||||
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
|
|
||||||
|
|
||||||
@ -1,43 +0,0 @@
|
|||||||
From 89766dae2418fb8fd9d54b7ce1d93a11d5faecdd Mon Sep 17 00:00:00 2001
|
|
||||||
From: Cole Robinson <crobinso@redhat.com>
|
|
||||||
Date: Wed, 7 Apr 2021 09:37:53 -0400
|
|
||||||
Subject: [PATCH] installer: Prefer xorrisofs over genisoimage/mkisofs
|
|
||||||
|
|
||||||
Apparently it's the most likely version to exist in distros these
|
|
||||||
days. Particularly the other options may not be shipped in stock
|
|
||||||
RHEL9
|
|
||||||
|
|
||||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
||||||
(cherry picked from commit 3785abc6f0cb07c02ecc55760547a6f425513915)
|
|
||||||
|
|
||||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1973236
|
|
||||||
|
|
||||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
|
||||||
---
|
|
||||||
virtinst/install/installerinject.py | 10 ++++++----
|
|
||||||
1 file changed, 6 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/virtinst/install/installerinject.py b/virtinst/install/installerinject.py
|
|
||||||
index 29150c8e..97742f6a 100644
|
|
||||||
--- a/virtinst/install/installerinject.py
|
|
||||||
+++ b/virtinst/install/installerinject.py
|
|
||||||
@@ -45,10 +45,12 @@ def _run_initrd_commands(initrd, tempdir):
|
|
||||||
|
|
||||||
|
|
||||||
def _run_iso_commands(iso, tempdir, cloudinit=False):
|
|
||||||
- # Some distros do not link mkisofs to genisoimage (or vice-versa). As a
|
|
||||||
- # result of this, we have to actually check for both programs and use the
|
|
||||||
- # most appropriate one.
|
|
||||||
- programs = ["genisoimage", "mkisofs"]
|
|
||||||
+ # These three programs all behave similarly for our needs, and
|
|
||||||
+ # different distros only have some available. xorriso is apparently
|
|
||||||
+ # the actively maintained variant that should be available everywhere
|
|
||||||
+ # and without any license issues. Some more info here:
|
|
||||||
+ # https://wiki.debian.org/genisoimage
|
|
||||||
+ programs = ["xorrisofs", "genisoimage", "mkisofs"]
|
|
||||||
for program in programs:
|
|
||||||
if shutil.which(program):
|
|
||||||
break
|
|
||||||
--
|
|
||||||
2.31.1
|
|
||||||
|
|
||||||
@ -1,35 +0,0 @@
|
|||||||
From 63a722890fa74f1f79346ebc2c4e158882d2bc0f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jonathon Jongsma <jjongsma@redhat.com>
|
|
||||||
Date: Tue, 8 Feb 2022 12:59:11 -0600
|
|
||||||
Subject: [PATCH] man: fix default value for filesystem accessmode option
|
|
||||||
|
|
||||||
Commit 85307b9bd2971cfc972c976c78e411f018647861 changed the default
|
|
||||||
value for 'accessmode' from 'passthrough' to 'mapped', but forgot to
|
|
||||||
update the documentation in the man page.
|
|
||||||
|
|
||||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
|
||||||
(cherry picked from commit 17cd4477b8b18051c5bc4d57da5ca611cfd2d372)
|
|
||||||
|
|
||||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2045932
|
|
||||||
|
|
||||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
|
||||||
---
|
|
||||||
man/virt-install.rst | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/man/virt-install.rst b/man/virt-install.rst
|
|
||||||
index f75af635..e97a2266 100644
|
|
||||||
--- a/man/virt-install.rst
|
|
||||||
+++ b/man/virt-install.rst
|
|
||||||
@@ -1197,7 +1197,7 @@ Some example suboptions:
|
|
||||||
|
|
||||||
``accessmode`` or ``mode``
|
|
||||||
The access mode for the source directory from the guest OS. Only used with
|
|
||||||
- QEMU and type=mount. Valid modes are 'passthrough' (the default), 'mapped',
|
|
||||||
+ QEMU and type=mount. Valid modes are 'mapped' (the default), 'passthrough',
|
|
||||||
or 'squash'. See libvirt domain XML documentation for more info.
|
|
||||||
|
|
||||||
``source``
|
|
||||||
--
|
|
||||||
2.34.1
|
|
||||||
|
|
||||||
@ -1,32 +0,0 @@
|
|||||||
From 6cdb34eb04e17315cfc7ee7cf6538bc6370c8d8b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Cole Robinson <crobinso@redhat.com>
|
|
||||||
Date: Tue, 11 Jan 2022 11:39:29 -0500
|
|
||||||
Subject: [PATCH] nodedev: Improve error with unknown address strings
|
|
||||||
|
|
||||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
||||||
(cherry picked from commit ed7b8769c4d48c89ed593138171bc8dbb1ead108)
|
|
||||||
|
|
||||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2017840
|
|
||||||
|
|
||||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
|
||||||
---
|
|
||||||
virtinst/nodedev.py | 3 ++-
|
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/virtinst/nodedev.py b/virtinst/nodedev.py
|
|
||||||
index 248723b9..f0bc769b 100644
|
|
||||||
--- a/virtinst/nodedev.py
|
|
||||||
+++ b/virtinst/nodedev.py
|
|
||||||
@@ -235,7 +235,8 @@ def _AddressStringToHostdev(conn, addrstr):
|
|
||||||
hostdev.bus = bus
|
|
||||||
hostdev.device = device
|
|
||||||
else:
|
|
||||||
- raise RuntimeError("Unknown address type")
|
|
||||||
+ raise RuntimeError(
|
|
||||||
+ "Unknown hostdev address string format '%s'" % addrstr)
|
|
||||||
except Exception:
|
|
||||||
log.debug("Error parsing node device string.", exc_info=True)
|
|
||||||
raise
|
|
||||||
--
|
|
||||||
2.34.1
|
|
||||||
|
|
||||||
@ -1,230 +0,0 @@
|
|||||||
From bbf159da53b34060ae8e5f3023a78a541fec333a 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>
|
|
||||||
|
|
||||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1995131
|
|
||||||
|
|
||||||
(cherry picked from commit 9d4002ee0f7088c490748ffb3144c006f4e39c68)
|
|
||||||
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 092e087a..4b714e3e 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
|
|
||||||
|
|
||||||
@ -1,200 +0,0 @@
|
|||||||
From 2bda38a197a780a85e9ce448ea81a81fe866c981 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Cole Robinson <crobinso@redhat.com>
|
|
||||||
Date: Wed, 7 Apr 2021 11:45:00 -0400
|
|
||||||
Subject: [PATCH] urlfetcher: Add xorriso ISOReader implementation
|
|
||||||
|
|
||||||
xorisso is the still maintained isoinfo alternative, and may be
|
|
||||||
the only iso reading tool in RHEL9, so we need to support it.
|
|
||||||
Make it the default for our spec file and test suite too
|
|
||||||
|
|
||||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
||||||
(cherry picked from commit f793986378f84bb409d2451bdb62ca08fd4cb5b4)
|
|
||||||
|
|
||||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1973236
|
|
||||||
|
|
||||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
|
||||||
---
|
|
||||||
man/virt-install.rst | 2 +-
|
|
||||||
tests/test_cli.py | 12 ++++-----
|
|
||||||
virt-manager.spec | 4 +--
|
|
||||||
virtinst/install/urldetect.py | 4 +--
|
|
||||||
virtinst/install/urlfetcher.py | 48 +++++++++++++++++++++++++---------
|
|
||||||
5 files changed, 47 insertions(+), 23 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/man/virt-install.rst b/man/virt-install.rst
|
|
||||||
index 963f9564..f75af635 100644
|
|
||||||
--- a/man/virt-install.rst
|
|
||||||
+++ b/man/virt-install.rst
|
|
||||||
@@ -617,7 +617,7 @@ ftp://host/path
|
|
||||||
An FTP server location containing an installable distribution image.
|
|
||||||
|
|
||||||
ISO
|
|
||||||
- Probe the ISO and extract files using 'isoinfo'
|
|
||||||
+ Extract files directly from the ISO path
|
|
||||||
|
|
||||||
DIRECTORY
|
|
||||||
Path to a local directory containing an installable distribution image.
|
|
||||||
diff --git a/tests/test_cli.py b/tests/test_cli.py
|
|
||||||
index 5e69a135..3534e0e2 100644
|
|
||||||
--- a/tests/test_cli.py
|
|
||||||
+++ b/tests/test_cli.py
|
|
||||||
@@ -39,7 +39,7 @@ MEDIA_DIR = os.path.relpath(utils.DATADIR + "/fakemedia", utils.TOPDIR)
|
|
||||||
UNATTENDED_DIR = XMLDIR + "/unattended"
|
|
||||||
OLD_OSINFO = utils.has_old_osinfo()
|
|
||||||
NO_OSINFO_UNATTEND = not unattended.OSInstallScript.have_new_libosinfo()
|
|
||||||
-HAS_ISOINFO = shutil.which("isoinfo")
|
|
||||||
+HAS_xorriso = shutil.which("xorriso")
|
|
||||||
|
|
||||||
# We use this check as a surrogate for a released libosinfo with a bug
|
|
||||||
# fix we need to get full test coverage
|
|
||||||
@@ -100,9 +100,9 @@ def has_old_osinfo():
|
|
||||||
return "osinfo is too old"
|
|
||||||
|
|
||||||
|
|
||||||
-def missing_isoinfo():
|
|
||||||
- if not HAS_ISOINFO:
|
|
||||||
- return "isoinfo not installed"
|
|
||||||
+def missing_xorriso():
|
|
||||||
+ if not HAS_xorriso:
|
|
||||||
+ return "xorriso not installed"
|
|
||||||
|
|
||||||
|
|
||||||
def no_osinfo_unattend_cb():
|
|
||||||
@@ -995,8 +995,8 @@ c.add_compare("--connect " + utils.URIs.kvm_session + " --disk size=8 --os-varia
|
|
||||||
c.add_valid("--connect " + utils.URIs.kvm_session + " --install fedora21", prerun_check=has_old_osinfo) # hits some get_search_paths and media_upload code paths
|
|
||||||
|
|
||||||
# misc KVM config tests
|
|
||||||
-c.add_compare("--disk none --location %(ISO-NO-OS)s,kernel=frib.img,initrd=/frob.img", "location-manual-kernel", prerun_check=missing_isoinfo) # --location with an unknown ISO but manually specified kernel paths
|
|
||||||
-c.add_compare("--disk %(EXISTIMG1)s --location %(ISOTREE)s --nonetworks", "location-iso", prerun_check=missing_isoinfo) # Using --location iso mounting
|
|
||||||
+c.add_compare("--disk none --location %(ISO-NO-OS)s,kernel=frib.img,initrd=/frob.img", "location-manual-kernel", prerun_check=missing_xorriso) # --location with an unknown ISO but manually specified kernel paths
|
|
||||||
+c.add_compare("--disk %(EXISTIMG1)s --location %(ISOTREE)s --nonetworks", "location-iso", prerun_check=missing_xorriso) # Using --location iso mounting
|
|
||||||
c.add_compare("--disk %(EXISTIMG1)s --cdrom %(ISOLABEL)s", "cdrom-centos-label") # Using --cdrom with centos CD label, should use virtio etc.
|
|
||||||
c.add_compare("--disk %(EXISTIMG1)s --install bootdev=network --os-variant rhel5.4 --cloud-init none", "kvm-rhel5") # RHEL5 defaults
|
|
||||||
c.add_compare("--disk %(EXISTIMG1)s --install kernel=%(ISO-WIN7)s,initrd=%(ISOLABEL)s,kernel_args='foo bar' --os-variant rhel6.4 --unattended none", "kvm-rhel6") # RHEL6 defaults. ISO paths are just to point at existing files
|
|
||||||
diff --git a/virt-manager.spec b/virt-manager.spec
|
|
||||||
index f523551b..3946c300 100644
|
|
||||||
--- a/virt-manager.spec
|
|
||||||
+++ b/virt-manager.spec
|
|
||||||
@@ -71,8 +71,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 with isoinfo
|
|
||||||
-Requires: genisoimage
|
|
||||||
+# Required for pulling files from iso media
|
|
||||||
+Requires: xorriso
|
|
||||||
|
|
||||||
%description common
|
|
||||||
Common files used by the different virt-manager interfaces, as well as
|
|
||||||
diff --git a/virtinst/install/urldetect.py b/virtinst/install/urldetect.py
|
|
||||||
index a73b0bf1..f5ed0270 100644
|
|
||||||
--- a/virtinst/install/urldetect.py
|
|
||||||
+++ b/virtinst/install/urldetect.py
|
|
||||||
@@ -40,9 +40,9 @@ class _DistroCache(object):
|
|
||||||
if path not in self._filecache:
|
|
||||||
try:
|
|
||||||
content = self._fetcher.acquireFileContent(path)
|
|
||||||
- except ValueError:
|
|
||||||
+ except ValueError as e:
|
|
||||||
content = None
|
|
||||||
- log.debug("Failed to acquire file=%s", path)
|
|
||||||
+ log.debug("Failed to acquire file=%s: %s", path, e)
|
|
||||||
self._filecache[path] = content
|
|
||||||
return self._filecache[path]
|
|
||||||
|
|
||||||
diff --git a/virtinst/install/urlfetcher.py b/virtinst/install/urlfetcher.py
|
|
||||||
index 3cacab1a..835c9e40 100644
|
|
||||||
--- a/virtinst/install/urlfetcher.py
|
|
||||||
+++ b/virtinst/install/urlfetcher.py
|
|
||||||
@@ -26,7 +26,7 @@ class _ISOReader:
|
|
||||||
def __init__(self, location):
|
|
||||||
self._location = location
|
|
||||||
|
|
||||||
- def grabFile(self, url):
|
|
||||||
+ def grabFile(self, url, scratchdir):
|
|
||||||
raise NotImplementedError()
|
|
||||||
def hasFile(self, url):
|
|
||||||
raise NotImplementedError()
|
|
||||||
@@ -43,20 +43,50 @@ class _ISOinfoReader(_ISOReader):
|
|
||||||
def _make_file_list(self):
|
|
||||||
cmd = ["isoinfo", "-J", "-i", self._location, "-f"]
|
|
||||||
|
|
||||||
- log.debug("Running isoinfo: %s", cmd)
|
|
||||||
+ log.debug("Generating iso filelist: %s", cmd)
|
|
||||||
output = subprocess.check_output(cmd, stderr=subprocess.DEVNULL)
|
|
||||||
return output.splitlines(False)
|
|
||||||
|
|
||||||
- def grabFile(self, url):
|
|
||||||
+ def grabFile(self, url, scratchdir):
|
|
||||||
+ ignore = scratchdir
|
|
||||||
cmd = ["isoinfo", "-J", "-i", self._location, "-x", url]
|
|
||||||
|
|
||||||
- log.debug("Running isoinfo: %s", cmd)
|
|
||||||
+ log.debug("Extracting iso file: %s", cmd)
|
|
||||||
return subprocess.check_output(cmd)
|
|
||||||
|
|
||||||
def hasFile(self, url):
|
|
||||||
return url.encode("ascii") in self._cache_file_list
|
|
||||||
|
|
||||||
|
|
||||||
+class _XorrisoReader(_ISOReader):
|
|
||||||
+ def __init__(self, location):
|
|
||||||
+ super().__init__(location)
|
|
||||||
+ self._cache_file_list = self._make_file_list()
|
|
||||||
+
|
|
||||||
+ def _make_file_list(self):
|
|
||||||
+ delim = "VIRTINST_BEGINLIST"
|
|
||||||
+ cmd = ["xorriso", "-indev", self._location, "-print", delim, "-find"]
|
|
||||||
+
|
|
||||||
+ log.debug("Generating iso filelist: %s", cmd)
|
|
||||||
+ output = subprocess.check_output(cmd,
|
|
||||||
+ stderr=subprocess.DEVNULL, text=True)
|
|
||||||
+ return output.split(delim, 1)[1].strip().splitlines()
|
|
||||||
+
|
|
||||||
+ def grabFile(self, url, scratchdir):
|
|
||||||
+ tmp = tempfile.NamedTemporaryFile(
|
|
||||||
+ prefix="virtinst-iso", suffix="-" + os.path.basename(url),
|
|
||||||
+ dir=scratchdir)
|
|
||||||
+
|
|
||||||
+ cmd = ["xorriso", "-osirrox", "on", "-indev", self._location,
|
|
||||||
+ "-extract", url, tmp.name]
|
|
||||||
+ log.debug("Extracting iso file: %s", cmd)
|
|
||||||
+ subprocess.check_output(cmd)
|
|
||||||
+ return open(tmp.name, "rb").read()
|
|
||||||
+
|
|
||||||
+ def hasFile(self, url):
|
|
||||||
+ return ("'.%s'" % url) in self._cache_file_list
|
|
||||||
+
|
|
||||||
+
|
|
||||||
###########################
|
|
||||||
# Fetcher implementations #
|
|
||||||
###########################
|
|
||||||
@@ -349,23 +379,17 @@ class _ISOURLFetcher(_URLFetcher):
|
|
||||||
|
|
||||||
def _get_isoreader(self):
|
|
||||||
if not self._isoreader:
|
|
||||||
- self._isoreader = _ISOinfoReader(self.location)
|
|
||||||
+ self._isoreader = _XorrisoReader(self.location)
|
|
||||||
return self._isoreader
|
|
||||||
|
|
||||||
def _grabber(self, url):
|
|
||||||
- """
|
|
||||||
- Use isoinfo to grab the file
|
|
||||||
- """
|
|
||||||
if not self._hasFile(url):
|
|
||||||
raise RuntimeError("iso doesn't have file=%s" % url)
|
|
||||||
|
|
||||||
- output = self._get_isoreader().grabFile(url)
|
|
||||||
+ output = self._get_isoreader().grabFile(url, self.scratchdir)
|
|
||||||
return io.BytesIO(output), len(output)
|
|
||||||
|
|
||||||
def _hasFile(self, url):
|
|
||||||
- """
|
|
||||||
- Use isoinfo to list and search for the file
|
|
||||||
- """
|
|
||||||
return self._get_isoreader().hasFile(url)
|
|
||||||
|
|
||||||
|
|
||||||
--
|
|
||||||
2.31.1
|
|
||||||
|
|
||||||
@ -1,78 +0,0 @@
|
|||||||
From a3017ef3d61139362482d5f3c5d6bf056fe6fb6e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Cole Robinson <crobinso@redhat.com>
|
|
||||||
Date: Sat, 22 May 2021 12:18:22 -0400
|
|
||||||
Subject: [PATCH] urlfetcher: Delete the 'isoinfo' ISOReader
|
|
||||||
|
|
||||||
We didn't delete this in the last commit, mostly to make it easier
|
|
||||||
to revert this commit if it turns out we need to support both isoinfo
|
|
||||||
and xorriso. Right now I don't know of any reason why that should
|
|
||||||
be necessary but time will tell.
|
|
||||||
|
|
||||||
If we do go that route it will take more work to teach urlfetcher
|
|
||||||
to dynamically detect the presence of one or the other, along with
|
|
||||||
similar tweaks.
|
|
||||||
|
|
||||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
||||||
(cherry picked from commit 08d1a6a2ddd18f88222f9fdffa3f60f42a40bc67)
|
|
||||||
|
|
||||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1973236
|
|
||||||
|
|
||||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
|
||||||
---
|
|
||||||
virtinst/install/urlfetcher.py | 38 +---------------------------------
|
|
||||||
1 file changed, 1 insertion(+), 37 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/virtinst/install/urlfetcher.py b/virtinst/install/urlfetcher.py
|
|
||||||
index 835c9e40..838a206a 100644
|
|
||||||
--- a/virtinst/install/urlfetcher.py
|
|
||||||
+++ b/virtinst/install/urlfetcher.py
|
|
||||||
@@ -22,45 +22,9 @@ from ..logger import log
|
|
||||||
# isoreader abstraction #
|
|
||||||
#########################
|
|
||||||
|
|
||||||
-class _ISOReader:
|
|
||||||
+class _XorrisoReader():
|
|
||||||
def __init__(self, location):
|
|
||||||
self._location = location
|
|
||||||
-
|
|
||||||
- def grabFile(self, url, scratchdir):
|
|
||||||
- raise NotImplementedError()
|
|
||||||
- def hasFile(self, url):
|
|
||||||
- raise NotImplementedError()
|
|
||||||
-
|
|
||||||
-
|
|
||||||
-class _ISOinfoReader(_ISOReader):
|
|
||||||
- """
|
|
||||||
- Handle reading reading files off an iso
|
|
||||||
- """
|
|
||||||
- def __init__(self, location):
|
|
||||||
- super().__init__(location)
|
|
||||||
- self._cache_file_list = self._make_file_list()
|
|
||||||
-
|
|
||||||
- def _make_file_list(self):
|
|
||||||
- cmd = ["isoinfo", "-J", "-i", self._location, "-f"]
|
|
||||||
-
|
|
||||||
- log.debug("Generating iso filelist: %s", cmd)
|
|
||||||
- output = subprocess.check_output(cmd, stderr=subprocess.DEVNULL)
|
|
||||||
- return output.splitlines(False)
|
|
||||||
-
|
|
||||||
- def grabFile(self, url, scratchdir):
|
|
||||||
- ignore = scratchdir
|
|
||||||
- cmd = ["isoinfo", "-J", "-i", self._location, "-x", url]
|
|
||||||
-
|
|
||||||
- log.debug("Extracting iso file: %s", cmd)
|
|
||||||
- return subprocess.check_output(cmd)
|
|
||||||
-
|
|
||||||
- def hasFile(self, url):
|
|
||||||
- return url.encode("ascii") in self._cache_file_list
|
|
||||||
-
|
|
||||||
-
|
|
||||||
-class _XorrisoReader(_ISOReader):
|
|
||||||
- def __init__(self, location):
|
|
||||||
- super().__init__(location)
|
|
||||||
self._cache_file_list = self._make_file_list()
|
|
||||||
|
|
||||||
def _make_file_list(self):
|
|
||||||
--
|
|
||||||
2.31.1
|
|
||||||
|
|
||||||
@ -1,120 +0,0 @@
|
|||||||
From dae2f3471a56f3967952e6951f60f523060c89a0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Cole Robinson <crobinso@redhat.com>
|
|
||||||
Date: Wed, 7 Apr 2021 09:51:41 -0400
|
|
||||||
Subject: [PATCH] urlfetcher: Factor out ISOReader class
|
|
||||||
|
|
||||||
This contains all the isoinfo command logic. This will be used
|
|
||||||
to add an xorriso backend as well
|
|
||||||
|
|
||||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
||||||
(cherry picked from commit b13b5e0f5edf8efabae643d28f12693f43f094db)
|
|
||||||
|
|
||||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1973236
|
|
||||||
|
|
||||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
|
||||||
---
|
|
||||||
virtinst/install/urlfetcher.py | 64 +++++++++++++++++++++++++---------
|
|
||||||
1 file changed, 48 insertions(+), 16 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/virtinst/install/urlfetcher.py b/virtinst/install/urlfetcher.py
|
|
||||||
index f531fe50..3cacab1a 100644
|
|
||||||
--- a/virtinst/install/urlfetcher.py
|
|
||||||
+++ b/virtinst/install/urlfetcher.py
|
|
||||||
@@ -18,6 +18,45 @@ import requests
|
|
||||||
from ..logger import log
|
|
||||||
|
|
||||||
|
|
||||||
+#########################
|
|
||||||
+# isoreader abstraction #
|
|
||||||
+#########################
|
|
||||||
+
|
|
||||||
+class _ISOReader:
|
|
||||||
+ def __init__(self, location):
|
|
||||||
+ self._location = location
|
|
||||||
+
|
|
||||||
+ def grabFile(self, url):
|
|
||||||
+ raise NotImplementedError()
|
|
||||||
+ def hasFile(self, url):
|
|
||||||
+ raise NotImplementedError()
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+class _ISOinfoReader(_ISOReader):
|
|
||||||
+ """
|
|
||||||
+ Handle reading reading files off an iso
|
|
||||||
+ """
|
|
||||||
+ def __init__(self, location):
|
|
||||||
+ super().__init__(location)
|
|
||||||
+ self._cache_file_list = self._make_file_list()
|
|
||||||
+
|
|
||||||
+ def _make_file_list(self):
|
|
||||||
+ cmd = ["isoinfo", "-J", "-i", self._location, "-f"]
|
|
||||||
+
|
|
||||||
+ log.debug("Running isoinfo: %s", cmd)
|
|
||||||
+ output = subprocess.check_output(cmd, stderr=subprocess.DEVNULL)
|
|
||||||
+ return output.splitlines(False)
|
|
||||||
+
|
|
||||||
+ def grabFile(self, url):
|
|
||||||
+ cmd = ["isoinfo", "-J", "-i", self._location, "-x", url]
|
|
||||||
+
|
|
||||||
+ log.debug("Running isoinfo: %s", cmd)
|
|
||||||
+ return subprocess.check_output(cmd)
|
|
||||||
+
|
|
||||||
+ def hasFile(self, url):
|
|
||||||
+ return url.encode("ascii") in self._cache_file_list
|
|
||||||
+
|
|
||||||
+
|
|
||||||
###########################
|
|
||||||
# Fetcher implementations #
|
|
||||||
###########################
|
|
||||||
@@ -302,39 +341,32 @@ class _LocalURLFetcher(_URLFetcher):
|
|
||||||
|
|
||||||
|
|
||||||
class _ISOURLFetcher(_URLFetcher):
|
|
||||||
- _cache_file_list = None
|
|
||||||
+ _isoreader = None
|
|
||||||
_is_iso = True
|
|
||||||
|
|
||||||
def _make_full_url(self, filename):
|
|
||||||
return os.path.join("/", filename)
|
|
||||||
|
|
||||||
+ def _get_isoreader(self):
|
|
||||||
+ if not self._isoreader:
|
|
||||||
+ self._isoreader = _ISOinfoReader(self.location)
|
|
||||||
+ return self._isoreader
|
|
||||||
+
|
|
||||||
def _grabber(self, url):
|
|
||||||
"""
|
|
||||||
Use isoinfo to grab the file
|
|
||||||
"""
|
|
||||||
if not self._hasFile(url):
|
|
||||||
- raise RuntimeError("isoinfo didn't find file=%s" % url)
|
|
||||||
-
|
|
||||||
- cmd = ["isoinfo", "-J", "-i", self.location, "-x", url]
|
|
||||||
-
|
|
||||||
- log.debug("Running isoinfo: %s", cmd)
|
|
||||||
- output = subprocess.check_output(cmd)
|
|
||||||
+ raise RuntimeError("iso doesn't have file=%s" % url)
|
|
||||||
|
|
||||||
+ output = self._get_isoreader().grabFile(url)
|
|
||||||
return io.BytesIO(output), len(output)
|
|
||||||
|
|
||||||
def _hasFile(self, url):
|
|
||||||
"""
|
|
||||||
Use isoinfo to list and search for the file
|
|
||||||
"""
|
|
||||||
- if not self._cache_file_list:
|
|
||||||
- cmd = ["isoinfo", "-J", "-i", self.location, "-f"]
|
|
||||||
-
|
|
||||||
- log.debug("Running isoinfo: %s", cmd)
|
|
||||||
- output = subprocess.check_output(cmd, stderr=subprocess.DEVNULL)
|
|
||||||
-
|
|
||||||
- self._cache_file_list = output.splitlines(False)
|
|
||||||
-
|
|
||||||
- return url.encode("ascii") in self._cache_file_list
|
|
||||||
+ return self._get_isoreader().hasFile(url)
|
|
||||||
|
|
||||||
|
|
||||||
class DirectFetcher(_URLFetcher):
|
|
||||||
--
|
|
||||||
2.31.1
|
|
||||||
|
|
||||||
@ -1,31 +0,0 @@
|
|||||||
From 900413f1fccc3a4f64f66066d851e3a03b821156 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Cole Robinson <crobinso@redhat.com>
|
|
||||||
Date: Fri, 30 Jul 2021 10:45:07 -0400
|
|
||||||
Subject: [PATCH] urlfetcher: Silence xorisso stderr output
|
|
||||||
|
|
||||||
Signed-off-by: Cole Robinson <crobinso@redhat.com>
|
|
||||||
(cherry picked from commit 8754a59d9228caacf43bcb1af6ad307da7217b09)
|
|
||||||
|
|
||||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1973236
|
|
||||||
|
|
||||||
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
|
|
||||||
---
|
|
||||||
virtinst/install/urlfetcher.py | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/virtinst/install/urlfetcher.py b/virtinst/install/urlfetcher.py
|
|
||||||
index 838a206a..67a68002 100644
|
|
||||||
--- a/virtinst/install/urlfetcher.py
|
|
||||||
+++ b/virtinst/install/urlfetcher.py
|
|
||||||
@@ -44,7 +44,7 @@ class _XorrisoReader():
|
|
||||||
cmd = ["xorriso", "-osirrox", "on", "-indev", self._location,
|
|
||||||
"-extract", url, tmp.name]
|
|
||||||
log.debug("Extracting iso file: %s", cmd)
|
|
||||||
- subprocess.check_output(cmd)
|
|
||||||
+ subprocess.check_output(cmd, stderr=subprocess.DEVNULL)
|
|
||||||
return open(tmp.name, "rb").read()
|
|
||||||
|
|
||||||
def hasFile(self, url):
|
|
||||||
--
|
|
||||||
2.31.1
|
|
||||||
|
|
||||||
@ -1,256 +0,0 @@
|
|||||||
From 06f12e246c206311bc5d7fcbd24ac02df1e3fff9 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>
|
|
||||||
|
|
||||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1995131
|
|
||||||
|
|
||||||
(cherry picked from commit 965480e8bc85caf8a4f36b4a2f07963067b63cf6)
|
|
||||||
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 3534e0e2..092e087a 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
|
|
||||||
|
|
||||||
@ -1,164 +0,0 @@
|
|||||||
From fe341d97aee2666dc378f89de4a957bc8ae35a21 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>
|
|
||||||
|
|
||||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1995131
|
|
||||||
|
|
||||||
(cherry picked from commit 0e15cd51dfbdaa09f7d34ed1edce2f5416130361)
|
|
||||||
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
|
|
||||||
|
|
||||||
@ -1,77 +0,0 @@
|
|||||||
From d4a11d8f8a0b7990c9d349da2306c7f4103a43e0 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>
|
|
||||||
|
|
||||||
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1995131
|
|
||||||
|
|
||||||
(cherry picked from commit 9363e1e692bb0d01184ecc7991d61c95542f690b)
|
|
||||||
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
|
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
%global __python %{__python3}
|
%global __python %{__python3}
|
||||||
|
|
||||||
Name: virt-manager
|
Name: virt-manager
|
||||||
Version: 3.2.0
|
Version: 4.1.0
|
||||||
Release: 1
|
Release: 1
|
||||||
Summary: The manage virtual machines tool which via libvirt.
|
Summary: The manage virtual machines tool which via libvirt.
|
||||||
License: GPLv2+
|
License: GPLv2+
|
||||||
@ -9,24 +9,6 @@ BuildArch: noarch
|
|||||||
URL: https://virt-manager.org/
|
URL: https://virt-manager.org/
|
||||||
Source0: https://virt-manager.org/download/sources/virt-manager/virt-manager-%{version}.tar.gz
|
Source0: https://virt-manager.org/download/sources/virt-manager/virt-manager-%{version}.tar.gz
|
||||||
|
|
||||||
Patch1: 0001-virtinst-Fix-TOCTOU-in-domain-enumeration.patch
|
|
||||||
Patch2: virt-manager-installer-Prefer-xorrisofs-over-genisoimage-mkisofs.patch
|
|
||||||
Patch3: virt-manager-urlfetcher-Factor-out-ISOReader-class.patch
|
|
||||||
Patch4: virt-manager-urlfetcher-Add-xorriso-ISOReader-implementation.patch
|
|
||||||
Patch5: virt-manager-urlfetcher-Delete-the-isoinfo-ISOReader.patch
|
|
||||||
Patch6: virt-manager-urlfetcher-Silence-xorisso-stderr-output.patch
|
|
||||||
Patch7: virt-manager-virt-install-add-mediated-device.patch
|
|
||||||
Patch8: virt-manager-virt-xml-add-support-for-mediated-devices.patch
|
|
||||||
Patch9: virt-manager-hostdev-use-method-get_mdev_uuid.patch
|
|
||||||
Patch10: virt-manager-tests-verify-MDEV-support.patch
|
|
||||||
Patch11: virt-manager-virt-manager-enable-MDEV-support.patch
|
|
||||||
Patch12: virt-manager-cli-introduce-resource-fibrechannel.appid-option.patch
|
|
||||||
Patch13: virt-manager-Handle-new-nodedev-name-for-mediated-devices.patch
|
|
||||||
Patch14: virt-manager-cli-add-ioapic.driver-to-features.patch
|
|
||||||
Patch15: virt-manager-cli-filesystem-add-binary.sandbox.mode-and-source.socket.patch
|
|
||||||
Patch16: virt-manager-nodedev-Improve-error-with-unknown-address-strings.patch
|
|
||||||
Patch17: virt-manager-man-fix-default-value-for-filesystem-accessmode-option.patch
|
|
||||||
|
|
||||||
Requires: virt-manager-common = %{version}-%{release} python3-gobject gtk3 libvirt-glib >= 0.0.9
|
Requires: virt-manager-common = %{version}-%{release} python3-gobject gtk3 libvirt-glib >= 0.0.9
|
||||||
Requires: gtk-vnc2 dconf vte291 gtksourceview4
|
Requires: gtk-vnc2 dconf vte291 gtksourceview4
|
||||||
Recommends: (libvirt-daemon-kvm or libvirt-daemon-qemu) libvirt-daemon-config-network
|
Recommends: (libvirt-daemon-kvm or libvirt-daemon-qemu) libvirt-daemon-config-network
|
||||||
@ -59,7 +41,6 @@ existing virtual machine) and virt-install (build and install new VMs).
|
|||||||
|
|
||||||
%package help
|
%package help
|
||||||
Summary: Documentation for user of virt-manager.
|
Summary: Documentation for user of virt-manager.
|
||||||
Requires: virt-manager = %{version}-%{release}
|
|
||||||
|
|
||||||
%description help
|
%description help
|
||||||
Documentation for user of virt-manager.
|
Documentation for user of virt-manager.
|
||||||
@ -77,6 +58,10 @@ for f in $(find %{buildroot} -type f -executable -print); do
|
|||||||
sed -i "1 s|^#!/usr/bin/env python3|#!%{__python3}|" $f || :
|
sed -i "1 s|^#!/usr/bin/env python3|#!%{__python3}|" $f || :
|
||||||
done
|
done
|
||||||
|
|
||||||
|
%if 0%{?py_byte_compile:1}
|
||||||
|
%py_byte_compile %{__python3} %{buildroot}%{_datadir}/virt-manager/
|
||||||
|
%endif
|
||||||
|
|
||||||
%files
|
%files
|
||||||
%doc README.md COPYING NEWS.md
|
%doc README.md COPYING NEWS.md
|
||||||
%{_bindir}/virt-manager
|
%{_bindir}/virt-manager
|
||||||
@ -93,13 +78,16 @@ done
|
|||||||
|
|
||||||
%files -n virt-install
|
%files -n virt-install
|
||||||
%{_datadir}/bash-completion/completions/{virt-install,virt-clone,virt-convert,virt-xml}
|
%{_datadir}/bash-completion/completions/{virt-install,virt-clone,virt-convert,virt-xml}
|
||||||
%{_bindir}/{virt-install,virt-clone,virt-convert,virt-xml}
|
%{_bindir}/{virt-install,virt-clone,virt-xml}
|
||||||
|
|
||||||
%files help
|
%files help
|
||||||
%{_mandir}/man1/virt-manager.1*
|
%{_mandir}/man1/virt-manager.1*
|
||||||
%{_mandir}/man1/{virt-install.1*,virt-clone.1*,virt-convert.1*,virt-xml.1*}
|
%{_mandir}/man1/{virt-install.1*,virt-clone.1*,virt-xml.1*}
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Sep 08 2022 wangdi <wangdi@kylinos.cn> - 4.1.0-1
|
||||||
|
- Upgrade to 4.1.0
|
||||||
|
|
||||||
* Mon May 30 2022 jiangxinyu <jiangxinyu@kylinos.cn> - 3.2.0-1
|
* Mon May 30 2022 jiangxinyu <jiangxinyu@kylinos.cn> - 3.2.0-1
|
||||||
- Upgrade to 3.2.0
|
- Upgrade to 3.2.0
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user