Compare commits

3 Commits
1.1 ... main

42 changed files with 1571 additions and 70 deletions

View File

@@ -0,0 +1,32 @@
Subject: virtManager: domain: fix indentation
From: Pavel Hrdina phrdina@redhat.com Wed Jan 29 10:50:03 2025 +0100
Date: Wed Jan 29 10:50:03 2025 +0100:
Git: 5ddd3456a0ca9836a98fc6ca4f0b2eaab268bf47
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
diff --git a/virtManager/object/domain.py b/virtManager/object/domain.py
index 5aade01d8..51aae4d8c 100644
--- a/virtManager/object/domain.py
+++ b/virtManager/object/domain.py
@@ -1157,14 +1157,13 @@ class vmmDomain(vmmLibvirtObject):
return self._snapshot_list[:]
def get_current_snapshot(self):
+ if self._backend.hasCurrentSnapshot(0):
+ rawsnap = self._backend.snapshotCurrent(0)
+ obj = vmmDomainSnapshot(self.conn, rawsnap)
+ obj.init_libvirt_state()
+ return obj
- if self._backend.hasCurrentSnapshot(0):
- rawsnap = self._backend.snapshotCurrent(0)
- obj = vmmDomainSnapshot(self.conn, rawsnap)
- obj.init_libvirt_state()
- return obj
-
- return None
+ return None
@vmmLibvirtObject.lifecycle_action
def revert_to_snapshot(self, snap):

View File

@@ -0,0 +1,88 @@
Subject: cli: Add --memdev target.dynamicMemslots support for virtio-mem
From: Lin Ma lma@suse.de Sun Jan 5 17:46:04 2025 +0800
Date: Wed Jan 29 10:25:37 2025 +0100:
Git: 8564ace73a9a2b596c9206d16833904be993c6c2
Libvirt supports setting dynamicMemslots attribute for virtio-mem since
v10.1.0, Let's add it into virt-install. Eg:
virt-install \
......
--vcpu 2 \
--cpu cell0.cpus=0,cell0.memory=4194304,\
cell1.cpus=1,cell1.memory=4194304 \
--memory maxMemory=65536,maxMemory.slots=8 \
--memdev model=virtio-mem,\
target.node=0,\
target.block=2048,\
target.size=8192,\
target.dynamicMemslots=yes \
......
It results in the following domain XML snippet:
<memory model='virtio-mem'>
<target dynamicMemslots='yes'>
......
</memory>
Signed-off-by: Lin Ma <lma@suse.de>
diff --git a/tests/data/cli/compare/virt-install-memory-hotplug.xml b/tests/data/cli/compare/virt-install-memory-hotplug.xml
index 61e39ee02..37fa23328 100644
--- a/tests/data/cli/compare/virt-install-memory-hotplug.xml
+++ b/tests/data/cli/compare/virt-install-memory-hotplug.xml
@@ -123,7 +123,7 @@
</target>
</memory>
<memory model="virtio-mem">
- <target>
+ <target dynamicMemslots="yes">
<size>524288</size>
<node>0</node>
<block>2048</block>
@@ -267,7 +267,7 @@
</target>
</memory>
<memory model="virtio-mem">
- <target>
+ <target dynamicMemslots="yes">
<size>524288</size>
<node>0</node>
<block>2048</block>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 51a1883c4..7f3ba0c3a 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -928,7 +928,7 @@ c.add_compare("--pxe "
"address.type=dimm,address.base=0x100000000,address.slot=1,"
"source.pmem=on,source.alignsize=2048,target.readonly=on "
-"--memdev virtio-mem,target_node=0,target.block=2048,"
+"--memdev virtio-mem,target_node=0,target.block=2048,target.dynamicMemslots=yes,"
"target_size=512,target.requested=524288,target.address_base=0x180000000 "
"--memdev virtio-pmem,source.path=/tmp/virtio_pmem,"
diff --git a/virtinst/cli.py b/virtinst/cli.py
index 43d45a508..cecf33be1 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -4502,6 +4502,7 @@ class ParserMemdev(VirtCLIParser):
cls.add_arg("source.pmem", "source.pmem", is_onoff=True)
cls.add_arg("source.alignsize", "source.alignsize",
cb=cls.set_target_size)
+ cls.add_arg("target.dynamicMemslots", "target.dynamicMemslots")
########################
diff --git a/virtinst/devices/memory.py b/virtinst/devices/memory.py
index edc274e00..c74d7ab9d 100644
--- a/virtinst/devices/memory.py
+++ b/virtinst/devices/memory.py
@@ -20,6 +20,7 @@ class _DeviceMemoryTarget(XMLBuilder):
requested = XMLProperty("./requested", is_int=True)
current = XMLProperty("./current", is_int=True)
address_base = XMLProperty("./address/@base")
+ dynamicMemslots = XMLProperty("./@dynamicMemslots", is_yesno=True)
class _DeviceMemorySource(XMLBuilder):

View File

@@ -0,0 +1,90 @@
Subject: cli: add target.memReserve for pci-bridge and pcie-root-port controllers
From: Lin Ma lma@suse.de Sun Jan 5 17:47:20 2025 +0800
Date: Wed Jan 29 10:25:37 2025 +0100:
Git: 79c333e3643cdef3a24672f4b6f0f34d5aa178fd
Libvirt(since v10.3.0) supports setting memReserve attribute to pci-bridge
and pcie-root-port, Let's add it into virt-install. Eg:
virt-install \
......
--controller pci,index=0,model=pcie-root \
--controller pci,index=1,model=pcie-root-port,target.memReserve=8196 \
--controller pci,index=2,model=dmi-to-pci-bridge \
--controller pci,index=3,model=pci-bridge,target.memReserve=8196 \
......
It results in the following domain XML snippet:
<controller type='pci' index='0' model='pcie-root'>
<alias name='pcie.0'/>
</controller>
<controller type='pci' index='1' model='pcie-root-port'>
<model name='pcie-root-port'/>
<target chassis='1' port='0x10' memReserve='8196'/>
<alias name='pci.1'/>
<address type='pci' ....../>
</controller>
<controller type='pci' index='2' model='dmi-to-pci-bridge'>
<model name='i82801b11-bridge'/>
<alias name='pci.2'/>
<address type='pci' ....../>
</controller>
<controller type='pci' index='3' model='pci-bridge'>
<model name='pci-bridge'/>
<target chassisNr='3' memReserve='8196'/>
<alias name='pci.3'/>
<address type='pci' ....../>
</controller>
Signed-off-by: Lin Ma <lma@suse.de>
diff --git a/tests/data/cli/compare/virt-install-many-devices.xml b/tests/data/cli/compare/virt-install-many-devices.xml
index 251dc1cb3..d91e4c849 100644
--- a/tests/data/cli/compare/virt-install-many-devices.xml
+++ b/tests/data/cli/compare/virt-install-many-devices.xml
@@ -483,7 +483,7 @@
<target index="1"/>
</controller>
<controller type="pci" index="2" model="pci-bridge">
- <target chassisNr="1"/>
+ <target chassisNr="1" memReserve="8196"/>
</controller>
<controller type="pci" index="3" model="pci-expander-bus">
<target busNr="252">
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 7f3ba0c3a..4a980dbac 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -685,7 +685,7 @@ source.reservations.managed=no,source.reservations.source.type=unix,source.reser
--controller xenbus,maxGrantFrames=64
--controller pci,index=0,model=pcie-root-port,target.chassis=1,target.port=1,target.hotplug=off
--controller pci,index=1,model=pci-root,target.index=1
---controller pci,index=2,model=pci-bridge,target.chassisNr=1
+--controller pci,index=2,model=pci-bridge,target.chassisNr=1,target.memReserve=8196
--controller pci,index=3,model=pci-expander-bus,target.busNr=252,target.node=1
--controller usb3
--controller scsi,model=virtio-scsi
diff --git a/virtinst/cli.py b/virtinst/cli.py
index cecf33be1..33235bf37 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -4199,6 +4199,7 @@ class ParserController(VirtCLIParser):
cls.add_arg("target.busNr", "target_busNr")
cls.add_arg("target.index", "target_index")
cls.add_arg("target.node", "target_node")
+ cls.add_arg("target.memReserve", "target_memReserve")
cls.add_arg("address", None, lookup_cb=None, cb=cls.set_address_cb)
cls.add_arg("num_pcie_root_ports", None, lookup_cb=None, cb=cls.noset_cb)
diff --git a/virtinst/devices/controller.py b/virtinst/devices/controller.py
index 57c94fe48..c45b8e08d 100644
--- a/virtinst/devices/controller.py
+++ b/virtinst/devices/controller.py
@@ -85,6 +85,7 @@ class DeviceController(Device):
target_busNr = XMLProperty("./target/@busNr", is_int=True)
target_index = XMLProperty("./target/@index", is_int=True)
target_node = XMLProperty("./target/node", is_int=True)
+ target_memReserve = XMLProperty("./target/@memReserve", is_int=True)
def _get_attached_disk_devices(self, guest):
ret = []

View File

@@ -0,0 +1,73 @@
Subject: cli: Add --disk driver.queue_size support
From: Lin Ma lma@suse.de Sun Jan 5 17:49:34 2025 +0800
Date: Wed Jan 29 10:25:37 2025 +0100:
Git: 36d00e0e79f3d845522201c4a353d5a529af82a7
Eg:
virt-install \
......
--disk /tmp/disk0.qcow2,size=10,driver.type=qcow2,\
driver.queues=4,driver.queue_size=256 \
......
It results in the following domain XML snippet:
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2' queues='4' queue_size='256'/>
<source file='/tmp/disk0.qcow2' index='2'/>
<backingStore/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>
</disk>
Signed-off-by: Lin Ma <lma@suse.de>
diff --git a/tests/data/cli/compare/virt-install-many-devices.xml b/tests/data/cli/compare/virt-install-many-devices.xml
index d91e4c849..eb26d316b 100644
--- a/tests/data/cli/compare/virt-install-many-devices.xml
+++ b/tests/data/cli/compare/virt-install-many-devices.xml
@@ -231,7 +231,7 @@
<devices>
<emulator>/new/emu</emulator>
<disk type="block" device="disk">
- <driver name="qemu" type="raw" cache="writeback" discard="unmap" io="threads" iothread="3" queues="8"/>
+ <driver name="qemu" type="raw" cache="writeback" discard="unmap" io="threads" iothread="3" queues="8" queue_size="256"/>
<source dev="/pool-dir/UPPER"/>
<target dev="vda" bus="virtio"/>
<serial>WD-WMAP9A966149</serial>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 4a980dbac..071a17bee 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -610,7 +610,7 @@ msrs.unknown=ignore
--sysinfo bios.vendor="Acme LLC",bios.version=1.2.3,bios.date=01/01/1970,bios.release=10.22,system.manufacturer="Acme Inc.",system.product=Computer,system.version=3.2.1,system.serial=123456789,system.uuid=00000000-1111-2222-3333-444444444444,system.sku=abc-123,system.family=Server,baseBoard.manufacturer="Acme Corp.",baseBoard.product=Motherboard,baseBoard.version=A01,baseBoard.serial=1234-5678,baseBoard.asset=Tag,baseBoard.location=Chassis
---disk type=block,source.dev=/pool-dir/UPPER,cache=writeback,io=threads,perms=sh,serial=WD-WMAP9A966149,wwn=123456789abcdefa,boot_order=2,driver.iothread=3,driver.queues=8
+--disk type=block,source.dev=/pool-dir/UPPER,cache=writeback,io=threads,perms=sh,serial=WD-WMAP9A966149,wwn=123456789abcdefa,boot_order=2,driver.iothread=3,driver.queues=8,driver.queue_size=256
--disk source.file=%(NEWIMG1)s,sparse=false,size=.001,perms=ro,error_policy=enospace,detect_zeroes=unmap,address.type=drive,address.controller=0,address.target=2,address.unit=0
--disk device=cdrom,bus=sata,read_bytes_sec=1,read_iops_sec=2,write_bytes_sec=5,write_iops_sec=6,driver.copy_on_read=on,geometry.cyls=16383,geometry.heads=16,geometry.secs=63,geometry.trans=lba,discard=ignore
--disk size=1
diff --git a/virtinst/cli.py b/virtinst/cli.py
index 33235bf37..7df2e365f 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -3778,6 +3778,7 @@ class ParserDisk(VirtCLIParser):
cls.add_arg("driver.queues", "driver_queues")
cls.add_arg("driver.error_policy", "error_policy")
cls.add_arg("driver.discard_no_unref", "driver_discard_no_unref", is_onoff=True)
+ cls.add_arg("driver.queue_size", "driver_queue_size")
cls.add_arg("driver.metadata_cache.max_size",
"driver_metadata_cache_max_size")
diff --git a/virtinst/devices/disk.py b/virtinst/devices/disk.py
index 1f9358b84..9370fcd87 100644
--- a/virtinst/devices/disk.py
+++ b/virtinst/devices/disk.py
@@ -509,6 +509,7 @@ class DeviceDisk(Device):
driver_iothread = XMLProperty("./driver/@iothread", is_int=True)
driver_queues = XMLProperty("./driver/@queues", is_int=True)
driver_discard_no_unref = XMLProperty("./driver/@discard_no_unref", is_onoff=True)
+ driver_queue_size = XMLProperty("./driver/@queue_size", is_int=True)
driver_metadata_cache_max_size = XMLProperty(
"./driver/metadata_cache/max_size", is_int=True)

View File

@@ -0,0 +1,89 @@
Subject: cli: Add 'poll' settings for iothread
From: Lin Ma lma@suse.de Sun Jan 5 17:50:42 2025 +0800
Date: Wed Jan 29 10:25:37 2025 +0100:
Git: a7c455f4600c6a35820c435d34f05b8b4a513611
Since libvirt v9.4.0, It introduces 'poll' settings in domain XML to
override the hypervisor-default interval of polling for iothread.
Let's add it into virt-install.
Eg:
virt-install \
...... \
--iothreads iothreads=2,\
iothreadids.iothread0.id=1,\
iothreadids.iothread1.id=2,\
iothreadids.iothread1.poll.max=123,\
iothreadids.iothread1.poll.grow=456,\
iothreadids.iothread1.poll.shrink=789
It results in the following domain XML snippet:
<iothreads>2</iothreads>
<iothreadids>
<iothread id='1'/>
<iothread id='2'>
<poll max='123' grow='456' shrink='789'/>
</iothread>
</iothreadids>
Signed-off-by: Lin Ma <lma@suse.de>
diff --git a/tests/data/cli/compare/virt-install-many-devices.xml b/tests/data/cli/compare/virt-install-many-devices.xml
index eb26d316b..a841a380f 100644
--- a/tests/data/cli/compare/virt-install-many-devices.xml
+++ b/tests/data/cli/compare/virt-install-many-devices.xml
@@ -12,7 +12,9 @@
<iothreads>5</iothreads>
<iothreadids>
<iothread id="1"/>
- <iothread id="2" thread_pool_min="8" thread_pool_max="16"/>
+ <iothread id="2" thread_pool_min="8" thread_pool_max="16">
+ <poll max="123" grow="456" shrink="789"/>
+ </iothread>
</iothreadids>
<defaultiothread thread_pool_min="4" thread_pool_max="32"/>
<memory>65536</memory>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 071a17bee..7f984cf1b 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -557,7 +557,7 @@ memorytune0.vcpus=0-3,memorytune0.node0.id=0,memorytune0.node0.bandwidth=60
--memorybacking size=1,unit='G',nodeset=0,1,nosharepages=yes,locked=yes,discard=yes,allocation.mode=immediate,access_mode=shared,source_type=file,hugepages.page.size=12,hugepages.page1.size=1234,hugepages.page1.unit=MB,hugepages.page1.nodeset=2,allocation.threads=8
---iothreads iothreads=5,iothreadids.iothread0.id=1,iothreadids.iothread1.id=2,iothreadids.iothread1.thread_pool_min=8,iothreadids.iothread1.thread_pool_max=16,defaultiothread.thread_pool_min=4,defaultiothread.thread_pool_max=32
+--iothreads iothreads=5,iothreadids.iothread0.id=1,iothreadids.iothread1.id=2,iothreadids.iothread1.thread_pool_min=8,iothreadids.iothread1.thread_pool_max=16,iothreadids.iothread1.poll.max=123,iothreadids.iothread1.poll.grow=456,iothreadids.iothread1.poll.shrink=789,defaultiothread.thread_pool_min=4,defaultiothread.thread_pool_max=32
--metadata title=my-title,description=my-description,uuid=00000000-1111-2222-3333-444444444444,genid=e9392370-2917-565e-692b-d057f46512d6,genid_enable=yes
diff --git a/virtinst/cli.py b/virtinst/cli.py
index 7df2e365f..fa6145e8c 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -2693,6 +2693,12 @@ class ParserIOThreads(VirtCLIParser):
find_inst_cb=cls.defaultiothread_find_inst_cb)
cls.add_arg("defaultiothread.thread_pool_max", "thread_pool_max",
find_inst_cb=cls.defaultiothread_find_inst_cb)
+ cls.add_arg("iothreadids.iothread[0-9]*.poll.max",
+ "max", find_inst_cb=cls.iothreads_find_inst_cb)
+ cls.add_arg("iothreadids.iothread[0-9]*.poll.grow",
+ "grow", find_inst_cb=cls.iothreads_find_inst_cb)
+ cls.add_arg("iothreadids.iothread[0-9]*.poll.shrink",
+ "shrink", find_inst_cb=cls.iothreads_find_inst_cb)
###################
diff --git a/virtinst/guest.py b/virtinst/guest.py
index 567359073..ae76a1287 100644
--- a/virtinst/guest.py
+++ b/virtinst/guest.py
@@ -72,6 +72,9 @@ class _IOThreadID(XMLBuilder):
id = XMLProperty("./@id", is_int=True)
thread_pool_min = XMLProperty("./@thread_pool_min", is_int=True)
thread_pool_max = XMLProperty("./@thread_pool_max", is_int=True)
+ max = XMLProperty("./poll/@max", is_int=True)
+ grow = XMLProperty("./poll/@grow", is_int=True)
+ shrink = XMLProperty("./poll/@shrink", is_int=True)
class _DefaultIOThread(XMLBuilder):

View File

@@ -0,0 +1,34 @@
Subject: test_cli: Fix a pycodestyle E261 issue
From: Lin Ma lma@suse.de Mon Dec 30 19:38:49 2024 +0800
Date: Wed Jan 29 10:48:57 2025 +0100:
Git: 006ce4157665fd183ddb4a933a2c94de217302d4
root@localhost:~ # meson test -C build
==================================== 1/3 =========================
test: pycodestyle
start time: 14:08:14
duration: 5.80s
result: exit status 1
command: MSAN_OPTIONS=halt_on_error=1:abort_on_error=1:...... \
/usr/bin/pycodestyle \
--config setup.cfg --format pylint tests virtinst virtManager
----------------------------------- stdout -----------------------------------
tests/test_cli.py:1157: [E261] at least two spaces before inline comment
......
Signed-off-by: Lin Ma <lma@suse.de>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 7f984cf1b..5fc0a1c2f 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -1153,7 +1153,7 @@ c.add_compare("--os-variant http://fedoraproject.org/fedora/20 --disk %(EXISTIMG
c.add_compare("--cdrom %(EXISTIMG2)s --file %(EXISTIMG1)s --os-variant win2k3 --sound --controller usb", "kvm-win2k3-cdrom") # HVM windows install with disk
c.add_compare("--os-variant name=ubuntusaucy --nodisks --boot cdrom --virt-type qemu --cpu Penryn --input tablet --boot uefi --graphics vnc", "qemu-plain") # plain qemu
c.add_compare("--os-variant fedora20 --nodisks --boot network --graphics default --arch i686 --rng none", "qemu-32-on-64", prerun_check=has_old_osinfo) # 32 on 64
-c.add_compare("--osinfo linux2020 --pxe --cpu maximum", "linux2020", prerun_check=no_osinfo_linux2020_virtio) # also --cpu maximum
+c.add_compare("--osinfo linux2020 --pxe --cpu maximum", "linux2020", prerun_check=no_osinfo_linux2020_virtio) # also --cpu maximum
c.add_compare("--check disk_size=off --osinfo win11 --cdrom %(EXISTIMG1)s", "win11", prerun_check=no_osinfo_win11)
c.add_compare("--check disk_size=off --osinfo win11 --cdrom %(EXISTIMG1)s --boot uefi=off", "win11-no-uefi")
c.add_compare("--osinfo generic --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

View File

@@ -0,0 +1,17 @@
Subject: .gitignore: Ignore coverage.xml
From: Lin Ma lma@suse.de Mon Dec 30 19:41:07 2024 +0800
Date: Wed Jan 29 10:48:57 2025 +0100:
Git: 926385994486fde63dc092814ab793c53ed3f275
Signed-off-by: Lin Ma <lma@suse.de>
diff --git a/.gitignore b/.gitignore
index 89ad8a166..d303c1afb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,5 @@
/.coverage
/data/gschemas.compiled
+
+/coverage.xml

View File

@@ -0,0 +1,109 @@
Subject: cli: Add --tpm backend.profile.{source,removeDisabled} support
From: Lin Ma lma@suse.de Mon Dec 30 19:44:58 2024 +0800
Date: Wed Jan 29 10:48:57 2025 +0100:
Git: f278c89b49bc4d1e46c8149fb0f1674d801b51c5
Swtpm since v0.10 supports to configure a TPM2 with a profile from file.
eg:
root@localhost:~ # cat /etc/swtpm/profiles/mytest.json
{
"Name": "custom:test",
"Algorithms":"rsa,rsa-min-size=1024,......"
}
root@localhost:~ # swtpm_setup --tpm2 --print-profiles | jq
{
"local": [
{
"Name": "mytest",
"Algorithms": "rsa,rsa-min-size=1024,......"
}
],
"builtin": [
{
"Name": "default-v1",
"StateFormatLevel": 7,
"Commands": "......",
"Algorithms": "rsa,rsa-min-size=1024,......",
"Description": "......"
},
{
"Name": "null",
"StateFormatLevel": 1,
"Commands": "......",
"Algorithms": "rsa,rsa-min-size=1024,......",
"Description": "......"
},
{
"Name": "custom",
"StateFormatLevel": 2,
"Commands": "......",
"Algorithms": "rsa,rsa-min-size=1024,......",
"Description": "......"
}
]
}
Libvirt supports it since v10.10.0
Let's add this feature into virt-install, eg:
root@localhost:~ # virt-install \
......\
--tpm model=tpm-tis,backend.version=2.0,\
backend.profile.source=local:mytest,backend.profile.removeDisabled=check
Signed-off-by: Lin Ma <lma@suse.de>
diff --git a/tests/data/cli/compare/virt-install-many-devices.xml b/tests/data/cli/compare/virt-install-many-devices.xml
index a841a380f..e34b487c3 100644
--- a/tests/data/cli/compare/virt-install-many-devices.xml
+++ b/tests/data/cli/compare/virt-install-many-devices.xml
@@ -791,6 +791,7 @@
<tpm model="tpm-tis">
<backend type="emulator" version="2.0" debug="3">
<source type="dir" path="/some/dir"/>
+ <profile source="local:mytest" removeDisabled="check"/>
</backend>
</tpm>
<graphics type="sdl" display=":3.4" xauth="/tmp/.Xauthority">
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 5fc0a1c2f..4e0b2d8c0 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -800,7 +800,7 @@ source.reservations.managed=no,source.reservations.source.type=unix,source.reser
--tpm passthrough,model=tpm-crb,path=/dev/tpm0,backend.encryption.secret=11111111-2222-3333-4444-5555555555,backend.persistent_state=yes,backend.active_pcr_banks.sha1=on,backend.active_pcr_banks.sha256=yes,backend.active_pcr_banks.sha384=yes,backend.active_pcr_banks.sha512=yes,version=2.0
---tpm model=tpm-tis,backend.type=emulator,backend.version=2.0,backend.debug=3,backend.source.type=dir,backend.source.path=/some/dir
+--tpm model=tpm-tis,backend.type=emulator,backend.version=2.0,backend.debug=3,backend.source.type=dir,backend.source.path=/some/dir,backend.profile.source=local:mytest,backend.profile.removeDisabled=check
--watchdog ib700,action=pause
diff --git a/virtinst/cli.py b/virtinst/cli.py
index fa6145e8c..d8926cdad 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -4370,6 +4370,8 @@ class ParserTPM(VirtCLIParser):
cls.add_arg("backend.debug", "debug")
cls.add_arg("backend.source.type", "source_type")
cls.add_arg("backend.source.path", "source_path")
+ cls.add_arg("backend.profile.source", "profile_source")
+ cls.add_arg("backend.profile.removeDisabled", "profile_removeDisabled")
cls.add_arg("backend.active_pcr_banks.sha1",
"active_pcr_banks.sha1", is_onoff=True)
diff --git a/virtinst/devices/tpm.py b/virtinst/devices/tpm.py
index 8b4023502..79ae224e8 100644
--- a/virtinst/devices/tpm.py
+++ b/virtinst/devices/tpm.py
@@ -44,6 +44,8 @@ class DeviceTpm(Device):
debug = XMLProperty("./backend/@debug")
source_type = XMLProperty("./backend/source/@type")
source_path = XMLProperty("./backend/source/@path")
+ profile_source = XMLProperty("./backend/profile/@source")
+ profile_removeDisabled = XMLProperty("./backend/profile/@removeDisabled")
active_pcr_banks = XMLChildProperty(_ActivePCRBanks, is_single=True,
relative_xpath="./backend")

View File

@@ -0,0 +1,58 @@
Subject: cli: Add nvram.templateFormat to indicate template format
From: Lin Ma lma@suse.de Mon Dec 30 19:48:04 2024 +0800
Date: Wed Jan 29 10:48:57 2025 +0100:
Git: dc89a02c75ca7d178c5332fc495a1fceb3732d76
Signed-off-by: Lin Ma <lma@suse.de>
diff --git a/tests/data/cli/compare/virt-install-many-devices.xml b/tests/data/cli/compare/virt-install-many-devices.xml
index e34b487c3..76e044731 100644
--- a/tests/data/cli/compare/virt-install-many-devices.xml
+++ b/tests/data/cli/compare/virt-install-many-devices.xml
@@ -108,6 +108,8 @@
<feature enabled="yes" name="secure-boot"/>
<feature enabled="no" name="enrolled-keys"/>
</firmware>
+ <loader type="pflash">CODE.fd</loader>
+ <nvram template="VARS.fd" templateFormat="raw"/>
<initarg>foo=bar</initarg>
<initarg>baz=woo</initarg>
<initenv name="MYENV">some value</initenv>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 4e0b2d8c0..8bfccea18 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -500,7 +500,8 @@ bios.useserial=no,bios.rebootTimeout=60,cmdline=root=/foo,\
bootmenu.enable=yes,bootmenu.timeout=5000,\
acpi.table=/path/to/slic.dat,acpi.table.type=slic,\
initenv0.name=MYENV,initenv0='some value',initenv1.name=FOO,initenv1=bar,\
-initdir=/my/custom/cwd,inituser=tester,initgroup=1000
+initdir=/my/custom/cwd,inituser=tester,initgroup=1000,\
+loader_type=pflash,loader=CODE.fd,nvram.template=VARS.fd,nvram.templateFormat=raw
--vcpus vcpus=9,vcpu.placement=static,\
diff --git a/virtinst/cli.py b/virtinst/cli.py
index d8926cdad..6f633b933 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -2950,6 +2950,7 @@ class ParserBoot(VirtCLIParser):
cls.add_arg("bios.useserial", "bios_useserial", is_onoff=True)
cls.add_arg("bios.rebootTimeout", "bios_rebootTimeout")
cls.add_arg("smbios.mode", "smbios_mode")
+ cls.add_arg("nvram.templateFormat", "nvram_templateFormat")
# Direct kernel boot options
cls.add_arg("kernel", "kernel")
diff --git a/virtinst/domain/os.py b/virtinst/domain/os.py
index 9afcbb910..45d913450 100644
--- a/virtinst/domain/os.py
+++ b/virtinst/domain/os.py
@@ -126,6 +126,7 @@ class DomainOs(XMLBuilder):
bios_useserial = XMLProperty("./bios/@useserial", is_yesno=True)
bios_rebootTimeout = XMLProperty("./bios/@rebootTimeout", is_int=True)
smbios_mode = XMLProperty("./smbios/@mode")
+ nvram_templateFormat = XMLProperty("./nvram/@templateFormat")
# Host bootloader options
# Since the elements for a host bootloader are actually directly under

View File

@@ -0,0 +1,55 @@
Subject: cli: Add --features hyperv.xmm_input.state=on/off
From: Lin Ma lma@suse.de Mon Dec 30 19:49:47 2024 +0800
Date: Wed Jan 29 10:48:57 2025 +0100:
Git: 5617330513e951643d69afd4c0cfbd230f1d2983
Signed-off-by: Lin Ma <lma@suse.de>
diff --git a/tests/data/cli/compare/virt-install-many-devices.xml b/tests/data/cli/compare/virt-install-many-devices.xml
index 76e044731..eeb964620 100644
--- a/tests/data/cli/compare/virt-install-many-devices.xml
+++ b/tests/data/cli/compare/virt-install-many-devices.xml
@@ -154,6 +154,7 @@
<ipi state="on"/>
<evmcs state="on"/>
<avic state="on"/>
+ <xmm_input state="on"/>
</hyperv>
<vmport state="off"/>
<kvm>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 8bfccea18..76768dfe0 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -581,6 +581,7 @@ hyperv.tlbflush.state=on,\
hyperv.ipi.state=on,\
hyperv.evmcs.state=on,\
hyperv.avic.state=on,\
+hyperv.xmm_input.state=on,\
kvm.pv-ipi.state=on,\
msrs.unknown=ignore
diff --git a/virtinst/cli.py b/virtinst/cli.py
index 6f633b933..add19ac09 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -3094,6 +3094,7 @@ class ParserFeatures(VirtCLIParser):
cls.add_arg("hyperv.ipi.state", "hyperv_ipi", is_onoff=True)
cls.add_arg("hyperv.evmcs.state", "hyperv_evmcs", is_onoff=True)
cls.add_arg("hyperv.avic.state", "hyperv_avic", is_onoff=True)
+ cls.add_arg("hyperv.xmm_input.state", "hyperv_xmm_input", is_onoff=True)
cls.add_arg("vmport.state", "vmport", is_onoff=True)
cls.add_arg("kvm.hidden.state", "kvm_hidden", is_onoff=True)
diff --git a/virtinst/domain/features.py b/virtinst/domain/features.py
index 93a576360..ae3b23d98 100644
--- a/virtinst/domain/features.py
+++ b/virtinst/domain/features.py
@@ -43,6 +43,7 @@ class DomainFeatures(XMLBuilder):
hyperv_ipi = XMLProperty("./hyperv/ipi/@state", is_onoff=True)
hyperv_evmcs = XMLProperty("./hyperv/evmcs/@state", is_onoff=True)
hyperv_avic = XMLProperty("./hyperv/avic/@state", is_onoff=True)
+ hyperv_xmm_input = XMLProperty("./hyperv/xmm_input/@state", is_onoff=True)
vmport = XMLProperty("./vmport/@state", is_onoff=True)
kvm_hidden = XMLProperty("./kvm/hidden/@state", is_onoff=True)

View File

@@ -0,0 +1,55 @@
Subject: cli: Add --features hyperv.emsr_bitmap.state=on/off
From: Lin Ma lma@suse.de Mon Dec 30 19:50:21 2024 +0800
Date: Wed Jan 29 10:48:57 2025 +0100:
Git: 1f43c0d1d9d7128d24f5b6628b5f01e920a9f1fa
Signed-off-by: Lin Ma <lma@suse.de>
diff --git a/tests/data/cli/compare/virt-install-many-devices.xml b/tests/data/cli/compare/virt-install-many-devices.xml
index eeb964620..cea5b3890 100644
--- a/tests/data/cli/compare/virt-install-many-devices.xml
+++ b/tests/data/cli/compare/virt-install-many-devices.xml
@@ -155,6 +155,7 @@
<evmcs state="on"/>
<avic state="on"/>
<xmm_input state="on"/>
+ <emsr_bitmap state="on"/>
</hyperv>
<vmport state="off"/>
<kvm>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 76768dfe0..69f48df3a 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -582,6 +582,7 @@ hyperv.ipi.state=on,\
hyperv.evmcs.state=on,\
hyperv.avic.state=on,\
hyperv.xmm_input.state=on,\
+hyperv.emsr_bitmap.state=on,\
kvm.pv-ipi.state=on,\
msrs.unknown=ignore
diff --git a/virtinst/cli.py b/virtinst/cli.py
index add19ac09..dcd2b8c8b 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -3095,6 +3095,7 @@ class ParserFeatures(VirtCLIParser):
cls.add_arg("hyperv.evmcs.state", "hyperv_evmcs", is_onoff=True)
cls.add_arg("hyperv.avic.state", "hyperv_avic", is_onoff=True)
cls.add_arg("hyperv.xmm_input.state", "hyperv_xmm_input", is_onoff=True)
+ cls.add_arg("hyperv.emsr_bitmap.state", "hyperv_emsr_bitmap", is_onoff=True)
cls.add_arg("vmport.state", "vmport", is_onoff=True)
cls.add_arg("kvm.hidden.state", "kvm_hidden", is_onoff=True)
diff --git a/virtinst/domain/features.py b/virtinst/domain/features.py
index ae3b23d98..cba3b710d 100644
--- a/virtinst/domain/features.py
+++ b/virtinst/domain/features.py
@@ -44,6 +44,7 @@ class DomainFeatures(XMLBuilder):
hyperv_evmcs = XMLProperty("./hyperv/evmcs/@state", is_onoff=True)
hyperv_avic = XMLProperty("./hyperv/avic/@state", is_onoff=True)
hyperv_xmm_input = XMLProperty("./hyperv/xmm_input/@state", is_onoff=True)
+ hyperv_emsr_bitmap = XMLProperty("./hyperv/emsr_bitmap/@state", is_onoff=True)
vmport = XMLProperty("./vmport/@state", is_onoff=True)
kvm_hidden = XMLProperty("./kvm/hidden/@state", is_onoff=True)

View File

@@ -0,0 +1,58 @@
Subject: cli: Add --features hyperv.tlbflush.direct.state=on/off
From: Lin Ma lma@suse.de Mon Dec 30 19:50:40 2024 +0800
Date: Wed Jan 29 10:48:57 2025 +0100:
Git: 5f2a2dbd0a2ccecd76710067854c07c1ebd5ea09
Signed-off-by: Lin Ma <lma@suse.de>
diff --git a/tests/data/cli/compare/virt-install-many-devices.xml b/tests/data/cli/compare/virt-install-many-devices.xml
index cea5b3890..996873a8a 100644
--- a/tests/data/cli/compare/virt-install-many-devices.xml
+++ b/tests/data/cli/compare/virt-install-many-devices.xml
@@ -150,7 +150,9 @@
<reset state="on"/>
<frequencies state="on"/>
<reenlightenment state="on"/>
- <tlbflush state="on"/>
+ <tlbflush state="on">
+ <direct state="on"/>
+ </tlbflush>
<ipi state="on"/>
<evmcs state="on"/>
<avic state="on"/>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 69f48df3a..18a76612a 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -578,6 +578,7 @@ hyperv.reset.state=off,hyperv_reset=on,\
hyperv.frequencies.state=on,\
hyperv.reenlightenment.state=on,\
hyperv.tlbflush.state=on,\
+hyperv.tlbflush.direct.state=on,\
hyperv.ipi.state=on,\
hyperv.evmcs.state=on,\
hyperv.avic.state=on,\
diff --git a/virtinst/cli.py b/virtinst/cli.py
index dcd2b8c8b..5da607be4 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -3091,6 +3091,7 @@ class ParserFeatures(VirtCLIParser):
cls.add_arg("hyperv.frequencies.state", "hyperv_frequencies", is_onoff=True)
cls.add_arg("hyperv.reenlightenment.state", "hyperv_reenlightenment", is_onoff=True)
cls.add_arg("hyperv.tlbflush.state", "hyperv_tlbflush", is_onoff=True)
+ cls.add_arg("hyperv.tlbflush.direct.state", "hyperv_tlbflush_direct", is_onoff=True)
cls.add_arg("hyperv.ipi.state", "hyperv_ipi", is_onoff=True)
cls.add_arg("hyperv.evmcs.state", "hyperv_evmcs", is_onoff=True)
cls.add_arg("hyperv.avic.state", "hyperv_avic", is_onoff=True)
diff --git a/virtinst/domain/features.py b/virtinst/domain/features.py
index cba3b710d..d001ddfa1 100644
--- a/virtinst/domain/features.py
+++ b/virtinst/domain/features.py
@@ -40,6 +40,7 @@ class DomainFeatures(XMLBuilder):
hyperv_frequencies = XMLProperty("./hyperv/frequencies/@state", is_onoff=True)
hyperv_reenlightenment = XMLProperty("./hyperv/reenlightenment/@state", is_onoff=True)
hyperv_tlbflush = XMLProperty("./hyperv/tlbflush/@state", is_onoff=True)
+ hyperv_tlbflush_direct = XMLProperty("./hyperv/tlbflush/direct/@state", is_onoff=True)
hyperv_ipi = XMLProperty("./hyperv/ipi/@state", is_onoff=True)
hyperv_evmcs = XMLProperty("./hyperv/evmcs/@state", is_onoff=True)
hyperv_avic = XMLProperty("./hyperv/avic/@state", is_onoff=True)

View File

@@ -0,0 +1,55 @@
Subject: cli: Add --features hyperv.tlbflush.extended.state=on/off
From: Lin Ma lma@suse.de Mon Dec 30 19:50:50 2024 +0800
Date: Wed Jan 29 10:48:57 2025 +0100:
Git: 81c873ba36b58b8598f53b8c972dc9821ab6d423
Signed-off-by: Lin Ma <lma@suse.de>
diff --git a/tests/data/cli/compare/virt-install-many-devices.xml b/tests/data/cli/compare/virt-install-many-devices.xml
index 996873a8a..cbb186c92 100644
--- a/tests/data/cli/compare/virt-install-many-devices.xml
+++ b/tests/data/cli/compare/virt-install-many-devices.xml
@@ -152,6 +152,7 @@
<reenlightenment state="on"/>
<tlbflush state="on">
<direct state="on"/>
+ <extended state="on"/>
</tlbflush>
<ipi state="on"/>
<evmcs state="on"/>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 18a76612a..a2eb1365e 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -579,6 +579,7 @@ hyperv.frequencies.state=on,\
hyperv.reenlightenment.state=on,\
hyperv.tlbflush.state=on,\
hyperv.tlbflush.direct.state=on,\
+hyperv.tlbflush.extended.state=on,\
hyperv.ipi.state=on,\
hyperv.evmcs.state=on,\
hyperv.avic.state=on,\
diff --git a/virtinst/cli.py b/virtinst/cli.py
index 5da607be4..57d5608c6 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -3092,6 +3092,7 @@ class ParserFeatures(VirtCLIParser):
cls.add_arg("hyperv.reenlightenment.state", "hyperv_reenlightenment", is_onoff=True)
cls.add_arg("hyperv.tlbflush.state", "hyperv_tlbflush", is_onoff=True)
cls.add_arg("hyperv.tlbflush.direct.state", "hyperv_tlbflush_direct", is_onoff=True)
+ cls.add_arg("hyperv.tlbflush.extended.state", "hyperv_tlbflush_extended", is_onoff=True)
cls.add_arg("hyperv.ipi.state", "hyperv_ipi", is_onoff=True)
cls.add_arg("hyperv.evmcs.state", "hyperv_evmcs", is_onoff=True)
cls.add_arg("hyperv.avic.state", "hyperv_avic", is_onoff=True)
diff --git a/virtinst/domain/features.py b/virtinst/domain/features.py
index d001ddfa1..99ed43393 100644
--- a/virtinst/domain/features.py
+++ b/virtinst/domain/features.py
@@ -41,6 +41,7 @@ class DomainFeatures(XMLBuilder):
hyperv_reenlightenment = XMLProperty("./hyperv/reenlightenment/@state", is_onoff=True)
hyperv_tlbflush = XMLProperty("./hyperv/tlbflush/@state", is_onoff=True)
hyperv_tlbflush_direct = XMLProperty("./hyperv/tlbflush/direct/@state", is_onoff=True)
+ hyperv_tlbflush_extended = XMLProperty("./hyperv/tlbflush/extended/@state", is_onoff=True)
hyperv_ipi = XMLProperty("./hyperv/ipi/@state", is_onoff=True)
hyperv_evmcs = XMLProperty("./hyperv/evmcs/@state", is_onoff=True)
hyperv_avic = XMLProperty("./hyperv/avic/@state", is_onoff=True)

View File

@@ -0,0 +1,25 @@
Subject: createvm: prioritize riscv64
From: Heinrich Schuchardt heinrich.schuchardt@canonical.com Tue Jan 21 22:52:40 2025 +0100
Date: Mon Mar 3 10:13:14 2025 -0500:
Git: 6c6c39be2fc26713b9756e668af7ab8106e7acae
As all major distros support the riscv64 architecture, add it to the
list of prioritized architectures. This will move it up in the
architecture drop-down menu and thereby easier to find when creating
a new VM.
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
diff --git a/virtManager/createvm.py b/virtManager/createvm.py
index e37921603..1a8c6b4a1 100644
--- a/virtManager/createvm.py
+++ b/virtManager/createvm.py
@@ -792,7 +792,7 @@ class vmmCreateVM(vmmGObjectUI):
archs.sort()
prios = ["x86_64", "i686", "aarch64", "armv7l", "ppc64", "ppc64le",
- "s390x"]
+ "riscv64", "s390x"]
if self.conn.caps.host.cpu.arch not in prios:
prios = [] # pragma: no cover
for p in prios[:]:

View File

@@ -0,0 +1,30 @@
Subject: tests: uitests: handle linux2020 going EOL
From: Cole Robinson crobinso@redhat.com Mon Mar 3 10:38:22 2025 -0500
Date: Mon Mar 3 10:39:12 2025 -0500:
Git: 6f188482b2e2e1c2d3ee1658b81fdd95bd497897
Signed-off-by: Cole Robinson <crobinso@redhat.com>
diff --git a/tests/uitests/test_createvm.py b/tests/uitests/test_createvm.py
index 1242a0473..053a94066 100644
--- a/tests/uitests/test_createvm.py
+++ b/tests/uitests/test_createvm.py
@@ -464,7 +464,8 @@ def testNewKVMQ35Tweaks(app):
newvm.find("import-entry").set_text("/pool-dir/testvol1.img")
newvm.find("oslist-entry").set_text("fribfrob")
popover = newvm.find("oslist-popover")
- popover.find_fuzzy("linux2020").click()
+ osname = "linux2022"
+ popover.find_fuzzy(osname).click()
_forward(newvm)
_forward(newvm)
@@ -472,7 +473,7 @@ def testNewKVMQ35Tweaks(app):
# hit some code paths elsewhere
newvm.find_fuzzy("Customize", "check").click()
newvm.find_fuzzy("Finish", "button").click()
- vmname = "linux2020"
+ vmname = osname
details = app.find_details_window(vmname)
appl = details.find("config-apply")

View File

@@ -0,0 +1,115 @@
Subject: virtinst: add --pstore backend=acpi-erst,path=XX,size=YY support
From: Lin Ma lma@suse.de Tue Feb 11 10:54:53 2025 +0800
Date: Mon Mar 3 12:01:09 2025 -0500:
Git: b5f6569bc0e24a4557ac43f7b9a7eeae0399c337
Libvirt since v10.6.0 introduces pstore pci device for storing oops/panic
logs in nvram storage.
Let's add it into virt-install, It has 3 suboptions:
* backend: The desired backend, by far only 'acpi-erst' is accepted.
* path: Represents a path in the host that backs the pstore device in
the guest. It is optional, If not specified the libvirt will
auto generates one.
* size: Configures the size of the persistent storage available to the
guest. It is mandatory, unit is kilobytes.
Eg:
virt-install --pstore backend=acpi-erst,path=/tmp/guest_acpi_esrt,size=8
Signed-off-by: Lin Ma <lma@suse.de>
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -826,6 +826,16 @@ def add_device_options(devg, sound_back_
devg.add_argument("--iommu", action="append",
help=_("Configure an IOMMU device. Ex:\n"
"--iommu model=intel,driver.aw_bits=48"))
+ ParserPstore.register()
+ devg.add_argument(
+ "--pstore",
+ action="append",
+ help=_(
+ "Configure a nvram storage device.\n"
+ "It's for guest kernel to record oops/panic logs. Ex:\n"
+ "--pstore backend=acpi-erst,size=8"
+ ),
+ )
def add_guest_xml_options(geng):
@@ -4859,6 +4869,19 @@ class ParserAudio(VirtCLIParser):
cls.add_arg("id", "id")
+class ParserPstore(VirtCLIParser):
+ cli_arg_name = "pstore"
+ guest_propname = "devices.pstore"
+
+ @classmethod
+ def _virtcli_class_init(cls):
+ VirtCLIParser._virtcli_class_init_common(cls)
+
+ cls.add_arg("backend", "backend")
+ cls.add_arg("path", "path")
+ cls.add_arg("size", "size")
+
+
#####################
# --hostdev parsing #
#####################
--- a/virtinst/devices/__init__.py
+++ b/virtinst/devices/__init__.py
@@ -27,6 +27,7 @@ from .tpm import DeviceTpm
from .video import DeviceVideo
from .vsock import DeviceVsock
from .watchdog import DeviceWatchdog
+from .pstore import DevicePstore
__all__ = [l for l in locals() if l.startswith("Device")]
--- a/virtinst/devices/meson.build
+++ b/virtinst/devices/meson.build
@@ -23,6 +23,7 @@ virtinst_devices_sources = files(
'video.py',
'vsock.py',
'watchdog.py',
+ 'pstore.py',
)
install_data(
--- /dev/null
+++ b/virtinst/devices/pstore.py
@@ -0,0 +1,13 @@
+# This work is licensed under the GNU GPLv2 or later.
+# See the COPYING file in the top-level directory.
+
+from .device import Device
+from ..xmlbuilder import XMLProperty
+
+
+class DevicePstore(Device):
+ XML_NAME = "pstore"
+
+ backend = XMLProperty("./@backend")
+ path = XMLProperty("./path")
+ size = XMLProperty("./size", is_int=True)
--- a/virtinst/guest.py
+++ b/virtinst/guest.py
@@ -27,7 +27,7 @@ class _DomainDevices(XMLBuilder):
'smartcard', 'serial', 'parallel', 'console', 'channel',
'input', 'tpm', 'graphics', 'sound', 'audio', 'video', 'hostdev',
'redirdev', 'watchdog', 'memballoon', 'rng', 'panic',
- 'shmem', 'memory', 'vsock', 'iommu']
+ 'shmem', 'memory', 'vsock', 'iommu', 'pstore']
disk = XMLChildProperty(DeviceDisk)
@@ -55,6 +55,7 @@ class _DomainDevices(XMLBuilder):
memory = XMLChildProperty(DeviceMemory)
vsock = XMLChildProperty(DeviceVsock)
iommu = XMLChildProperty(DeviceIommu)
+ pstore = XMLChildProperty(DevicePstore)
def get_all(self):
retlist = []

View File

@@ -0,0 +1,32 @@
Subject: tests: add pstore test
From: Lin Ma lma@suse.de Tue Feb 11 10:56:12 2025 +0800
Date: Mon Mar 3 12:01:09 2025 -0500:
Git: 6c43ab38630a710e4de66cb59cbadd5e11569b68
Signed-off-by: Lin Ma <lma@suse.de>
--- a/tests/data/cli/compare/virt-install-many-devices.xml
+++ b/tests/data/cli/compare/virt-install-many-devices.xml
@@ -1025,6 +1025,10 @@
<iommu model="intel">
<driver aw_bits="48" intremap="off" caching_mode="on" eim="off" iotlb="off"/>
</iommu>
+ <pstore backend="acpi-erst">
+ <path>/tmp/guest_acpi_esrt</path>
+ <size>8</size>
+ </pstore>
</devices>
<launchSecurity type="sev" kernelHashes="yes">
<cbitpos>47</cbitpos>
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -803,6 +803,9 @@ source.reservations.managed=no,source.re
--vsock cid=17
+--pstore backend=acpi-erst,path=/tmp/guest_acpi_esrt,size=8
+
+
--tpm passthrough,model=tpm-crb,path=/dev/tpm0,backend.encryption.secret=11111111-2222-3333-4444-5555555555,backend.persistent_state=yes,backend.active_pcr_banks.sha1=on,backend.active_pcr_banks.sha256=yes,backend.active_pcr_banks.sha384=yes,backend.active_pcr_banks.sha512=yes,version=2.0
--tpm model=tpm-tis,backend.type=emulator,backend.version=2.0,backend.debug=3,backend.source.type=dir,backend.source.path=/some/dir,backend.profile.source=local:mytest,backend.profile.removeDisabled=check

View File

@@ -0,0 +1,30 @@
Subject: man/virt-install: Document pstore device
From: Lin Ma lma@suse.de Tue Feb 11 10:56:43 2025 +0800
Date: Mon Mar 3 12:01:09 2025 -0500:
Git: a0e390b1b63ea3c6b53cf49e8f70a7d214452610
Signed-off-by: Lin Ma <lma@suse.de>
diff --git a/man/virt-install.rst b/man/virt-install.rst
index dc0b6d9cc..b6c48c3fe 100644
--- a/man/virt-install.rst
+++ b/man/virt-install.rst
@@ -2052,6 +2052,18 @@ Complete details at https://libvirt.org/formatdomain.html#iommu-devices
+``--pstore``
+^^^^^^^^^^^^
+
+**Syntax:** ``--pstore`` OPT=VAL,[...]
+
+Add a pstore device to a guest for storing oops/panic logs before it crashes.
+
+Use --pstore=? to see a list of all available options.
+Complete details at https://libvirt.org/formatdomain.html#pstore
+
+
+
MISCELLANEOUS OPTIONS
=====================

View File

@@ -0,0 +1,48 @@
Subject: tests: Increase virtio-mem block size
From: Akihiko Odaki akihiko.odaki@daynix.com Sun Mar 2 15:47:29 2025 +0900
Date: Mon Mar 3 12:19:33 2025 -0500:
Git: fb54f37b6067f88b46acc0d1d7a11884a659279a
virtio-mem block size must be equal to or greater than the transparent
huge page size; otherwise, libvirt raises an error and a test will
fail. For example, on Asahi Linux, the transparent huge page size is 32
MiB, which is greater than 2 MiB, the specified virtio-mem block size.
On Linux 6.13, the configuration with the maximum transparent huge page
size is Arm64 with 64 KiB, and it has 512 MiB transparent huge pages.
Increase the block size to 512 MiB so that the test passes on every
Linux configuration.
Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com>
--- a/tests/data/cli/compare/virt-install-memory-hotplug.xml
+++ b/tests/data/cli/compare/virt-install-memory-hotplug.xml
@@ -126,7 +126,7 @@
<target dynamicMemslots="yes">
<size>524288</size>
<node>0</node>
- <block>2048</block>
+ <block>524288</block>
<requested>524288</requested>
<address base="0x180000000"/>
</target>
@@ -270,7 +270,7 @@
<target dynamicMemslots="yes">
<size>524288</size>
<node>0</node>
- <block>2048</block>
+ <block>524288</block>
<requested>524288</requested>
<address base="0x180000000"/>
</target>
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -936,7 +936,7 @@ c.add_compare("--pxe "
"address.type=dimm,address.base=0x100000000,address.slot=1,"
"source.pmem=on,source.alignsize=2048,target.readonly=on "
-"--memdev virtio-mem,target_node=0,target.block=2048,target.dynamicMemslots=yes,"
+"--memdev virtio-mem,target_node=0,target.block=524288,target.dynamicMemslots=yes,"
"target_size=512,target.requested=524288,target.address_base=0x180000000 "
"--memdev virtio-pmem,source.path=/tmp/virtio_pmem,"

View File

@@ -0,0 +1,18 @@
Subject: tests: test_urls: fix dead URL
From: Cole Robinson crobinso@redhat.com Mon Mar 3 12:40:21 2025 -0500
Date: Mon Mar 3 12:40:36 2025 -0500:
Git: ef41638f5eb0b390cbf74281c508fbfef42f73e5
Signed-off-by: Cole Robinson <crobinso@redhat.com>
diff --git a/tests/data/test_urls.ini b/tests/data/test_urls.ini
index df0d52fa5..29a794feb 100644
--- a/tests/data/test_urls.ini
+++ b/tests/data/test_urls.ini
@@ -197,5 +197,5 @@ distro = ubuntu20.04
# Devel tree
[mageiacauldron]
-url = http://distro.ibiblio.org/mageia/distrib/cauldron/x86_64/
+url = https://mageia.ip-connect.info/distrib/cauldron/x86_64/
distro = none

View File

@@ -0,0 +1,20 @@
Subject: urlfetcher: add riscv64 architecture for Debian
From: Heinrich Schuchardt heinrich.schuchardt@canonical.com Mon Mar 3 11:52:58 2025 +0100
Date: Sat Mar 8 12:59:18 2025 +0100:
Git: ccfe4a0abc0dc37f6ecd367d2c3b3bb1f55649f7
Add riscv64 to the list of Debian architectures.
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
--- a/virtinst/install/urldetect.py
+++ b/virtinst/install/urldetect.py
@@ -692,7 +692,7 @@ class _DebianDistro(_DistroTree):
# Check for standard arch strings which will be
# in the URI name for --location $ISO mounts
- for arch in ["i386", "amd64", "x86_64", "arm64"]:
+ for arch in ["i386", "amd64", "x86_64", "arm64", "riscv64"]:
if arch in self.uri:
log.debug("Found treearch=%s in uri", arch)
if arch == "x86_64":

View File

@@ -0,0 +1,24 @@
Subject: virt-manager: list virtual networks when creating new QEMU Session VM
From: Pavel Hrdina phrdina@redhat.com Mon Mar 10 19:26:44 2025 +0100
Date: Tue Mar 18 20:33:33 2025 +0100:
Git: 714d5f1afdd58d5e908d420c4fbd8183edf47aa7
Using qemu-bridge-helper QEMU Session VMs are now able to use host
bridge interfaces. Currently only interface named virbr0 is allowed by
default but it is possible to change it in `/etc/qemu/bridge.conf`.
We will still keep the usermode network as default.
Resolves: https://github.com/virt-manager/virt-manager/issues/863
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
--- a/virtManager/device/netlist.py
+++ b/virtManager/device/netlist.py
@@ -149,7 +149,6 @@ class vmmNetworkList(vmmGObjectUI):
add_usermode = False
if self.conn.is_qemu_unprivileged():
log.debug("Using unprivileged qemu, adding usermode net")
- vnets = []
default_bridge = None
add_usermode = True

View File

@@ -0,0 +1,59 @@
Subject: virt-install: add support for vDPA network device
From: Joren joren.regan@curtin.edu.au Tue Mar 18 17:09:29 2025 +0800
Date: Tue Mar 18 20:34:22 2025 +0100:
Git: e5142f28fe30f434bde2eb96afdc1de93a38f478
--- a/tests/data/cli/compare/virt-install-many-devices.xml
+++ b/tests/data/cli/compare/virt-install-many-devices.xml
@@ -618,6 +618,12 @@
<model type="virtio"/>
<address type="pci" domain="0" bus="0" slot="16" function="0"/>
</interface>
+ <interface type="vdpa">
+ <source dev="/dev/vhost-vdpa-0"/>
+ <mac address="12:34:56:78:9a:bc"/>
+ <model type="virtio"/>
+ <driver page_per_vq="on" queues="16"/>
+ </interface>
<interface type="user">
<mac address="00:11:22:33:44:55"/>
<model type="virtio"/>
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -655,6 +655,7 @@ source.reservations.managed=no,source.re
--network type=direct,source=eth5,source_mode=vepa,source.mode=vepa,target=mytap12,virtualport_type=802.1Qbg,virtualport_managerid=12,virtualport_typeid=1193046,virtualport_typeidversion=1,virtualport_instanceid=09b11c53-8b5c-4eeb-8f00-d84eaa0aaa3b,boot_order=1,trustGuestRxFilters=yes,mtu.size=1500,virtualport.parameters.managerid=12,virtualport.parameters.typeid=1193046,virtualport.parameters.typeidversion=1,virtualport.parameters.instanceid=09b11c53-8b5c-4eeb-8f00-d84eaa0aaa3b,boot_order=1,trustGuestRxFilters=yes,mtu.size=1500
--network user,model=virtio,address.type=spapr-vio,address.reg=0x500,link.state=no
--network vhostuser,source_type=unix,source_path=/tmp/vhost1.sock,source_mode=server,model=virtio,source.type=unix,source.path=/tmp/vhost1.sock,address.type=pci,address.bus=0x00,address.slot=0x10,address.function=0x0,address.domain=0x0000
+--network type=vdpa,source=/dev/vhost-vdpa-0,mac=12:34:56:78:9a:bc,driver.queues=16,driver.page_per_vq=on
--network user,address.type=ccw,address.cssid=0xfe,address.ssid=0,address.devno=01,boot.order=15,boot.loadparm=SYSTEM1
--network model=vmxnet3
--network backend.type=passt,backend.logFile=/tmp/foo.log,portForward0.proto=tcp,portForward0.address=192.168.10.10,portForward0.dev=eth0,portForward0.range0.start=4000,portForward0.range0.end=5000,portForward0.range0.to=10000,portForward0.range0.exclude=no,portForward0.range1.start=6000,portForward1.proto=tcp,portForward1.range0.start=2022,portForward1.range0.to=22
--- a/virtinst/devices/interface.py
+++ b/virtinst/devices/interface.py
@@ -181,6 +181,7 @@ class DeviceInterface(Device):
TYPE_VHOSTUSER = "vhostuser"
TYPE_ETHERNET = "ethernet"
TYPE_DIRECT = "direct"
+ TYPE_VDPA = "vdpa"
@staticmethod
def generate_mac(conn):
@@ -242,7 +243,7 @@ class DeviceInterface(Device):
return self.network
if self.type == self.TYPE_BRIDGE:
return self.bridge
- if self.type == self.TYPE_DIRECT:
+ if self.type == self.TYPE_DIRECT or self.type == self.TYPE_VDPA:
return self.source_dev
return None
def _set_source(self, newsource):
@@ -258,7 +259,7 @@ class DeviceInterface(Device):
self.network = newsource
elif self.type == self.TYPE_BRIDGE:
self.bridge = newsource
- elif self.type == self.TYPE_DIRECT:
+ elif self.type == self.TYPE_DIRECT or self.type == self.TYPE_VDPA:
self.source_dev = newsource
source = property(_get_source, _set_source)

View File

@@ -0,0 +1,43 @@
Subject: virt-manager: add support for vDPA network device
From: Pavel Hrdina phrdina@redhat.com Tue Mar 18 20:01:22 2025 +0100
Date: Tue Mar 18 20:34:22 2025 +0100:
Git: e39e0ad5f06fb080f0042090d97e47e11f11dcab
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
--- a/virtManager/device/netlist.py
+++ b/virtManager/device/netlist.py
@@ -142,6 +142,11 @@ class vmmNetworkList(vmmGObjectUI):
_nettype = virtinst.DeviceInterface.TYPE_DIRECT
model.append(_build_manual_row(_nettype, _label))
+ def _add_manual_vdpa_row():
+ _label = _("vDPA device...")
+ _nettype = virtinst.DeviceInterface.TYPE_VDPA
+ model.append(_build_manual_row(_nettype, _label))
+
vnets = self._find_virtual_networks()
default_bridge = virtinst.DeviceInterface.default_bridge(
self.conn.get_backend())
@@ -165,6 +170,7 @@ class vmmNetworkList(vmmGObjectUI):
bridgeidx = _add_manual_bridge_row()
_add_manual_macvtap_row()
+ _add_manual_vdpa_row()
# If there is a bridge device, default to that
if default_bridge:
@@ -248,8 +254,11 @@ class vmmNetworkList(vmmGObjectUI):
# If this is a bridge or macvtap device, show the
# manual source mode
- if nettype in [virtinst.DeviceInterface.TYPE_BRIDGE,
- virtinst.DeviceInterface.TYPE_DIRECT]:
+ if nettype in [
+ virtinst.DeviceInterface.TYPE_BRIDGE,
+ virtinst.DeviceInterface.TYPE_DIRECT,
+ virtinst.DeviceInterface.TYPE_VDPA,
+ ]:
rowiter = _find_row(nettype, None, True)
self.widget("net-manual-source").set_text(source or "")
if rowiter:

View File

@@ -0,0 +1,46 @@
Subject: virt-install: detect wayland in order to start virt-viewer
From: Pavel Hrdina phrdina@redhat.com Mon Mar 24 12:11:23 2025 +0100
Date: Mon Mar 24 15:32:28 2025 +0100:
Git: 4f9618289f279f86994a5d2f1aada8a6524f5a6f
When running virt-install using waypipe the DISPLAY variable is not
defined and virt-install will complain that it cannot start virt-viewer.
Check for WAYLAND_DISPLAY as well, DISPLAY is defined only when xwayland
is used. In case of waypipe it configures only WAYLAND_DISPLAY.
Move the check before we check for virt-viewer as without display there
is no point to check if virt-viewer is installed or not.
Fixes: https://github.com/virt-manager/virt-manager/issues/884
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -1999,18 +1999,20 @@ def _determine_default_autoconsole_type(
log.debug("No viewer to launch for graphics type '%s'", gtype)
return None
+ if (
+ not os.environ.get("DISPLAY", "")
+ and not os.environ.get("DISPLAY_WAYLAND")
+ and not xmlutil.in_testsuite()
+ ): # pragma: no cover
+ log.warning(_("No display detected. Not running virt-viewer."))
+ return None
+
if not HAS_VIRTVIEWER and not xmlutil.in_testsuite(): # pragma: no cover
log.warning(_("Unable to connect to graphical console: "
"virt-viewer not installed. Please install "
"the 'virt-viewer' package."))
return None
- if (not os.environ.get("DISPLAY", "") and
- not xmlutil.in_testsuite()): # pragma: no cover
- log.warning(_("Graphics requested but DISPLAY is not set. "
- "Not running virt-viewer."))
- return None
-
return "graphical"

View File

@@ -0,0 +1,43 @@
Subject: Validation: allow spaces, disallow slashes
From: AbhinavTiruvee ranjaniabhinav@gmail.com Mon Apr 7 18:05:41 2025 -0500
Date: Tue Apr 22 12:11:00 2025 +0200:
Git: 237896029d668543465b4566d0ea880d468c7058
Libvirt permits spaces in object names but rejects the / character.
This change aligns our validator with libvirts behavior (and QEMUs),
preventing names with '/' while still allowing humanfriendly
names with spaces.
Fixes: #740
diff --git a/tests/test_xmlparse.py b/tests/test_xmlparse.py
index c4107f932..898fc55c3 100644
--- a/tests/test_xmlparse.py
+++ b/tests/test_xmlparse.py
@@ -1011,7 +1011,9 @@ def testXMLBuilderCoverage():
virtinst.DeviceDisk.validate_generic_name("objtype", None)
with pytest.raises(ValueError):
- virtinst.DeviceDisk.validate_generic_name("objtype", "foo bar")
+ virtinst.DeviceDisk.validate_generic_name("objtype", "foo/bar")
+
+ assert virtinst.DeviceDisk.validate_generic_name("objtype", "foo bar") is None
# Test property __repr__ for code coverage
assert "DeviceAddress" in str(virtinst.DeviceDisk.address)
diff --git a/virtinst/xmlbuilder.py b/virtinst/xmlbuilder.py
index 64ea25e1b..8ec18a7a7 100644
--- a/virtinst/xmlbuilder.py
+++ b/virtinst/xmlbuilder.py
@@ -511,9 +511,8 @@ class XMLBuilder(object):
@staticmethod
def validate_generic_name(name_label, val):
- # Rather than try and match libvirt's regex, just forbid things we
- # know don't work
- forbid = [" "]
+ # Only character that shouldn't work is '/', matching QEMU
+ forbid = ["/"]
if not val:
# translators: value is a generic object type name
raise ValueError(_("A name must be specified for the %s") %

View File

@@ -0,0 +1,18 @@
Subject: fix: default start_folder to None
From: Zahid Kizmaz tech@zahid.rocks Sun May 11 22:41:44 2025 +0200
Date: Tue Jun 10 09:22:10 2025 +0200:
Git: 62f976a61b0363b9e6a0eac1fd2e8553d24d5457
diff --git a/virtManager/storagebrowse.py b/virtManager/storagebrowse.py
index 8e8239b4d..d8c70c925 100644
--- a/virtManager/storagebrowse.py
+++ b/virtManager/storagebrowse.py
@@ -176,6 +176,7 @@ class vmmStorageBrowser(vmmGObjectUI):
data = _BrowseReasonMetadata(self._browse_reason)
gsettings_key = data.gsettings_key
+ start_folder = None
if gsettings_key:
start_folder = self.config.get_default_directory(gsettings_key)

View File

@@ -0,0 +1,21 @@
Subject: Add Ctrl+Alt+Shift+Esc key command for logind's SecureAttentionKey
From: n3rdopolis bluescreen_avenger@verizon.net Mon May 5 22:29:18 2025 -0400
Date: Wed Jun 11 09:32:34 2025 +0200:
Git: 4b89c39eea1cb89dda597d81831fc385db3f8cbc
logind now supports a new key binding https://github.com/systemd/systemd/pull/29542
Ctrl+Alt+Shift+Esc that emits SecureAttentionKey to allow login managers to start
or switch back to the greeter
diff --git a/virtManager/details/console.py b/virtManager/details/console.py
index 54b587772..e68bb9ac8 100644
--- a/virtManager/details/console.py
+++ b/virtManager/details/console.py
@@ -120,6 +120,7 @@ def build_keycombo_menu(on_send_key_fn):
make_item("<Control><Alt>BackSpace", ["Control_L", "Alt_L", "BackSpace"])
make_item("<Control><Alt>Delete", ["Control_L", "Alt_L", "Delete"])
+ make_item("<Control><Alt><Shift>Escape", ["Control_L", "Alt_L", "Shift_L", "Escape"])
menu.add(Gtk.SeparatorMenuItem())
for i in range(1, 13):

View File

@@ -33,7 +33,7 @@ Index: virt-manager-5.0.0/tests/test_cli.py
===================================================================
--- virt-manager-5.0.0.orig/tests/test_cli.py
+++ virt-manager-5.0.0/tests/test_cli.py
@@ -1246,7 +1246,6 @@ c.add_compare("--connect %(URI-KVM-ARMV7
@@ -1255,7 +1255,6 @@ c.add_compare("--connect %(URI-KVM-ARMV7
#################
c.add_valid("--arch aarch64 --osinfo fedora19 --nodisks --pxe --connect " + utils.URIs.kvm_x86_nodomcaps, grep="Libvirt version does not support UEFI") # attempt to default to aarch64 UEFI, but it fails, but should only print warnings

View File

@@ -1,3 +1,78 @@
-------------------------------------------------------------------
Wed Jun 18 14:06:18 MDT 2025 - carnold@suse.com
- bsc#1244685 - Could not find an installable distribution with
virt-install command
virtinst-add-sle16-detection-support.patch
-------------------------------------------------------------------
Thu Jun 12 15:51:44 MDT 2025 - carnold@suse.com
- Upstream bug fixes (bsc#1027942)
050-Validation-allow-spaces-disallow-slashes.patch
051-fix-default-start_folder-to-None.patch
052-Add-Ctrl+Alt+Shift+Esc-key-command-for-loginds-SecureAttentionKey.patch
-------------------------------------------------------------------
Mon May 19 15:14:01 MDT 2025 - carnold@suse.com
- Add detection code for SLES 16 media (bsc#1236252, bsc#1243296)
virtinst-add-sle16-detection-support.patch
-------------------------------------------------------------------
Mon Apr 14 22:57:32 MDT 2025 - carnold@suse.com
- Spec file changes for including the correct dependencies
depending on the distro. (bsc#1241082 and bsc#1241119)
-------------------------------------------------------------------
Fri Apr 11 06:05:21 MDT 2025 - carnold@suse.com
- Upstream features and bug fixes (bsc#1027942) (jsc#PED-8910)
040-virtinst-add-pstore-backend-support.patch
041-tests-add-pstore-test.patch
042-man-virt-install-Document-pstore-device.patch
043-tests-Increase-virtio-mem-block-size.patch
044-tests-test_urls-fix-dead-URL.patch
045-urlfetcher-add-riscv64-architecture-for-Debian.patch
046-virt-manager-list-virtual-networks-when-creating-new-QEMU-Session-VM.patch
047-virt-install-add-support-for-vDPA-network-device.patch
048-virt-manager-add-support-for-vDPA-network-device.patch
049-virt-install-detect-wayland-in-order-to-start-virt-viewer.patch
- bsc#1241082 - [Build 20250410] virt_install fails to launch:
missing dependencies.
Spec file modifications
-------------------------------------------------------------------
Tue Apr 8 11:28:25 MDT 2025 - carnold@suse.com
- bsc#1239837 - [SLFO] virt-manager still has unresolved
dependencies in beta2
Remove dependencies on spice and other Gtk sources as these
packages don't exist in SLES16. Cleanup other dependencies.
virt-manager.spec
-------------------------------------------------------------------
Wed Mar 12 15:27:01 MDT 2025 - carnold@suse.com
- Upstream bug fix (bsc#1027942)
010-virtManager-domain-fix-indentation.patch
- Upstream features from Lin Ma and others (jsc#PED-8910)
021-cli-Add-memdev-target.dynamicMemslots-support-for-virtio-mem.patch
022-cli-add-target.memReserve-for-pci-bridge-and-pcie-root-port-controllers.patch
023-cli-Add-disk-driver.queue_size-support.patch
024-cli-Add-poll-settings-for-iothread.patch
025-test_cli-Fix-a-pycodestyle-E261-issue.patch
026-gitignore-Ignore-coverage.xml.patch
027-cli-Add-tpm-backend.profile.source-removeDisabled-support.patch
028-cli-Add-nvram.templateFormat-to-indicate-template-format.patch
029-cli-Add-features-hyperv.xmm_input.state-on-off.patch
030-cli-Add-features-hyperv.emsr_bitmap.state-on-off.patch
031-cli-Add-features-hyperv.tlbflush.direct.state-on-off.patch
032-cli-Add-features-hyperv.tlbflush.extended.state-on-off.patch
033-createvm-prioritize-riscv64.patch
034-tests-uitests-handle-linux2020-going-EOL.patch
-------------------------------------------------------------------
Thu Mar 6 15:34:37 MST 2025 - carnold@suse.com

View File

@@ -19,14 +19,17 @@
%global __python %{__python3}
%global with_guestfs 0
%global default_hvs "qemu,xen,lxc"
%if 0%{?suse_version} < 1600
%if 0%{?suse_version} < 1600 || 0%{?suse_version} >= 1699
%define is_sles16 0
%define have_spice 1
%else
%define is_sles16 1
%define have_spice 0
%endif
%global flavor @BUILD_FLAVOR@%{nil}
%if "%{flavor}" == "test"
# No spice on SLES16 so no running check build
%if "%{flavor}" == "test" && %{have_spice}
%bcond_without test
%define psuffix -%{flavor}
%else
@@ -55,6 +58,34 @@ Patch6: 006-addhardware-panic-Fill-in-model-combo-with-advertised-values
Patch7: 007-cli-man-Always-list-osinfo-before-os-variant.patch
Patch8: 008-snapshots-default-to-same-snapshot-mode-as-currently-used-snapshot.patch
Patch9: 009-snapshots-warn-users-to-not-mix-snapshot-modes.patch
Patch10: 010-virtManager-domain-fix-indentation.patch
Patch21: 021-cli-Add-memdev-target.dynamicMemslots-support-for-virtio-mem.patch
Patch22: 022-cli-add-target.memReserve-for-pci-bridge-and-pcie-root-port-controllers.patch
Patch23: 023-cli-Add-disk-driver.queue_size-support.patch
Patch24: 024-cli-Add-poll-settings-for-iothread.patch
Patch25: 025-test_cli-Fix-a-pycodestyle-E261-issue.patch
Patch26: 026-gitignore-Ignore-coverage.xml.patch
Patch27: 027-cli-Add-tpm-backend.profile.source-removeDisabled-support.patch
Patch28: 028-cli-Add-nvram.templateFormat-to-indicate-template-format.patch
Patch29: 029-cli-Add-features-hyperv.xmm_input.state-on-off.patch
Patch30: 030-cli-Add-features-hyperv.emsr_bitmap.state-on-off.patch
Patch31: 031-cli-Add-features-hyperv.tlbflush.direct.state-on-off.patch
Patch32: 032-cli-Add-features-hyperv.tlbflush.extended.state-on-off.patch
Patch33: 033-createvm-prioritize-riscv64.patch
Patch34: 034-tests-uitests-handle-linux2020-going-EOL.patch
Patch40: 040-virtinst-add-pstore-backend-support.patch
Patch41: 041-tests-add-pstore-test.patch
Patch42: 042-man-virt-install-Document-pstore-device.patch
Patch43: 043-tests-Increase-virtio-mem-block-size.patch
Patch44: 044-tests-test_urls-fix-dead-URL.patch
Patch45: 045-urlfetcher-add-riscv64-architecture-for-Debian.patch
Patch46: 046-virt-manager-list-virtual-networks-when-creating-new-QEMU-Session-VM.patch
Patch47: 047-virt-install-add-support-for-vDPA-network-device.patch
Patch48: 048-virt-manager-add-support-for-vDPA-network-device.patch
Patch49: 049-virt-install-detect-wayland-in-order-to-start-virt-viewer.patch
Patch50: 050-Validation-allow-spaces-disallow-slashes.patch
Patch51: 051-fix-default-start_folder-to-None.patch
Patch52: 052-Add-Ctrl+Alt+Shift+Esc-key-command-for-loginds-SecureAttentionKey.patch
Patch100: revert-363fca41-virt-install-Require-osinfo-for-non-x86-HVM-case-too.patch
# SUSE Only
Patch150: virtman-desktop.patch
@@ -111,30 +142,28 @@ BuildArch: noarch
%define verrel %{version}-%{release}
Requires: dconf
Requires: gstreamer-plugins-good
Requires: gtk3
Requires: python3-gobject
# For console widget
Requires: python3-cairo
Requires: python3-dbus-python
Requires: python3-gobject-Gdk
Requires: python3-gobject-cairo
%if %{have_spice}
Recommends: python3-SpiceClientGtk
%endif
Requires: virt-install
Requires: virt-manager-common = %{verrel}
Requires: typelib(GtkSource)
Requires: vte
%if %{with_guestfs}
Requires: python3-libguestfs
%endif
Recommends: gtksourceview4
Recommends: libvirt-daemon-config-network
Recommends: (libvirt-daemon-kvm or libvirt-daemon-qemu)
Suggests: python3-libguestfs
BuildRequires: gettext
BuildRequires: meson
BuildRequires: python3-devel
BuildRequires: python3-docutils
BuildRequires: python3-setuptools
BuildRequires: pkgconfig(gobject-introspection-1.0)
%if %{is_sles16}
%define __requires_exclude typelib\\(AppIndicator3|SpiceClientGtk|SpiceClientGLib|GtkSource\\) = 3.0
%else
# GtkSource = 4 is available everywhere we run this version of virt-manager
%define __requires_exclude typelib\\(GtkSource\\) = 3.0
%endif
%if %{with test}
BuildRequires: python3-argcomplete
BuildRequires: python3-pytest
@@ -157,16 +186,12 @@ Group: System/Monitoring
# This version not strictly required: virt-manager should work with older,
# however varying amounts of functionality will not be enabled.
Requires: libosinfo >= 0.2.10
Requires: mkisofs
Requires: python3-argcomplete
Requires: python3-gobject
Requires: python3-libvirt-python >= 0.7.0
Requires: python3-libxml2-python
Requires: python3-pycurl
Requires: python3-requests
Requires: xorriso
Requires: typelib(AppIndicator3)
Requires: typelib(LibvirtGLib)
Suggests: python3-virt-bootstrap
BuildRequires: gobject-introspection
%description common
Common files used by the different virt-manager interfaces, as well as
@@ -176,11 +201,12 @@ virt-install related tools.
Summary: Utilities for installing virtual machines
Group: System/Monitoring
Requires: libvirt-client
Requires: virt-manager-common = %{verrel}
Requires: python3-requests
Provides: python3-virtinst
Provides: virt-clone
Provides: virt-xml
Supplements: virt-manager
%description -n virt-install
@@ -196,10 +222,10 @@ machine).
%if %{default_hvs}
%global _default_hvs --default-hvs %{default_hvs}
%endif
%if ! %{have_spice}
%global _default_graphics -Ddefault-graphics=vnc
%else
%if %{have_spice}
%global _default_graphics -Ddefault-graphics=spice
%else
%global _default_graphics -Ddefault-graphics=vnc
%endif
%meson \
-Ddefault-hvs=%{default_hvs} \
@@ -213,7 +239,7 @@ machine).
%meson_install
# YaST is not used on SLES16
%if %{?suse_version} != 1600
%if ! %{?is_sles16}
mkdir -p %{buildroot}/%{_datadir}/YaST2/clients/
install -m644 %SOURCE1 %{buildroot}/%{_datadir}/YaST2/clients/virt-install.rb
mkdir -p %{buildroot}/%{_datadir}/applications/YaST2/
@@ -319,9 +345,11 @@ fi
%{_datadir}/metainfo/%{name}.appdata.xml
%{_datadir}/applications/%{name}.desktop
%if %{?suse_version} != 1600
%if ! %{?is_sles16}
%{_datadir}/applications/YaST2/virt-install.desktop
%endif
%dir %{_datadir}/glib-2.0
%dir %{_datadir}/glib-2.0/schemas
%{_datadir}/glib-2.0/schemas/org.virt-manager.virt-manager.gschema.xml
%dir /usr/lib/supportconfig
%dir /usr/lib/supportconfig/plugins
@@ -346,7 +374,7 @@ fi
%{_bindir}/virt-xml
%{_datadir}/bash-completion/completions/virt-xml
%if %{?suse_version} != 1600
%if ! %{?is_sles16}
%dir %{_datadir}/YaST2
%dir %{_datadir}/YaST2/clients
%dir %{_datadir}/applications/YaST2

View File

@@ -6,9 +6,9 @@ Index: virt-manager-5.0.0/virtinst/install/urldetect.py
else:
if "SUSE SL Micro" in self.product_name:
sle_version = self.product_name.strip().rsplit(' ')[3]
+ elif "SUSE SLES" in self.product_name:
+ elif "SUSE SLES Full" in self.product_name:
+ # For SLES 16
+ sle_version = self.product_name.strip().rsplit(' ')[2]
+ sle_version = self.product_name.strip().rsplit(' ')[3]
+ sle_version = sle_version.rstrip(".0")
else:
sle_version = self.product_name.strip().rsplit(' ')[4]
@@ -30,3 +30,14 @@ Index: virt-manager-5.0.0/virtinst/install/urldetect.py
if media_str:
media_arch = "x86_64"
if 'aarch64' in media_str:
@@ -582,6 +592,10 @@ class _SuseDistro(_RHELDistro):
self._kernel_paths.append(
("suseboot/linux64", "suseboot/initrd64"))
+ # Tested with SLES 16
+ self._kernel_paths.append(
+ ("../boot/%s/loader/linux" % tree_arch,
+ "../boot/%s/loader/initrd" % tree_arch))
# Tested with SLES 12 for ppc64le, all s390x
self._kernel_paths.append(
("boot/%s/linux" % tree_arch,

View File

@@ -1,8 +1,10 @@
References: bsc#1234215
--- virt-manager-5.0.0/virtinst/devices/disk.py.orig 2024-12-05 07:15:41.023613127 -0700
+++ virt-manager-5.0.0/virtinst/devices/disk.py 2024-12-05 07:22:16.587622553 -0700
@@ -677,7 +677,10 @@ class DeviceDisk(Device):
Index: virt-manager-5.0.0/virtinst/devices/disk.py
===================================================================
--- virt-manager-5.0.0.orig/virtinst/devices/disk.py
+++ virt-manager-5.0.0/virtinst/devices/disk.py
@@ -678,7 +678,10 @@ class DeviceDisk(Device):
# Some file managers use 'file://' when passing files to
# virt-manager, we need to strip it from the newpath.
if newpath is not None:

View File

@@ -1,10 +1,10 @@
Reference: bnc#869024
Disable graphics on s390x
Index: virt-manager-4.2.0/virtinst/guest.py
Index: virt-manager-5.0.0/virtinst/guest.py
===================================================================
--- virt-manager-4.2.0.orig/virtinst/guest.py
+++ virt-manager-4.2.0/virtinst/guest.py
@@ -208,7 +208,10 @@ class Guest(XMLBuilder):
--- virt-manager-5.0.0.orig/virtinst/guest.py
+++ virt-manager-5.0.0/virtinst/guest.py
@@ -212,7 +212,10 @@ class Guest(XMLBuilder):
self.skip_default_channel = False
self.skip_default_sound = False
self.skip_default_usbredir = False
@@ -16,7 +16,7 @@ Index: virt-manager-4.2.0/virtinst/guest.py
self.skip_default_rng = False
self.skip_default_tpm = False
self.skip_default_input = False
@@ -361,7 +364,7 @@ class Guest(XMLBuilder):
@@ -365,7 +368,7 @@ class Guest(XMLBuilder):
if not os_support:
return False
@@ -25,7 +25,7 @@ Index: virt-manager-4.2.0/virtinst/guest.py
return True
return False # pragma: no cover
@@ -1149,7 +1152,7 @@ class Guest(XMLBuilder):
@@ -1153,7 +1156,7 @@ class Guest(XMLBuilder):
self.add_device(dev)
def _add_default_video_device(self):

View File

@@ -1,11 +1,11 @@
References: bsc#1172356, bsc#1177620
Libvirt doesn't accept "Hypervisor default" as a model name
Index: virt-manager-4.2.0/virtinst/devices/interface.py
Index: virt-manager-5.0.0/virtinst/devices/interface.py
===================================================================
--- virt-manager-4.2.0.orig/virtinst/devices/interface.py
+++ virt-manager-4.2.0/virtinst/devices/interface.py
@@ -365,6 +365,9 @@ class DeviceInterface(Device):
--- virt-manager-5.0.0.orig/virtinst/devices/interface.py
+++ virt-manager-5.0.0/virtinst/devices/interface.py
@@ -366,6 +366,9 @@ class DeviceInterface(Device):
return "e1000e"
if not guest.os.is_x86():
return None

View File

@@ -1,11 +1,11 @@
Use the correct qemu emulator based on the architecture.
We want to get away from using the old qemu-dm emulator
for Xen HVM guests so default to qemu-system-i386.
Index: virt-manager-4.2.0/virtinst/guest.py
Index: virt-manager-5.0.0/virtinst/guest.py
===================================================================
--- virt-manager-4.2.0.orig/virtinst/guest.py
+++ virt-manager-4.2.0/virtinst/guest.py
@@ -991,6 +991,10 @@ class Guest(XMLBuilder):
--- virt-manager-5.0.0.orig/virtinst/guest.py
+++ virt-manager-5.0.0/virtinst/guest.py
@@ -995,6 +995,10 @@ class Guest(XMLBuilder):
self._add_default_tpm()
self.clock.set_defaults(self)

View File

@@ -1,10 +1,10 @@
References: bsc#1180069
Index: virt-manager-4.2.0/virtinst/guest.py
Index: virt-manager-5.0.0/virtinst/guest.py
===================================================================
--- virt-manager-4.2.0.orig/virtinst/guest.py
+++ virt-manager-4.2.0/virtinst/guest.py
@@ -737,6 +737,8 @@ class Guest(XMLBuilder):
--- virt-manager-5.0.0.orig/virtinst/guest.py
+++ virt-manager-5.0.0/virtinst/guest.py
@@ -741,6 +741,8 @@ class Guest(XMLBuilder):
self.type != "kvm"):
log.warning( # pragma: no cover
"KVM acceleration not available, using '%s'", self.type)

View File

@@ -2,11 +2,11 @@ References: bsc#989639
When the device added is a cdrom device (/dev/sr0), don't use
"phy" as the driver name but instead use "qemu".
Index: virt-manager-4.2.0/virtinst/devices/disk.py
Index: virt-manager-5.0.0/virtinst/devices/disk.py
===================================================================
--- virt-manager-4.2.0.orig/virtinst/devices/disk.py
+++ virt-manager-4.2.0/virtinst/devices/disk.py
@@ -566,7 +566,8 @@ class DeviceDisk(Device):
--- virt-manager-5.0.0.orig/virtinst/devices/disk.py
+++ virt-manager-5.0.0/virtinst/devices/disk.py
@@ -567,7 +567,8 @@ class DeviceDisk(Device):
# Recommended xen defaults from here:
# https://bugzilla.redhat.com/show_bug.cgi?id=1171550#c9
# If type block, use name=phy. Otherwise do the same as qemu

View File

@@ -2,11 +2,11 @@ Reference: bnc#813082
Virt-manager on Xen doesn't fill in any type thereby defaulting to
'raw'. This patch will generate the correct XML on Xen.
Index: virt-manager-4.2.0/virtinst/devices/disk.py
Index: virt-manager-5.0.0/virtinst/devices/disk.py
===================================================================
--- virt-manager-4.2.0.orig/virtinst/devices/disk.py
+++ virt-manager-4.2.0/virtinst/devices/disk.py
@@ -583,6 +583,10 @@ class DeviceDisk(Device):
--- virt-manager-5.0.0.orig/virtinst/devices/disk.py
+++ virt-manager-5.0.0/virtinst/devices/disk.py
@@ -584,6 +584,10 @@ class DeviceDisk(Device):
https://lists.gnu.org/archive/html/qemu-devel/2008-04/msg00675.html
"""
if self.driver_name != self.DRIVER_NAME_QEMU:

View File

@@ -6,11 +6,11 @@ types (ide vs xen) it added xvda with hda. These disks were then
passed to qemu where it error'ed out with the disks having the same
index (in this case both are 0).
Index: virt-manager-4.2.0/virtinst/devices/disk.py
Index: virt-manager-5.0.0/virtinst/devices/disk.py
===================================================================
--- virt-manager-4.2.0.orig/virtinst/devices/disk.py
+++ virt-manager-4.2.0/virtinst/devices/disk.py
@@ -941,6 +941,17 @@ class DeviceDisk(Device):
--- virt-manager-5.0.0.orig/virtinst/devices/disk.py
+++ virt-manager-5.0.0/virtinst/devices/disk.py
@@ -942,6 +942,17 @@ class DeviceDisk(Device):
:returns: generated target
"""
prefix, maxnode = self.get_target_prefix()
@@ -28,7 +28,7 @@ Index: virt-manager-4.2.0/virtinst/devices/disk.py
skip_targets = [t for t in skip_targets if t and t.startswith(prefix)]
skip_targets.sort()
@@ -948,11 +959,18 @@ class DeviceDisk(Device):
@@ -949,11 +960,18 @@ class DeviceDisk(Device):
first_found = None
for i in range(maxnode):

View File

@@ -119,7 +119,7 @@ Index: virt-manager-5.0.0/virtManager/object/domain.py
self._redefine_xmlobj(guest)
@@ -1320,6 +1338,9 @@ class vmmDomain(vmmLibvirtObject):
@@ -1319,6 +1337,9 @@ class vmmDomain(vmmLibvirtObject):
def get_description(self):
return self.get_xmlobj().description
@@ -190,7 +190,7 @@ Index: virt-manager-5.0.0/virtinst/devices/interface.py
===================================================================
--- virt-manager-5.0.0.orig/virtinst/devices/interface.py
+++ virt-manager-5.0.0/virtinst/devices/interface.py
@@ -310,6 +310,9 @@ class DeviceInterface(Device):
@@ -311,6 +311,9 @@ class DeviceInterface(Device):
portForward = XMLChildProperty(_PortForward)

View File

@@ -7,7 +7,7 @@ Index: virt-manager-5.0.0/virtManager/object/domain.py
===================================================================
--- virt-manager-5.0.0.orig/virtManager/object/domain.py
+++ virt-manager-5.0.0/virtManager/object/domain.py
@@ -1613,7 +1613,8 @@ class vmmDomain(vmmLibvirtObject):
@@ -1612,7 +1612,8 @@ class vmmDomain(vmmLibvirtObject):
return (self.is_stoppable() or
self.status() in [libvirt.VIR_DOMAIN_CRASHED])
def is_runable(self):