3 Commits

110 changed files with 13348 additions and 3346 deletions

View File

@@ -1,99 +0,0 @@
Subject: cli: Support --cpu maximum
From: Andrea Bolognani abologna@redhat.com Fri Dec 6 22:10:31 2024 +0100
Date: Tue Dec 10 14:01:32 2024 +0100:
Git: fca41cfaa970ba5a4e695f482fd599f53572b6c7
This mode has been introduced in libvirt 7.1.0 (March 2021) and
can be already used today with
--cpu mode=maximum
This is however slightly inconvenient to type and is not
consistent with the special treatment that the other modes
(host-passthrough, host-model) get.
Introduce a proper special mode for it.
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
diff --git a/man/virt-install.rst b/man/virt-install.rst
index 86152d214..775d7ce70 100644
--- a/man/virt-install.rst
+++ b/man/virt-install.rst
@@ -438,6 +438,11 @@ Some examples:
``--cpu host-passthrough,cache.mode=passthrough``
Example of passing through the host cpu's cache information.
+``--cpu maximum``
+ Expose the most feature-rich CPU possible. Useful when running a foreign
+ architecture guest, for example a riscv64 guest on an x86_64 host. Not
+ recommended when using KVM to run a same-architecture guest.
+
Use --cpu=? to see a list of all available sub options.
Complete details at https://libvirt.org/formatdomain.html#cpu-model-and-topology
diff --git a/tests/data/cli/compare/virt-install-linux2020.xml b/tests/data/cli/compare/virt-install-linux2020.xml
index 5a7d7adf3..b37b87758 100644
--- a/tests/data/cli/compare/virt-install-linux2020.xml
+++ b/tests/data/cli/compare/virt-install-linux2020.xml
@@ -19,7 +19,7 @@
<apic/>
<vmport state="off"/>
</features>
- <cpu mode="host-passthrough"/>
+ <cpu mode="maximum"/>
<clock offset="utc">
<timer name="rtc" tickpolicy="catchup"/>
<timer name="pit" tickpolicy="delay"/>
@@ -102,7 +102,7 @@
<apic/>
<vmport state="off"/>
</features>
- <cpu mode="host-passthrough"/>
+ <cpu mode="maximum"/>
<clock offset="utc">
<timer name="rtc" tickpolicy="catchup"/>
<timer name="pit" tickpolicy="delay"/>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 23ad1cadb..03c3316e1 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", "linux2020", prerun_check=no_osinfo_linux2020_virtio)
+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
diff --git a/virtinst/domain/cpu.py b/virtinst/domain/cpu.py
index df0ca2250..91a9481cf 100644
--- a/virtinst/domain/cpu.py
+++ b/virtinst/domain/cpu.py
@@ -267,12 +267,13 @@ class DomainCpu(XMLBuilder):
SPECIAL_MODE_HOST_COPY = "host-copy"
SPECIAL_MODE_HOST_MODEL = "host-model"
SPECIAL_MODE_HOST_PASSTHROUGH = "host-passthrough"
+ SPECIAL_MODE_MAXIMUM = "maximum"
SPECIAL_MODE_CLEAR = "clear"
SPECIAL_MODE_APP_DEFAULT = "default"
SPECIAL_MODES = [SPECIAL_MODE_HOST_MODEL_ONLY, SPECIAL_MODE_HV_DEFAULT,
SPECIAL_MODE_HOST_COPY, SPECIAL_MODE_HOST_MODEL,
- SPECIAL_MODE_HOST_PASSTHROUGH, SPECIAL_MODE_CLEAR,
- SPECIAL_MODE_APP_DEFAULT]
+ SPECIAL_MODE_HOST_PASSTHROUGH, SPECIAL_MODE_MAXIMUM,
+ SPECIAL_MODE_CLEAR, SPECIAL_MODE_APP_DEFAULT]
def _get_app_default_mode(self, guest):
# Depending on if libvirt+qemu is new enough, we prefer
@@ -295,7 +296,8 @@ class DomainCpu(XMLBuilder):
log.debug("Using default cpu mode=%s", val)
if (val == self.SPECIAL_MODE_HOST_MODEL or
- val == self.SPECIAL_MODE_HOST_PASSTHROUGH):
+ val == self.SPECIAL_MODE_HOST_PASSTHROUGH or
+ val == self.SPECIAL_MODE_MAXIMUM):
self.model = None
self.vendor = None
self.model_fallback = None

View File

@@ -1,47 +0,0 @@
Subject: gui: Support maximum CPU mode
From: Andrea Bolognani abologna@redhat.com Fri Dec 6 22:28:09 2024 +0100
Date: Tue Dec 10 14:01:32 2024 +0100:
Git: 11b70218d3b38efae36db8ba4149702a6d51afc0
Allow the user to set it and recognize it correctly when the
domain is already using it.
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
diff --git a/virtManager/details/details.py b/virtManager/details/details.py
index e53c52ef0..0dc9d2d64 100644
--- a/virtManager/details/details.py
+++ b/virtManager/details/details.py
@@ -775,6 +775,8 @@ class vmmDetails(vmmGObjectUI):
virtinst.DomainCpu.SPECIAL_MODE_HOST_MODEL, False])
model.append(["host-passthrough", "05",
virtinst.DomainCpu.SPECIAL_MODE_HOST_PASSTHROUGH, False])
+ model.append(["maximum", "06",
+ virtinst.DomainCpu.SPECIAL_MODE_MAXIMUM, False])
model.append([None, None, None, True])
for name in domcaps.get_cpu_models():
model.append([name, name, name, False])
@@ -1915,7 +1917,8 @@ class vmmDetails(vmmGObjectUI):
# CPU model config
model = cpu.model or None
is_host = (cpu.mode in ["host-model", "host-passthrough"])
- if not model and is_host:
+ is_special_mode = (cpu.mode in virtinst.DomainCpu.SPECIAL_MODES)
+ if not model and is_special_mode:
model = cpu.mode
if model:
diff --git a/virtManager/preferences.py b/virtManager/preferences.py
index 5022f7ed3..df599d044 100644
--- a/virtManager/preferences.py
+++ b/virtManager/preferences.py
@@ -172,7 +172,8 @@ class vmmPreferences(vmmGObjectUI):
[DomainCpu.SPECIAL_MODE_HOST_MODEL_ONLY,
_("Nearest host CPU model")],
[DomainCpu.SPECIAL_MODE_HOST_MODEL, "host-model"],
- [DomainCpu.SPECIAL_MODE_HOST_PASSTHROUGH, "host-passthrough"]]:
+ [DomainCpu.SPECIAL_MODE_HOST_PASSTHROUGH, "host-passthrough"],
+ [DomainCpu.SPECIAL_MODE_MAXIMUM, "maximum"]]:
model.append(row)
combo.set_model(model)
uiutil.init_combo_text_column(combo, 1)

View File

@@ -1,240 +0,0 @@
Subject: cpu: Prefer maximum mode for many emulated guests
From: Andrea Bolognani abologna@redhat.com Fri Dec 6 23:02:29 2024 +0100
Date: Tue Dec 10 14:01:32 2024 +0100:
Git: 8af438dd58cafe90d591eef25e7510c313cf3036
The actual default CPU at the QEMU level is often a relatively
poor choice, which is stuck with just baseline functionality
and can sometimes not run modern guests at all.
Whenever possible, prefer maximum mode for a much nicer out of
the box experience.
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
diff --git a/tests/data/cli/compare/virt-install-aarch64-machdefault.xml b/tests/data/cli/compare/virt-install-aarch64-machdefault.xml
index f88a0fc17..d17c82573 100644
--- a/tests/data/cli/compare/virt-install-aarch64-machdefault.xml
+++ b/tests/data/cli/compare/virt-install-aarch64-machdefault.xml
@@ -18,9 +18,7 @@
<features>
<acpi/>
</features>
- <cpu mode="custom" match="exact">
- <model>cortex-a57</model>
- </cpu>
+ <cpu mode="maximum"/>
<clock offset="utc"/>
<devices>
<emulator>/usr/bin/qemu-system-aarch64</emulator>
diff --git a/tests/data/cli/compare/virt-install-aarch64-machvirt.xml b/tests/data/cli/compare/virt-install-aarch64-machvirt.xml
index f88a0fc17..d17c82573 100644
--- a/tests/data/cli/compare/virt-install-aarch64-machvirt.xml
+++ b/tests/data/cli/compare/virt-install-aarch64-machvirt.xml
@@ -18,9 +18,7 @@
<features>
<acpi/>
</features>
- <cpu mode="custom" match="exact">
- <model>cortex-a57</model>
- </cpu>
+ <cpu mode="maximum"/>
<clock offset="utc"/>
<devices>
<emulator>/usr/bin/qemu-system-aarch64</emulator>
diff --git a/tests/data/cli/compare/virt-install-arm-defaultmach-f20.xml b/tests/data/cli/compare/virt-install-arm-defaultmach-f20.xml
index b56d07880..bc8006252 100644
--- a/tests/data/cli/compare/virt-install-arm-defaultmach-f20.xml
+++ b/tests/data/cli/compare/virt-install-arm-defaultmach-f20.xml
@@ -15,6 +15,7 @@
<initrd>/f19-arm.initrd</initrd>
<cmdline>foo</cmdline>
</os>
+ <cpu mode="maximum"/>
<clock offset="utc"/>
<devices>
<emulator>/usr/bin/qemu-system-arm</emulator>
diff --git a/tests/data/cli/compare/virt-install-arm-virt-f20.xml b/tests/data/cli/compare/virt-install-arm-virt-f20.xml
index 9d2001697..dc74281b7 100644
--- a/tests/data/cli/compare/virt-install-arm-virt-f20.xml
+++ b/tests/data/cli/compare/virt-install-arm-virt-f20.xml
@@ -15,6 +15,7 @@
<initrd>/f19-arm.initrd</initrd>
<cmdline>console=ttyAMA0,1234 rw root=/dev/vda3</cmdline>
</os>
+ <cpu mode="maximum"/>
<clock offset="utc"/>
<devices>
<emulator>/usr/bin/qemu-system-arm</emulator>
diff --git a/tests/data/cli/compare/virt-install-riscv64-cdrom.xml b/tests/data/cli/compare/virt-install-riscv64-cdrom.xml
index 35cd1e712..1d6bd923c 100644
--- a/tests/data/cli/compare/virt-install-riscv64-cdrom.xml
+++ b/tests/data/cli/compare/virt-install-riscv64-cdrom.xml
@@ -14,6 +14,7 @@
<boot dev="cdrom"/>
<boot dev="hd"/>
</os>
+ <cpu mode="maximum"/>
<clock offset="utc"/>
<devices>
<emulator>/usr/bin/qemu-system-riscv64</emulator>
@@ -92,6 +93,7 @@
<type arch="riscv64" machine="virt">hvm</type>
<boot dev="hd"/>
</os>
+ <cpu mode="maximum"/>
<clock offset="utc"/>
<devices>
<emulator>/usr/bin/qemu-system-riscv64</emulator>
diff --git a/tests/data/cli/compare/virt-install-riscv64-cloud-init.xml b/tests/data/cli/compare/virt-install-riscv64-cloud-init.xml
index b83937ca5..815f93ea0 100644
--- a/tests/data/cli/compare/virt-install-riscv64-cloud-init.xml
+++ b/tests/data/cli/compare/virt-install-riscv64-cloud-init.xml
@@ -12,6 +12,7 @@
<os firmware="efi">
<type arch="riscv64" machine="virt">hvm</type>
</os>
+ <cpu mode="maximum"/>
<clock offset="utc"/>
<devices>
<emulator>/usr/bin/qemu-system-riscv64</emulator>
@@ -87,6 +88,7 @@
<type arch="riscv64" machine="virt">hvm</type>
<boot dev="hd"/>
</os>
+ <cpu mode="maximum"/>
<clock offset="utc"/>
<devices>
<emulator>/usr/bin/qemu-system-riscv64</emulator>
diff --git a/tests/data/cli/compare/virt-install-riscv64-graphics.xml b/tests/data/cli/compare/virt-install-riscv64-graphics.xml
index 659dae74f..04ab41933 100644
--- a/tests/data/cli/compare/virt-install-riscv64-graphics.xml
+++ b/tests/data/cli/compare/virt-install-riscv64-graphics.xml
@@ -13,6 +13,7 @@
<type arch="riscv64" machine="virt">hvm</type>
<boot dev="hd"/>
</os>
+ <cpu mode="maximum"/>
<clock offset="utc"/>
<devices>
<emulator>/usr/bin/qemu-system-riscv64</emulator>
diff --git a/tests/data/cli/compare/virt-install-riscv64-headless.xml b/tests/data/cli/compare/virt-install-riscv64-headless.xml
index 939e71b2a..27328a123 100644
--- a/tests/data/cli/compare/virt-install-riscv64-headless.xml
+++ b/tests/data/cli/compare/virt-install-riscv64-headless.xml
@@ -13,6 +13,7 @@
<type arch="riscv64" machine="virt">hvm</type>
<boot dev="hd"/>
</os>
+ <cpu mode="maximum"/>
<clock offset="utc"/>
<devices>
<emulator>/usr/bin/qemu-system-riscv64</emulator>
diff --git a/tests/data/cli/compare/virt-install-riscv64-kernel-boot.xml b/tests/data/cli/compare/virt-install-riscv64-kernel-boot.xml
index 640e5ee0d..c3714594a 100644
--- a/tests/data/cli/compare/virt-install-riscv64-kernel-boot.xml
+++ b/tests/data/cli/compare/virt-install-riscv64-kernel-boot.xml
@@ -15,6 +15,7 @@
<initrd>/initrd.img</initrd>
<cmdline>root=/dev/vda2</cmdline>
</os>
+ <cpu mode="maximum"/>
<clock offset="utc"/>
<devices>
<emulator>/usr/bin/qemu-system-riscv64</emulator>
diff --git a/tests/data/cli/compare/virt-install-riscv64-unattended.xml b/tests/data/cli/compare/virt-install-riscv64-unattended.xml
index 0a9f88b4e..7fdb32d04 100644
--- a/tests/data/cli/compare/virt-install-riscv64-unattended.xml
+++ b/tests/data/cli/compare/virt-install-riscv64-unattended.xml
@@ -12,6 +12,7 @@
<os firmware="efi">
<type arch="riscv64" machine="virt">hvm</type>
</os>
+ <cpu mode="maximum"/>
<clock offset="utc"/>
<devices>
<emulator>/usr/bin/qemu-system-riscv64</emulator>
@@ -90,6 +91,7 @@
<type arch="riscv64" machine="virt">hvm</type>
<boot dev="hd"/>
</os>
+ <cpu mode="maximum"/>
<clock offset="utc"/>
<devices>
<emulator>/usr/bin/qemu-system-riscv64</emulator>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 03c3316e1..dc9c156da 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -1247,7 +1247,7 @@ c.add_compare("--connect %(URI-KVM-ARMV7L)s --disk %(EXISTIMG1)s --import --os-v
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
c.add_invalid("--arch aarch64 --nodisks --pxe --connect " + utils.URIs.kvm_x86, grep="OS name is required") # catch missing osinfo for non-x86
-c.add_compare("--arch aarch64 --osinfo fedora19 --machine virt --boot kernel=/f19-arm.kernel,initrd=/f19-arm.initrd,kernel_args=\"console=ttyAMA0,1234 rw root=/dev/vda3\" --disk %(EXISTIMG1)s", "aarch64-machvirt")
+c.add_compare("--arch aarch64 --osinfo fedora19 --machine virt --cpu default --boot kernel=/f19-arm.kernel,initrd=/f19-arm.initrd,kernel_args=\"console=ttyAMA0,1234 rw root=/dev/vda3\" --disk %(EXISTIMG1)s", "aarch64-machvirt")
c.add_compare("--arch aarch64 --osinfo fedora19 --boot kernel=/f19-arm.kernel,initrd=/f19-arm.initrd,kernel_args=\"console=ttyAMA0,1234 rw root=/dev/vda3\" --disk %(EXISTIMG1)s", "aarch64-machdefault")
c.add_compare("--arch aarch64 --cdrom %(ISO-F26-NETINST)s --boot loader=CODE.fd,nvram.template=VARS.fd --disk %(EXISTIMG1)s --cpu none --events on_crash=preserve,on_reboot=destroy,on_poweroff=restart", "aarch64-cdrom") # cdrom test, but also --cpu none override, --events override, and headless
c.add_compare("--connect %(URI-KVM-AARCH64)s --disk %(EXISTIMG1)s --import --os-variant fedora21 --panic default --graphics vnc", "aarch64-kvm-import") # --import test, but also test --panic no-op, and --graphics
diff --git a/virtinst/domain/cpu.py b/virtinst/domain/cpu.py
index 91a9481cf..cc4053f88 100644
--- a/virtinst/domain/cpu.py
+++ b/virtinst/domain/cpu.py
@@ -275,11 +275,26 @@ class DomainCpu(XMLBuilder):
SPECIAL_MODE_HOST_PASSTHROUGH, SPECIAL_MODE_MAXIMUM,
SPECIAL_MODE_CLEAR, SPECIAL_MODE_APP_DEFAULT]
+ def _should_use_maximum_cpu_mode(self, guest, domcaps):
+ if (domcaps.supports_maximum_cpu_mode() and
+ guest.type == "qemu" and
+ (guest.os.is_x86() or
+ guest.os.is_arm_machvirt() or
+ guest.os.is_riscv_virt() or
+ guest.os.is_loongarch64())):
+ return True
+
+ return False
+
def _get_app_default_mode(self, guest):
# Depending on if libvirt+qemu is new enough, we prefer
# host-passthrough, then host-model, and finally host-model-only
+ # Emulated guests use maximum mode if available
domcaps = guest.lookup_domcaps()
+ if (self._should_use_maximum_cpu_mode(guest, domcaps)):
+ return self.SPECIAL_MODE_MAXIMUM
+
if domcaps.supports_safe_host_passthrough():
return self.SPECIAL_MODE_HOST_PASSTHROUGH
@@ -460,9 +475,12 @@ class DomainCpu(XMLBuilder):
if guest.os.is_arm_machvirt() and guest.type == "kvm":
self.mode = self.SPECIAL_MODE_HOST_PASSTHROUGH
- elif guest.os.is_arm64() and guest.os.is_arm_machvirt():
- # -M virt defaults to a 32bit CPU, even if using aarch64
- self.set_model(guest, "cortex-a57")
-
elif guest.os.is_x86() and guest.type == "kvm":
self._set_cpu_x86_kvm_default(guest)
+
+ else:
+ domcaps = guest.lookup_domcaps()
+
+ # Prefer to emulate a feature-rich CPU instead of a basic one
+ if (self._should_use_maximum_cpu_mode(guest, domcaps)):
+ self.set_special_mode(guest, self.SPECIAL_MODE_MAXIMUM)
diff --git a/virtinst/domcapabilities.py b/virtinst/domcapabilities.py
index 3a19591d9..5d82a351e 100644
--- a/virtinst/domcapabilities.py
+++ b/virtinst/domcapabilities.py
@@ -382,6 +382,10 @@ class DomainCapabilities(XMLBuilder):
return (m and m.supported and
"on" in m.get_enum("hostPassthroughMigratable").get_values())
+ def supports_maximum_cpu_mode(self):
+ m = self.cpu.get_mode("maximum")
+ return (m and m.supported)
+
def get_cpu_models(self):
models = []

View File

@@ -0,0 +1,25 @@
Subject: virtinst: cloudinit: include empty meta-data file
From: Pavel Hrdina phrdina@redhat.com Mon Sep 29 16:14:35 2025 +0200
Date: Wed Oct 1 06:38:27 2025 -0400:
Git: ea71cf9a8a4161ce6e19eacf5f0d86d40ab74f23
Refactor creation of cloud-init config files introduced a bug where we
stopped including empty meta-data file.
Introduced-by: 5b2d0997a1d2d213b17c227169da64e2fa7d09a6
Fixes: https://github.com/virt-manager/virt-manager/issues/975
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
diff --git a/virtinst/install/cloudinit.py b/virtinst/install/cloudinit.py
index 3f565f399..b2378fbfa 100644
--- a/virtinst/install/cloudinit.py
+++ b/virtinst/install/cloudinit.py
@@ -36,7 +36,7 @@ class _CloudInitConfig:
def _create_file(self):
content = self._content()
- if not content:
+ if content is None:
return None
fileobj = tempfile.NamedTemporaryFile(

View File

@@ -1,32 +0,0 @@
Subject: domcaps: get list of supported panic device models
From: Lin Ma lma@suse.de Tue Dec 3 13:32:15 2024 +0800
Date: Tue Dec 10 14:05:20 2024 +0100:
Git: c859c7acec38a68a46b3ee98b1ff494fa88d508e
libvirt commit a52cd504 added support for advertisting panic device models.
Let's use it in domcapabilities.
Signed-off-by: Lin Ma <lma@suse.de>
diff --git a/virtinst/domcapabilities.py b/virtinst/domcapabilities.py
index 5d82a351e..9e1b11932 100644
--- a/virtinst/domcapabilities.py
+++ b/virtinst/domcapabilities.py
@@ -115,6 +115,7 @@ class _Devices(_CapsBlock):
filesystem = XMLChildProperty(_make_capsblock("filesystem"), is_single=True)
redirdev = XMLChildProperty(_make_capsblock("redirdev"), is_single=True)
channel = XMLChildProperty(_make_capsblock("channel"), is_single=True)
+ panic = XMLChildProperty(_make_capsblock("panic"), is_single=True)
class _Features(_CapsBlock):
@@ -508,3 +509,9 @@ class DomainCapabilities(XMLBuilder):
return []
return self.features.hyperv.get_enum("features").get_values()
+
+ def supported_panic_models(self):
+ """
+ Return list of supported panic device models.
+ """
+ return self.devices.panic.get_enum("model").get_values()

View File

@@ -1,131 +0,0 @@
Subject: tests: Update capabilities for advertisting panic device models
From: Lin Ma lma@suse.de Tue Dec 3 18:45:52 2024 +0800
Date: Tue Dec 10 14:05:20 2024 +0100:
Git: f9ceec2b14cb4012cb40226f3c0c05ff1ac8f708
Signed-off-by: Lin Ma <lma@suse.de>
diff --git a/tests/data/capabilities/kvm-aarch64-domcaps.xml b/tests/data/capabilities/kvm-aarch64-domcaps.xml
index eeef1a17a..af8354b08 100644
--- a/tests/data/capabilities/kvm-aarch64-domcaps.xml
+++ b/tests/data/capabilities/kvm-aarch64-domcaps.xml
@@ -215,6 +215,11 @@
<value>lkcf</value>
</enum>
</crypto>
+ <panic supported='yes'>
+ <enum name='model'>
+ <value>pvpanic</value>
+ </enum>
+ </panic>
</devices>
<features>
<gic supported='yes'>
diff --git a/tests/data/capabilities/kvm-loongarch64-domcaps.xml b/tests/data/capabilities/kvm-loongarch64-domcaps.xml
index e9836fec4..d2b348f4c 100644
--- a/tests/data/capabilities/kvm-loongarch64-domcaps.xml
+++ b/tests/data/capabilities/kvm-loongarch64-domcaps.xml
@@ -152,6 +152,11 @@
<value>lkcf</value>
</enum>
</crypto>
+ <panic supported='yes'>
+ <enum name='model'>
+ <value>pvpanic</value>
+ </enum>
+ </panic>
</devices>
<features>
<gic supported='no'/>
diff --git a/tests/data/capabilities/kvm-ppc64le-domcaps.xml b/tests/data/capabilities/kvm-ppc64le-domcaps.xml
index 7d40b12ff..46234fd19 100644
--- a/tests/data/capabilities/kvm-ppc64le-domcaps.xml
+++ b/tests/data/capabilities/kvm-ppc64le-domcaps.xml
@@ -160,6 +160,12 @@
<value>lkcf</value>
</enum>
</crypto>
+ <panic supported='yes'>
+ <enum name='model'>
+ <value>pseries</value>
+ <value>pvpanic</value>
+ </enum>
+ </panic>
</devices>
<features>
<gic supported='no'/>
diff --git a/tests/data/capabilities/kvm-x86_64-domcaps-latest.xml b/tests/data/capabilities/kvm-x86_64-domcaps-latest.xml
index 91fabc5fa..b5e06eda6 100644
--- a/tests/data/capabilities/kvm-x86_64-domcaps-latest.xml
+++ b/tests/data/capabilities/kvm-x86_64-domcaps-latest.xml
@@ -259,6 +259,13 @@
<value>lkcf</value>
</enum>
</crypto>
+ <panic supported='yes'>
+ <enum name='model'>
+ <value>isa</value>
+ <value>hyperv</value>
+ <value>pvpanic</value>
+ </enum>
+ </panic>
</devices>
<features>
<gic supported='no'/>
diff --git a/tests/data/capabilities/qemu-riscv64-domcaps.xml b/tests/data/capabilities/qemu-riscv64-domcaps.xml
index c8a9e5915..30eca7129 100644
--- a/tests/data/capabilities/qemu-riscv64-domcaps.xml
+++ b/tests/data/capabilities/qemu-riscv64-domcaps.xml
@@ -167,6 +167,11 @@
<value>lkcf</value>
</enum>
</crypto>
+ <panic supported='yes'>
+ <enum name='model'>
+ <value>pvpanic</value>
+ </enum>
+ </panic>
</devices>
<features>
<gic supported='no'/>
diff --git a/tests/test_capabilities.py b/tests/test_capabilities.py
index 1ebd564d4..5351c8352 100644
--- a/tests/test_capabilities.py
+++ b/tests/test_capabilities.py
@@ -101,6 +101,7 @@ def testDomainCapabilitiesx86():
assert caps.supports_memorybacking_memfd()
assert caps.supports_redirdev_usb()
assert caps.supports_channel_spicevmc()
+ assert caps.supported_panic_models() == ["isa", "hyperv", "pvpanic"]
xml = open(DATADIR + "/kvm-x86_64-domcaps-amd-sev.xml").read()
caps = DomainCapabilities(utils.URIs.open_testdriver_cached(), xml)
@@ -119,6 +120,7 @@ def testDomainCapabilitiesAArch64():
assert caps.supports_memorybacking_memfd()
assert caps.supports_redirdev_usb()
assert caps.supports_channel_spicevmc()
+ assert caps.supported_panic_models() == ["pvpanic"]
def testDomainCapabilitiesPPC64le():
@@ -137,6 +139,7 @@ def testDomainCapabilitiesPPC64le():
assert caps.supports_memorybacking_memfd()
assert caps.supports_redirdev_usb()
assert not caps.supports_channel_spicevmc()
+ assert caps.supported_panic_models() == ["pseries", "pvpanic"]
def testDomainCapabilitiesRISCV64():
@@ -167,6 +170,7 @@ def testDomainCapabilitiesRISCV64():
assert caps.supports_memorybacking_memfd()
assert caps.supports_redirdev_usb()
assert caps.supports_channel_spicevmc()
+ assert caps.supported_panic_models() == ["pvpanic"]
def testDomainCapabilitiesLoongArch64():
@@ -197,3 +201,4 @@ def testDomainCapabilitiesLoongArch64():
assert caps.supports_memorybacking_memfd()
assert caps.supports_redirdev_usb()
assert caps.supports_channel_spicevmc()
+ assert caps.supported_panic_models() == ["pvpanic"]

View File

@@ -1,29 +0,0 @@
Subject: addhardware: panic: Fill in model combo with advertised values by libvirt
From: Lin Ma lma@suse.de Tue Dec 3 18:46:28 2024 +0800
Date: Tue Dec 10 14:05:20 2024 +0100:
Git: f92c25749bcd88bb7412c74119b25802327916e6
The commit c5a46646 asks libvirt to fill in a default panic model for us.
Now libvirt domcaps can advertise panic models, Let's fill in the panic
model combo with the advertised values.
Signed-off-by: Lin Ma <lma@suse.de>
diff --git a/virtManager/addhardware.py b/virtManager/addhardware.py
index e6e4ec1d1..0faf30a53 100644
--- a/virtManager/addhardware.py
+++ b/virtManager/addhardware.py
@@ -860,8 +860,13 @@ class vmmAddHardware(vmmGObjectUI):
def _build_panic_model_combo(self):
+ guest = self.vm.get_xmlobj()
values = [[None, _("Hypervisor default")]]
+ for m in guest.lookup_domcaps().supported_panic_models():
+ values.append([m, m])
+
uiutil.build_simple_combo(self.widget("panic-model"), values)
+ uiutil.set_list_selection(self.widget("panic-model"), None)
def _build_controller_type_combo(self):

View File

@@ -1,385 +0,0 @@
Subject: cli, man: Always list --osinfo before --os-variant
From: Andrea Bolognani abologna@redhat.com Mon Dec 2 19:25:51 2024 +0100
Date: Tue Dec 10 14:06:12 2024 +0100:
Git: c3debb4eda6b251fdad87f1ba5326671bb558d2b
The former is the preferred spelling and it should always be
presented first to the user.
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
diff --git a/man/virt-install.rst b/man/virt-install.rst
index 775d7ce70..dc0b6d9cc 100644
--- a/man/virt-install.rst
+++ b/man/virt-install.rst
@@ -1022,7 +1022,7 @@ GUEST OS OPTIONS
================
-``--os-variant``, ``--osinfo``
+``--osinfo``, ``--os-variant``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**Syntax:** ``--osinfo`` [OSNAME|OPT1=VAL1,...]
@@ -1031,7 +1031,7 @@ Optimize the guest configuration for a specific operating system.
For most cases, an OS must be specified or detected from the install
media so performance critical features like virtio can be enabled.
-The simplest usage is ``--os-variant OSNAME`` or ``--osinfo OSNAME``,
+The simplest usage is ``--osinfo OSNAME`` or ``--os-variant OSNAME``,
for example ``--osinfo fedora32``. The supported suboptions are:
``name=``, ``short-id=``
@@ -1076,7 +1076,7 @@ VIRTINSTALL_OSINFO_DISABLE_REQUIRE=1.
Use the command ``virt-install --osinfo list`` to get the list of the
accepted OS variants. See ``osinfo-query os`` for even more output.
-Note: ``--os-variant`` and ``--osinfo`` are aliases for one another.
+Note: ``--osinfo`` and ``--os-variant`` are aliases for one another.
``--osinfo`` is the preferred new style naming.
diff --git a/man/virt-xml.rst b/man/virt-xml.rst
index dfb6fd9fb..7bccffbf9 100644
--- a/man/virt-xml.rst
+++ b/man/virt-xml.rst
@@ -180,7 +180,7 @@ These options decide what action to take after altering the XML. In the common c
GUEST OS OPTIONS
================
-``--os-variant``, ``--osinfo`` OS_VARIANT
+``--osinfo``, ``--os-variant`` OS_VARIANT
Optimize the guest configuration for a specific operating system (ex.
'fedora29', 'rhel7', 'win10'). While not required, specifying this
options is HIGHLY RECOMMENDED, as it can greatly increase performance
@@ -194,7 +194,7 @@ GUEST OS OPTIONS
Use the command ``virt-xml --osinfo list`` to get the list of the
accepted OS variants. See ``osinfo-query os`` for even more output.
- See virt-install(1) documentation for more details about ``--os-variant/--osinfo``
+ See virt-install(1) documentation for more details about ``--osinfo/--os-variant``
CONVERSION OPTIONS
diff --git a/tests/test_cli.py b/tests/test_cli.py
index dc9c156da..51a1883c4 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -1039,8 +1039,8 @@ c.add_compare("--connect %(URI-KVM-X86)s --install fedora26", "osinfo-url") # g
c.add_valid("--location https://foobar.com --os-variant detect=yes,name=win7", nogrep="Please file a bug against virt-install") # os detection succeeds, the fallback warning shouldn't be printed
c.add_valid("--pxe --os-variant detect=yes,name=win7", grep="Please file a bug against virt-install") # os detection fails, so fallback warning should be printed
c.add_valid("--cdrom http://example.com/path/to/some.iso --os-variant detect=yes,require=no", grep="Please file a bug against virt-install") # detection fails with require=no, we should print the error about using fallback name=
-c.add_invalid("--pxe --os-variant detect=yes,require=yes", grep="--os-variant/--osinfo OS name is required") # No os-variant detected, but require=yes
-c.add_invalid("--pxe --osinfo detect=yes", grep="--os-variant/--osinfo OS name is required") # --osinfo detect=on failed, but with implied require=yes
+c.add_invalid("--pxe --os-variant detect=yes,require=yes", grep="--osinfo/--os-variant OS name is required") # No os-variant detected, but require=yes
+c.add_invalid("--pxe --osinfo detect=yes", grep="--osinfo/--os-variant OS name is required") # --osinfo detect=on failed, but with implied require=yes
c.add_invalid("--pxe --virt-type foobar", grep="Host does not support domain type")
c.add_invalid("--pxe --os-variant farrrrrrrge", grep="Unknown OS name")
c.add_invalid("--pxe --boot menu=foobar", grep="menu must be 'yes' or 'no'")
@@ -1409,9 +1409,9 @@ c.add_valid("test-for-virtxml --edit --cpu host-passthrough --no-define --start
c.add_valid("test-for-virtxml --edit --metadata name=test-for-virtxml", grep="requested changes will have no effect")
c.add_valid("--print-diff test-for-virtxml --remove-device --disk boot.order=5", grep="boot order=\"5")
c.add_invalid("test --edit 2 --events on_poweroff=destroy", grep="'--edit 2' doesn't make sense with --events")
-c.add_invalid("test --os-variant fedora26 --edit --cpu host-passthrough", grep="--os-variant/--osinfo is not supported")
-c.add_invalid("test-for-virtxml --os-variant fedora26 --remove-device --disk 1", grep="--os-variant/--osinfo is not supported")
-c.add_invalid("--build-xml --os-variant fedora26 --disk path=foo", grep="--os-variant/--osinfo is not supported")
+c.add_invalid("test --os-variant fedora26 --edit --cpu host-passthrough", grep="--osinfo/--os-variant is not supported")
+c.add_invalid("test-for-virtxml --os-variant fedora26 --remove-device --disk 1", grep="--osinfo/--os-variant is not supported")
+c.add_invalid("--build-xml --os-variant fedora26 --disk path=foo", grep="--osinfo/--os-variant is not supported")
c.add_invalid("domain-idontexist --edit --cpu host-passthrough --start", grep="Could not find domain")
c.add_invalid("test-state-shutoff --edit --update --boot menu=on --start", grep="Cannot use --update")
c.add_invalid("test --edit --update --events on_poweroff=destroy", grep="Don't know how to --update for --events")
diff --git a/virtManager/createvm.py b/virtManager/createvm.py
index d5f49fb70..e37921603 100644
--- a/virtManager/createvm.py
+++ b/virtManager/createvm.py
@@ -103,7 +103,7 @@ class _GuestData:
self.init = None
self.machine = None
- self.os_variant = None
+ self.osinfo = None
self.uefi_requested = None
self.name = None
@@ -138,8 +138,8 @@ class _GuestData:
# If no machine was explicitly selected, we don't overwrite
# it, because we want to
guest.os.machine = self.machine
- if self.os_variant:
- guest.set_os_name(self.os_variant)
+ if self.osinfo:
+ guest.set_os_name(self.osinfo)
if self.uefi_requested:
guest.uefi_requested = self.uefi_requested
@@ -1578,7 +1578,7 @@ class vmmCreateVM(vmmGObjectUI):
self._gdata.cdrom = cdrom
self._gdata.extra_args = extra
self._gdata.livecd = False
- self._gdata.os_variant = osobj and osobj.name or None
+ self._gdata.osinfo = osobj and osobj.name or None
guest = self._gdata.build_guest()
installer = self._gdata.build_installer()
except Exception as e:
diff --git a/virtinst/cli.py b/virtinst/cli.py
index b58717ab2..43d45a508 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -494,7 +494,7 @@ def fail_conflicting(option1, option2):
def _get_completer_parsers():
return VIRT_PARSERS + [ParserCheck, ParserLocation,
ParserUnattended, ParserInstall, ParserCloudInit,
- ParserOSVariant]
+ ParserOSInfo]
def _virtparser_completer(prefix, **kwargs):
@@ -930,7 +930,7 @@ def add_disk_option(stog, editexample=False):
"--disk=?") + editmsg)
-def add_os_variant_option(parser, virtinstall):
+def add_osinfo_option(parser, virtinstall):
osg = parser.add_argument_group(_("OS options"))
if virtinstall:
@@ -942,7 +942,7 @@ def add_os_variant_option(parser, virtinstall):
"Example values: fedora29, rhel7.0, win10, ...\n"
"Use '--osinfo list' to see a full list.")
- osg.add_argument("--os-variant", "--osinfo", help=msg)
+ osg.add_argument("--osinfo", "--os-variant", help=msg)
return osg
@@ -1880,11 +1880,11 @@ def parse_location(optstr):
return parsedata.location, parsedata.kernel, parsedata.initrd
-########################
-# --os-variant parsing #
-########################
+####################
+# --osinfo parsing #
+####################
-class OSVariantData(object):
+class OSInfoData(object):
_REQUIRE_ON = 1
_REQUIRE_AUTO = 3
@@ -1936,8 +1936,8 @@ class OSVariantData(object):
return self._name
-class ParserOSVariant(VirtCLIParser):
- cli_arg_name = "os_variant"
+class ParserOSInfo(VirtCLIParser):
+ cli_arg_name = "osinfo"
supports_clearxml = False
@classmethod
@@ -1956,9 +1956,9 @@ class ParserOSVariant(VirtCLIParser):
return super().parse(inst)
-def parse_os_variant(optstr):
- data = OSVariantData()
- parser = ParserOSVariant(optstr)
+def parse_osinfo(optstr):
+ data = OSInfoData()
+ parser = ParserOSInfo(optstr)
parser.parse(data)
data.validate()
return data
@@ -5051,7 +5051,7 @@ def check_option_introspection(options):
def check_osinfo_list(options):
- if options.os_variant != "list":
+ if options.osinfo != "list":
return False
for osobj in OSDB.list_os():
diff --git a/virtinst/install/installertreemedia.py b/virtinst/install/installertreemedia.py
index 8b208bf50..dc6519eef 100644
--- a/virtinst/install/installertreemedia.py
+++ b/virtinst/install/installertreemedia.py
@@ -29,15 +29,15 @@ def _is_url(url):
class _LocationData(object):
- def __init__(self, os_variant, kernel_pairs, os_media, os_tree):
- self.os_variant = os_variant
+ def __init__(self, osinfo, kernel_pairs, os_media, os_tree):
+ self.osinfo = osinfo
self.kernel_pairs = kernel_pairs
self.os_media = os_media
self.os_tree = os_tree
self.kernel_url_arg = None
- if self.os_variant:
- osobj = OSDB.lookup_os(self.os_variant)
+ if self.osinfo:
+ osobj = OSDB.lookup_os(self.osinfo)
self.kernel_url_arg = osobj.get_kernel_url_arg()
@@ -171,7 +171,7 @@ class InstallerTreeMedia(object):
return self._cached_data
store = None
- os_variant = None
+ osinfo = None
os_media = None
os_tree = None
kernel_paths = []
@@ -187,14 +187,14 @@ class InstallerTreeMedia(object):
if store:
kernel_paths = store.get_kernel_paths()
- os_variant = store.get_osdict_info()
+ osinfo = store.get_osdict_info()
os_media = store.get_os_media()
os_tree = store.get_os_tree()
if has_location_kernel:
kernel_paths = [
(self._location_kernel, self._location_initrd)]
- self._cached_data = _LocationData(os_variant, kernel_paths,
+ self._cached_data = _LocationData(osinfo, kernel_paths,
os_media, os_tree)
return self._cached_data
@@ -236,8 +236,8 @@ class InstallerTreeMedia(object):
self._initrd_injections.append((scriptpath, expected_filename))
def _prepare_kernel_url_arg(self, guest, cache):
- os_variant = cache.os_variant or guest.osinfo.name
- osobj = OSDB.lookup_os(os_variant)
+ osinfo = cache.osinfo or guest.osinfo.name
+ osobj = OSDB.lookup_os(osinfo)
return osobj.get_kernel_url_arg()
def _prepare_kernel_args(self, guest, cache, unattended_scripts):
@@ -304,7 +304,7 @@ class InstallerTreeMedia(object):
def detect_distro(self, guest):
fetcher = self._get_fetcher(guest, None)
cache = self._get_cached_data(guest, fetcher)
- return cache.os_variant
+ return cache.osinfo
def get_os_media(self, guest, meter):
fetcher = self._get_fetcher(guest, meter)
diff --git a/virtinst/virtinstall.py b/virtinst/virtinstall.py
index 15fd6ae9d..e56486055 100644
--- a/virtinst/virtinstall.py
+++ b/virtinst/virtinstall.py
@@ -571,7 +571,7 @@ def installer_detect_distro(guest, installer, osdata):
fail(_("Error validating install location: %s") % str(e))
msg = _(
- "--os-variant/--osinfo OS name is required, but no value was\n"
+ "--osinfo/--os-variant OS name is required, but no value was\n"
"set or detected.")
if os_set:
return
@@ -650,7 +650,7 @@ def _build_options_guest(conn, options):
def build_guest_instance(conn, options):
installdata = cli.parse_install(options.install)
- osdata = cli.parse_os_variant(options.os_variant or installdata.os)
+ osdata = cli.parse_osinfo(options.osinfo or installdata.os)
options.boot_was_set = bool(options.boot)
if options.reinstall:
@@ -1076,7 +1076,7 @@ def parse_args():
cli.add_boot_options(insg)
insg.add_argument("--init", help=argparse.SUPPRESS)
- osg = cli.add_os_variant_option(parser, virtinstall=True)
+ osg = cli.add_osinfo_option(parser, virtinstall=True)
osg.add_argument("--os-type", dest="old_os_type", help=argparse.SUPPRESS)
devg = parser.add_argument_group(_("Device Options"))
@@ -1188,8 +1188,8 @@ def set_test_stub_options(options): # pragma: no cover
options.disk = "none"
if not options.graphics:
options.graphics = "none"
- if not options.os_variant:
- options.os_variant = "fedora27"
+ if not options.osinfo:
+ options.osinfo = "fedora27"
def main(conn=None):
diff --git a/virtinst/virtxml.py b/virtinst/virtxml.py
index 6a16532cd..bcd25eb48 100644
--- a/virtinst/virtxml.py
+++ b/virtinst/virtxml.py
@@ -44,11 +44,11 @@ def get_diff(origxml, newxml):
return diff
-def set_os_variant(guest, os_variant):
- if os_variant is None:
+def set_osinfo(guest, osinfo):
+ if osinfo is None:
return
- osdata = cli.parse_os_variant(os_variant)
+ osdata = cli.parse_osinfo(osinfo)
if osdata.get_name():
guest.set_os_name(osdata.get_name())
@@ -97,13 +97,13 @@ class Action:
def validate_action(action, conn, options):
- if options.os_variant is not None:
+ if options.osinfo is not None:
if action.is_edit:
- fail(_("--os-variant/--osinfo is not supported with --edit"))
+ fail(_("--osinfo/--os-variant is not supported with --edit"))
if action.is_remove_device:
- fail(_("--os-variant/--osinfo is not supported with --remove-device"))
+ fail(_("--osinfo/--os-variant is not supported with --remove-device"))
if action.is_build_xml:
- fail(_("--os-variant/--osinfo is not supported with --build-xml"))
+ fail(_("--osinfo/--os-variant is not supported with --build-xml"))
if not action.parserclass.guest_propname and action.is_build_xml:
fail(_("--build-xml not supported for {cli_flag}").format(
@@ -251,11 +251,11 @@ def action_edit(action, guest):
return devs
-def action_add_device(action, guest, os_variant, input_devs):
+def action_add_device(action, guest, osinfo, input_devs):
parserclass = action.parserclass
parservalue = action.parservalue
- set_os_variant(guest, os_variant)
+ set_osinfo(guest, osinfo)
if input_devs:
for dev in input_devs:
@@ -294,7 +294,7 @@ def action_build_xml(action, guest):
def perform_action(action, guest, options, input_devs):
if action.is_add_device:
- return action_add_device(action, guest, options.os_variant, input_devs)
+ return action_add_device(action, guest, options.osinfo, input_devs)
if action.is_remove_device:
return action_remove_device(action, guest)
if action.is_edit:
@@ -483,7 +483,7 @@ def parse_args():
outg.add_argument("--confirm", action="store_true",
help=_("Require confirmation before saving any results."))
- cli.add_os_variant_option(parser, virtinstall=False)
+ cli.add_osinfo_option(parser, virtinstall=False)
conv = parser.add_argument_group(_("Conversion options"))
cli.ParserConvertToQ35.register()

View File

@@ -1,71 +0,0 @@
Subject: snapshots: default to same snapshot mode as currently used snapshot
From: Pavel Hrdina phrdina@redhat.com Tue Jan 21 11:09:00 2025 +0100
Date: Mon Jan 27 22:59:56 2025 +0100:
Git: 40d86086b6b903982b5d0f97bd6763fc54bfb115
Using internal and external snapshot mode for the same VM has some
limitations. When creating new snapshot default to the same mode as
already existing currently used snapshot. If there is no existing
snapshot default to external snapshot.
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
diff --git a/virtManager/details/snapshots.py b/virtManager/details/snapshots.py
index a4f38de6d..00aa00708 100644
--- a/virtManager/details/snapshots.py
+++ b/virtManager/details/snapshots.py
@@ -138,7 +138,14 @@ class vmmSnapshotNew(vmmGObjectUI):
mode_external = self.widget("snapshot-new-mode-external")
mode_internal = self.widget("snapshot-new-mode-internal")
- if mode_external.is_sensitive():
+ use_external = mode_external.is_sensitive()
+
+ if use_external:
+ current_mode = self._get_current_mode()
+ if current_mode == "internal":
+ use_external = False
+
+ if use_external:
mode_external.set_active(True)
else:
mode_internal.set_active(True)
@@ -342,6 +349,17 @@ class vmmSnapshotNew(vmmGObjectUI):
self.topwin)
progWin.run()
+ def _get_current_mode(self):
+ current = self.vm.get_current_snapshot()
+
+ if current is None:
+ return None
+
+ if current.is_external():
+ return "external"
+
+ return "internal"
+
################
# UI listeners #
diff --git a/virtManager/object/domain.py b/virtManager/object/domain.py
index dbb932162..5aade01d8 100644
--- a/virtManager/object/domain.py
+++ b/virtManager/object/domain.py
@@ -1156,6 +1156,16 @@ class vmmDomain(vmmLibvirtObject):
self._snapshot_list = newlist
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
+
+ return None
+
@vmmLibvirtObject.lifecycle_action
def revert_to_snapshot(self, snap):
# no use trying to set the guest time if is going to be switched off

View File

@@ -0,0 +1,27 @@
Subject: Calling loader.close() before pixbuf assignment to avoid NoneType pixbuf
From: ropbear ropbear@selfhosted.systems Fri Oct 31 17:41:15 2025 -0400
Date: Tue Nov 11 08:48:15 2025 +0100:
Git: f907ede75bbcfd87cc49f18d0da3e0bfec3d29f8
In the case loader.close() has more parsing to do, get_pixbuf() can
return a NoneType which causes issues in the snapshot view. Calling
loader.close() before this allows for proper cleanup before calling
get_pixbuf().
https://docs.gtk.org/gdk-pixbuf/method.PixbufLoader.close.html
https://docs.gtk.org/gdk-pixbuf/method.PixbufLoader.get_pixbuf.html
diff --git a/virtManager/details/snapshots.py b/virtManager/details/snapshots.py
index 0d413a98d..f2b229f5e 100644
--- a/virtManager/details/snapshots.py
+++ b/virtManager/details/snapshots.py
@@ -32,8 +32,8 @@ mimemap = {
def _make_screenshot_pixbuf(mime, sdata):
loader = GdkPixbuf.PixbufLoader.new_with_mime_type(mime)
loader.write(sdata)
- pixbuf = loader.get_pixbuf()
loader.close()
+ pixbuf = loader.get_pixbuf()
maxsize = 450

View File

@@ -1,28 +0,0 @@
Subject: snapshots: warn users to not mix snapshot modes
From: Pavel Hrdina phrdina@redhat.com Tue Jan 21 12:11:10 2025 +0100
Date: Mon Jan 27 22:59:56 2025 +0100:
Git: 54dc858f79a973242394aa50c4db7c00385e9f5d
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
diff --git a/virtManager/details/snapshots.py b/virtManager/details/snapshots.py
index 00aa00708..3da7d5aca 100644
--- a/virtManager/details/snapshots.py
+++ b/virtManager/details/snapshots.py
@@ -370,6 +370,16 @@ class vmmSnapshotNew(vmmGObjectUI):
self._populate_memory_path()
def _ok_clicked_cb(self, src):
+ current_mode = self._get_current_mode()
+
+ if current_mode and current_mode != self._get_mode():
+ result = self.err.yes_no(_("Mixing external and internal snapshots for "
+ "the same VM is not recommended. Are you "
+ "sure you want to continue?"))
+
+ if not result:
+ return
+
return self._create_new_snapshot()
def _mode_toggled_cb(self, src):

View File

@@ -1,32 +0,0 @@
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):

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,61 @@
Subject: virtinst: interface: add support for backend.hostname and backend.fqdn
From: Pavel Hrdina phrdina@redhat.com Fri Nov 21 10:11:34 2025 +0100
Date: Fri Nov 21 10:18:56 2025 +0100:
Git: d57e2e738f37444a48c1e762ee63114583d6348f
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
diff --git a/tests/data/cli/compare/virt-install-many-devices.xml b/tests/data/cli/compare/virt-install-many-devices.xml
index 9b8b3c6ba..5edca096d 100644
--- a/tests/data/cli/compare/virt-install-many-devices.xml
+++ b/tests/data/cli/compare/virt-install-many-devices.xml
@@ -680,6 +680,11 @@
<range start="5000" end="6000" to="5"/>
</portForward>
</interface>
+ <interface type="user">
+ <backend type="passt" hostname="test" fqdn="test.example.com"/>
+ <mac address="00:11:22:33:44:55"/>
+ <model type="virtio"/>
+ </interface>
<interface type="hostdev">
<mac address="00:11:22:33:44:55"/>
<model type="virtio"/>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index b371e604b..741f1b4c2 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -675,6 +675,7 @@ source.reservations.managed=no,source.reservations.source.type=unix,source.reser
--network passt,portForward=8080
--network passt,portForward0=7000-8000/udp,portForward1=127.0.0.1:2222:22
--network passt,portForward0=2001:db8:ac10:fd01::1:10:3000-4000:30,portForward1=127.0.0.1:5000-6000:5
+--network passt,backend.hostname=test,backend.fqdn=test.example.com
--network type=hostdev,source.address.type=pci,source.address.domain=0x0,source.address.bus=0x00,source.address.slot=0x07,source.address.function=0x0
--network hostdev=pci_0000_00_09_0
--network hostdev=0:0:4.0
diff --git a/virtinst/cli.py b/virtinst/cli.py
index 1203b0c8d..ed97e8809 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -4272,6 +4272,8 @@ class ParserNetwork(VirtCLIParser):
# Standard XML options
cls.add_arg("type", "type", cb=cls.set_type_cb)
cls.add_arg("backend.type", "backend.type")
+ cls.add_arg("backend.hostname", "backend.hostname")
+ cls.add_arg("backend.fqdn", "backend.fqdn")
cls.add_arg("backend.logFile", "backend.logFile")
cls.add_arg("trustGuestRxFilters", "trustGuestRxFilters", is_onoff=True)
diff --git a/virtinst/devices/interface.py b/virtinst/devices/interface.py
index 333b92eca..9d82ab586 100644
--- a/virtinst/devices/interface.py
+++ b/virtinst/devices/interface.py
@@ -132,6 +132,8 @@ class _Backend(XMLBuilder):
XML_NAME = "backend"
type = XMLProperty("./@type")
+ hostname = XMLProperty("./@hostname")
+ fqdn = XMLProperty("./@fqdn")
logFile = XMLProperty("./@logFile", do_abspath=True)

View File

@@ -0,0 +1,79 @@
Subject: virtinst: add support for acpi-generic-initiator
From: Nathan Chen nathanc@nvidia.com Thu Oct 23 20:42:55 2025 -0700
Date: Fri Nov 21 10:43:04 2025 +0100:
Git: 53df7b496b6fd0c1194608987d0de800da1e1c54
A minimal config to enable acpi-generic-initiator would be
$ virt-install
...args...
--hostdev net_00_1c_25_10_b1_e4,acpi.nodeset=0,2-4
Signed-off-by: Nathan Chen <nathanc@nvidia.com>
diff --git a/tests/data/cli/compare/virt-install-many-devices.xml b/tests/data/cli/compare/virt-install-many-devices.xml
index 5edca096d..83d0b948c 100644
--- a/tests/data/cli/compare/virt-install-many-devices.xml
+++ b/tests/data/cli/compare/virt-install-many-devices.xml
@@ -891,6 +891,7 @@
<address domain="0" bus="0" slot="25" function="0"/>
</source>
<rom bar="off"/>
+ <acpi nodeset="0,2"/>
<boot order="4"/>
</hostdev>
<hostdev mode="subsystem" type="usb" managed="yes">
@@ -942,6 +943,7 @@
<address bus="0" target="0" unit="0"/>
</source>
<rom bar="on"/>
+ <acpi nodeset="0-2"/>
</hostdev>
<hostdev mode="subsystem" type="usb" managed="yes">
<source>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 741f1b4c2..da4fd3f45 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -741,7 +741,7 @@ source.reservations.managed=no,source.reservations.source.type=unix,source.reser
--console pty,target_type=virtio
---hostdev net_00_1c_25_10_b1_e4,boot_order=4,rom_bar=off
+--hostdev net_00_1c_25_10_b1_e4,boot_order=4,rom_bar=off,acpi.nodeset=0,2
--host-device usb_device_781_5151_2004453082054CA1BEEE
--host-device 001.003
--hostdev 15:0.1
@@ -749,7 +749,7 @@ source.reservations.managed=no,source.reservations.source.type=unix,source.reser
--hostdev 0:15:0.3,address.type=pci,address.zpci.uid=0xffff,address.zpci.fid=0xffffffff
--host-device 0x062a:0x0001,driver_name=vfio
--host-device 0483:2016
---host-device pci_8086_2829_scsi_host_scsi_device_lun0,rom.bar=on
+--host-device pci_8086_2829_scsi_host_scsi_device_lun0,rom.bar=on,acpi.nodeset=0-2
--hostdev usb_5_20 --hostdev usb_5_21
--hostdev wlan0,type=net
--hostdev /dev/vdz,type=storage
diff --git a/virtinst/cli.py b/virtinst/cli.py
index ed97e8809..c9cb3fcfe 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -5284,6 +5284,7 @@ class ParserHostdev(VirtCLIParser):
cls.add_arg("name", None, cb=cls.set_name_cb, lookup_cb=cls.name_lookup_cb)
cls.add_arg("driver.name", "driver_name")
cls.add_arg("rom.bar", "rom_bar", is_onoff=True)
+ cls.add_arg("acpi.nodeset", "acpi_nodeset", can_comma=True)
cls.add_arg("source.startupPolicy", "startup_policy")
diff --git a/virtinst/devices/hostdev.py b/virtinst/devices/hostdev.py
index be9bf3eaf..43d5322f3 100644
--- a/virtinst/devices/hostdev.py
+++ b/virtinst/devices/hostdev.py
@@ -128,6 +128,7 @@ class DeviceHostdev(Device):
driver_name = XMLProperty("./driver/@name")
rom_bar = XMLProperty("./rom/@bar", is_onoff=True)
+ acpi_nodeset = XMLProperty("./acpi/@nodeset")
# type=scsi handling
scsi_adapter = XMLProperty("./source/adapter/@name")

View File

@@ -0,0 +1,64 @@
Subject: virtinst: add support for pcihole64
From: Nathan Chen nathanc@nvidia.com Fri Oct 24 21:39:45 2025 +0000
Date: Fri Nov 21 10:47:37 2025 +0100:
Git: 411f019f81a03ca99c8fa480c8af0974e7d4179a
A minimal config to specify high MMIO region size would be
$ virt-install
...args...
--controller pci,index=0,model=pcie-root,pcihole64=4294967296,pcihole64.unit=KiB
Signed-off-by: Nathan Chen <nathanc@nvidia.com>
diff --git a/tests/data/cli/compare/virt-install-many-devices.xml b/tests/data/cli/compare/virt-install-many-devices.xml
index 83d0b948c..ddfbbe058 100644
--- a/tests/data/cli/compare/virt-install-many-devices.xml
+++ b/tests/data/cli/compare/virt-install-many-devices.xml
@@ -485,6 +485,7 @@
</controller>
<controller type="pci" index="1" model="pci-root">
<target index="1"/>
+ <pcihole64 unit="KiB">4294967296</pcihole64>
</controller>
<controller type="pci" index="2" model="pci-bridge">
<target chassisNr="1" memReserve="8196"/>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index da4fd3f45..99f4a59dc 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -703,7 +703,7 @@ source.reservations.managed=no,source.reservations.source.type=unix,source.reser
--controller scsi,,model=virtio-scsi,driver_queues=4,driver.queues=4,driver.iothread=2,vectors=15
--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=1,model=pci-root,target.index=1,pcihole64=4294967296,pcihole64.unit=KiB
--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
diff --git a/virtinst/cli.py b/virtinst/cli.py
index c9cb3fcfe..b1499ef67 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -4492,6 +4492,8 @@ class ParserController(VirtCLIParser):
cls.add_arg("target.index", "target_index")
cls.add_arg("target.node", "target_node")
cls.add_arg("target.memReserve", "target_memReserve")
+ cls.add_arg("pcihole64", "pcihole64")
+ cls.add_arg("pcihole64.unit", "pcihole64_unit")
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 754bcd666..f3c4ce61d 100644
--- a/virtinst/devices/controller.py
+++ b/virtinst/devices/controller.py
@@ -91,6 +91,8 @@ class DeviceController(Device):
target_index = XMLProperty("./target/@index", is_int=True)
target_node = XMLProperty("./target/node", is_int=True)
target_memReserve = XMLProperty("./target/@memReserve", is_int=True)
+ pcihole64 = XMLProperty("./pcihole64", is_int=True)
+ pcihole64_unit = XMLProperty("./pcihole64/@unit")
def _get_attached_disk_devices(self, guest):
ret = []

View File

@@ -0,0 +1,122 @@
Subject: maint: use constants instead of strings for boot devices
From: Pavel Hrdina phrdina@redhat.com Fri Oct 17 16:32:33 2025 +0200
Date: Thu Dec 4 16:55:51 2025 +0100:
Git: 161fb1baaff45f260b278e9df900293ab12da820
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
diff --git a/virtManager/details/details.py b/virtManager/details/details.py
index 22a44719c..6cadf8bf0 100644
--- a/virtManager/details/details.py
+++ b/virtManager/details/details.py
@@ -2274,10 +2274,22 @@ class vmmDetails(vmmGObjectUI):
def _make_boot_rows(self):
if not self.vm.can_use_device_boot_order():
return [
- ["hd", _("Hard Disk"), "drive-harddisk", False, True],
- ["cdrom", _("CDROM"), "media-optical", False, True],
- ["network", _("Network (PXE)"), "network-idle", False, True],
- ["fd", _("Floppy"), "media-floppy", False, True],
+ [
+ virtinst.DomainOs.BOOT_DEVICE_HARDDISK,
+ _("Hard Disk"),
+ "drive-harddisk",
+ False,
+ True,
+ ],
+ [virtinst.DomainOs.BOOT_DEVICE_CDROM, _("CDROM"), "media-optical", False, True],
+ [
+ virtinst.DomainOs.BOOT_DEVICE_NETWORK,
+ _("Network (PXE)"),
+ "network-idle",
+ False,
+ True,
+ ],
+ [virtinst.DomainOs.BOOT_DEVICE_FLOPPY, _("Floppy"), "media-floppy", False, True],
]
ret = []
diff --git a/virtinst/cli.py b/virtinst/cli.py
index b1499ef67..346043287 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -29,6 +29,7 @@ from .devices import (
DeviceHostdev,
DeviceInterface,
)
+from .domain import DomainOs
from .guest import Guest
from .logger import log, reset_logging
from .nodedev import NodeDevice
@@ -3214,10 +3215,10 @@ class ParserBoot(VirtCLIParser):
# This is simply so the boot options are advertised with --boot help,
# actual processing is handled by _parse
- cls.add_arg("hd", None, lookup_cb=None, cb=cls.noset_cb)
- cls.add_arg("cdrom", None, lookup_cb=None, cb=cls.noset_cb)
- cls.add_arg("fd", None, lookup_cb=None, cb=cls.noset_cb)
- cls.add_arg("network", None, lookup_cb=None, cb=cls.noset_cb)
+ cls.add_arg(DomainOs.BOOT_DEVICE_HARDDISK, None, lookup_cb=None, cb=cls.noset_cb)
+ cls.add_arg(DomainOs.BOOT_DEVICE_CDROM, None, lookup_cb=None, cb=cls.noset_cb)
+ cls.add_arg(DomainOs.BOOT_DEVICE_FLOPPY, None, lookup_cb=None, cb=cls.noset_cb)
+ cls.add_arg(DomainOs.BOOT_DEVICE_NETWORK, None, lookup_cb=None, cb=cls.noset_cb)
cls.add_arg(
"refresh-machine-type",
diff --git a/virtinst/guest.py b/virtinst/guest.py
index 54754d49a..b790a9c8d 100644
--- a/virtinst/guest.py
+++ b/virtinst/guest.py
@@ -469,13 +469,13 @@ class Guest(XMLBuilder):
break
for b in boot_order:
- if b == "network" and net:
+ if b == DomainOs.BOOT_DEVICE_NETWORK and net:
ret.append(net.get_xml_id())
- elif b == "hd" and disk:
+ elif b == DomainOs.BOOT_DEVICE_HARDDISK and disk:
ret.append(disk.get_xml_id())
- elif b == "cdrom" and cdrom:
+ elif b == DomainOs.BOOT_DEVICE_CDROM and cdrom:
ret.append(cdrom.get_xml_id())
- elif b == "fd" and floppy:
+ elif b == DomainOs.BOOT_DEVICE_FLOPPY and floppy:
ret.append(floppy.get_xml_id())
return ret
diff --git a/virtinst/install/installer.py b/virtinst/install/installer.py
index 96250f61b..a507c3c7c 100644
--- a/virtinst/install/installer.py
+++ b/virtinst/install/installer.py
@@ -87,7 +87,7 @@ class Installer:
if cdrom:
cdrom = InstallerTreeMedia.validate_path(self.conn, cdrom)
self._cdrom = cdrom
- self._install_bootdev = "cdrom"
+ self._install_bootdev = DomainOs.BOOT_DEVICE_CDROM
elif location or location_kernel or location_initrd or install_kernel or install_initrd:
self._treemedia = InstallerTreeMedia(
self.conn,
@@ -226,7 +226,7 @@ class Installer:
# windows virtio installs, and booting local disk from PXE)
for disk in guest.devices.disk:
if disk.device == disk.DEVICE_DISK:
- bootdev = "hd"
+ bootdev = DomainOs.BOOT_DEVICE_HARDDISK
if bootdev not in bootorder:
bootorder.append(bootdev)
break
diff --git a/virtinst/virtinstall.py b/virtinst/virtinstall.py
index 612f19a52..5e22931de 100644
--- a/virtinst/virtinstall.py
+++ b/virtinst/virtinstall.py
@@ -439,7 +439,7 @@ def build_installer(options, guest, installdata):
if options.livecd:
no_install = True
elif options.pxe:
- install_bootdev = "network"
+ install_bootdev = virtinst.DomainOs.BOOT_DEVICE_NETWORK
elif installdata.is_set:
pass
elif options.xmlonly:

View File

@@ -0,0 +1,49 @@
Subject: virtinst: rework get_boot_order
From: Pavel Hrdina phrdina@redhat.com Thu Oct 30 15:38:26 2025 +0100
Date: Thu Dec 4 16:55:51 2025 +0100:
Git: 25670b2ee8a31f4d66c75a5bd7f27bc742d1e545
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
diff --git a/virtinst/guest.py b/virtinst/guest.py
index b790a9c8d..a9fbecaec 100644
--- a/virtinst/guest.py
+++ b/virtinst/guest.py
@@ -439,15 +439,11 @@ class Guest(XMLBuilder):
# Bootorder helpers #
#####################
- def _get_old_boot_order(self):
- return self.os.bootorder
-
- def _convert_old_boot_order(self):
+ def _convert_old_boot_order(self, boot_order):
"""Converts the old boot order (e.g. <boot dev='hd'/>) into the
per-device boot order format.
"""
- boot_order = self._get_old_boot_order()
ret = []
disk = None
cdrom = None
@@ -486,18 +482,13 @@ class Guest(XMLBuilder):
continue
order.append((dev.get_xml_id(), dev.boot.order))
- if not order:
- # No devices individually marked bootable, convert traditional
- # boot XML to fine grained
- return self._convert_old_boot_order()
-
order.sort(key=lambda p: p[1])
return [p[0] for p in order]
def get_boot_order(self, legacy=False):
if legacy:
- return self._get_old_boot_order()
- return self._get_device_boot_order()
+ return self.os.bootorder
+ return self._get_device_boot_order() or self._convert_old_boot_order(self.os.bootorder)
def _set_device_boot_order(self, boot_order):
"""Sets the new device boot order for the domain"""

View File

@@ -0,0 +1,34 @@
Subject: virtinst: guest: introduce can_use_device_boot_order
From: Pavel Hrdina phrdina@redhat.com Tue Dec 2 21:39:14 2025 +0100
Date: Thu Dec 4 16:55:51 2025 +0100:
Git: 3a25792d90d53ad81bfb4835a146d047a39ef1e5
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
diff --git a/virtManager/object/domain.py b/virtManager/object/domain.py
index 6fc4f45ce..b8273ba7d 100644
--- a/virtManager/object/domain.py
+++ b/virtManager/object/domain.py
@@ -1396,7 +1396,7 @@ class vmmDomain(vmmLibvirtObject):
def can_use_device_boot_order(self):
# Return 'True' if guest can use new style boot device ordering
- return self.conn.support.conn_device_boot_order()
+ return self.get_xmlobj().can_use_device_boot_order()
def get_bootable_devices(self):
# redirdev can also be marked bootable, but it should be rarely
diff --git a/virtinst/guest.py b/virtinst/guest.py
index a9fbecaec..d13049be0 100644
--- a/virtinst/guest.py
+++ b/virtinst/guest.py
@@ -475,6 +475,9 @@ class Guest(XMLBuilder):
ret.append(floppy.get_xml_id())
return ret
+ def can_use_device_boot_order(self):
+ return self.conn.support.conn_device_boot_order()
+
def _get_device_boot_order(self):
order = []
for dev in self.get_bootable_devices():

View File

@@ -0,0 +1,115 @@
Subject: virtinst: remove legacy attribute from set_boot_order/get_boot_order
From: Pavel Hrdina phrdina@redhat.com Wed Dec 3 15:30:49 2025 +0100
Date: Thu Dec 4 16:55:51 2025 +0100:
Git: 3985b0746f79d108bab66a21b28e1ecf6e4c415f
Only tests used manual value for the attribute, otherwise we always used
what was detected by conn_device_boot_order() function.
Remove that attribute and update tests to use unittest.mock.patch where
needed.
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
diff --git a/tests/test_xmlparse.py b/tests/test_xmlparse.py
index 052850437..6e641f33f 100644
--- a/tests/test_xmlparse.py
+++ b/tests/test_xmlparse.py
@@ -3,6 +3,8 @@
# This work is licensed under the GNU GPLv2 or later.
# See the COPYING file in the top-level directory.
+import unittest
+
import pytest
import virtinst
@@ -652,7 +654,8 @@ def testGuestBootorder():
guest, outfile = _get_test_content(kvmconn, "bootorder")
assert guest.get_boot_order() == ["./devices/disk[1]"]
- assert guest.get_boot_order(legacy=True) == ["hd"]
+ with unittest.mock.patch("virtinst.Guest.can_use_device_boot_order", return_value=False):
+ assert guest.get_boot_order() == ["hd"]
legacy_order = ["hd", "fd", "cdrom", "network"]
dev_order = [
@@ -661,13 +664,15 @@ def testGuestBootorder():
"./devices/disk[2]",
"./devices/interface[1]",
]
- guest.set_boot_order(legacy_order, legacy=True)
+ with unittest.mock.patch("virtinst.Guest.can_use_device_boot_order", return_value=False):
+ guest.set_boot_order(legacy_order)
+ assert guest.get_boot_order() == legacy_order
assert guest.get_boot_order() == dev_order
- assert guest.get_boot_order(legacy=True) == legacy_order
guest.set_boot_order(dev_order)
assert guest.get_boot_order() == dev_order
- assert guest.get_boot_order(legacy=True) == []
+ with unittest.mock.patch("virtinst.Guest.can_use_device_boot_order", return_value=False):
+ assert guest.get_boot_order() == []
_alter_compare(kvmconn, guest.get_xml(), outfile)
diff --git a/virtManager/object/domain.py b/virtManager/object/domain.py
index b8273ba7d..3e005c0f6 100644
--- a/virtManager/object/domain.py
+++ b/virtManager/object/domain.py
@@ -762,8 +762,7 @@ class vmmDomain(vmmLibvirtObject):
guest = self._make_xmlobj_to_define()
if boot_order != _SENTINEL:
- legacy = not self.can_use_device_boot_order()
- guest.set_boot_order(boot_order, legacy=legacy)
+ guest.set_boot_order(boot_order)
if boot_menu != _SENTINEL:
guest.os.bootmenu_enable = bool(boot_menu)
@@ -1372,8 +1371,7 @@ class vmmDomain(vmmLibvirtObject):
return self.get_xmlobj().description
def get_boot_order(self):
- legacy = not self.can_use_device_boot_order()
- return self.xmlobj.get_boot_order(legacy=legacy)
+ return self.xmlobj.get_boot_order()
def get_boot_menu(self):
guest = self.get_xmlobj()
diff --git a/virtinst/guest.py b/virtinst/guest.py
index d13049be0..3f9eb0079 100644
--- a/virtinst/guest.py
+++ b/virtinst/guest.py
@@ -488,10 +488,10 @@ class Guest(XMLBuilder):
order.sort(key=lambda p: p[1])
return [p[0] for p in order]
- def get_boot_order(self, legacy=False):
- if legacy:
- return self.os.bootorder
- return self._get_device_boot_order() or self._convert_old_boot_order(self.os.bootorder)
+ def get_boot_order(self):
+ if self.can_use_device_boot_order():
+ return self._get_device_boot_order() or self._convert_old_boot_order(self.os.bootorder)
+ return self.os.bootorder
def _set_device_boot_order(self, boot_order):
"""Sets the new device boot order for the domain"""
@@ -506,12 +506,12 @@ class Guest(XMLBuilder):
for boot_idx, dev_xml_id in enumerate(boot_order, 1):
dev_map[dev_xml_id].boot.order = boot_idx
- def set_boot_order(self, boot_order, legacy=False):
+ def set_boot_order(self, boot_order):
"""Modifies the boot order"""
- if legacy:
- self.os.bootorder = boot_order
- else:
+ if self.can_use_device_boot_order():
self._set_device_boot_order(boot_order)
+ else:
+ self.os.bootorder = boot_order
def reorder_boot_order(self, dev, boot_index):
"""Sets boot order of `dev` to `boot_index`

View File

@@ -1,88 +0,0 @@
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):

File diff suppressed because it is too large Load Diff

View File

@@ -1,90 +0,0 @@
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

@@ -1,73 +0,0 @@
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

@@ -1,89 +0,0 @@
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,26 @@
Subject: virtinst: Fix XDG_DATA_HOME handling
From: Callum Farmer gmbr3@opensuse.org Wed Nov 19 13:38:22 2025 +0000
Date: Thu Dec 11 09:43:06 2025 +0100:
Git: 35ad9057fef319046ad1348097e2f813a52a9021
The default value of XDG_DATA_HOME should be ~/.local/share.
It will not by default contain libvirt at the end of the path,
so subsequently append libvirt after retrieving the value of XDG_DATA_HOME
Signed-off-by: Callum Farmer <gmbr3@opensuse.org>
diff --git a/virtinst/connection.py b/virtinst/connection.py
index f2fcdd0c3..b565f1b41 100644
--- a/virtinst/connection.py
+++ b/virtinst/connection.py
@@ -186,7 +186,8 @@ class VirtinstConnection:
def get_libvirt_data_root_dir(self):
if self.is_privileged():
return "/var/lib/libvirt"
- return os.environ.get("XDG_DATA_HOME", os.path.expanduser("~/.local/share/libvirt"))
+ path = os.environ.get("XDG_DATA_HOME", os.path.expanduser("~/.local/share"))
+ return os.path.join(path, "libvirt")
####################
# Polling routines #

View File

@@ -1,34 +0,0 @@
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

@@ -1,17 +0,0 @@
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

@@ -1,109 +0,0 @@
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

@@ -1,58 +0,0 @@
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

@@ -1,55 +0,0 @@
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

@@ -1,55 +0,0 @@
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

@@ -1,58 +0,0 @@
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

@@ -1,55 +0,0 @@
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

@@ -1,25 +0,0 @@
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

@@ -1,30 +0,0 @@
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

@@ -1,115 +0,0 @@
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

@@ -1,32 +0,0 @@
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

@@ -1,30 +0,0 @@
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

@@ -1,48 +0,0 @@
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

@@ -1,18 +0,0 @@
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

@@ -1,20 +0,0 @@
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

@@ -1,24 +0,0 @@
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

@@ -1,59 +0,0 @@
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

@@ -1,43 +0,0 @@
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

@@ -1,46 +0,0 @@
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

@@ -1,43 +0,0 @@
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,23 @@
Subject: addhardware: Add usb as a recommended sound device
From: Akihiko Odaki odaki@rsg.ci.i.u-tokyo.ac.jp Wed Aug 6 15:04:55 2025 +0900
Date: Sat Jan 10 19:25:58 2026 +0100:
Git: 10014e1505ac20569df8f92078073f9aa5f621f4
usb is an architecture-independent sound device and useful for
Windows on Arm, which does not support PC sound devices.
Signed-off-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp>
diff --git a/virtManager/addhardware.py b/virtManager/addhardware.py
index 7ce8db23c..e4db35d5b 100644
--- a/virtManager/addhardware.py
+++ b/virtManager/addhardware.py
@@ -562,7 +562,7 @@ class vmmAddHardware(vmmGObjectUI):
@staticmethod
def sound_recommended_models(_guest):
- return ["ich6", "ich9", "ac97"]
+ return ["ich6", "ich9", "ac97", "usb"]
@staticmethod
def sound_pretty_model(model):

View File

@@ -1,18 +0,0 @@
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

@@ -1,21 +0,0 @@
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

@@ -0,0 +1,56 @@
Subject: virtinst: Add serial controller option to cli
From: 6543 6543@obermui.de Thu Jan 8 21:43:38 2026 +0100
Date: Sun Jan 11 18:36:09 2026 +0100:
Git: 6f1adcc9251429e1dc9f15ec68e3b00affdb9638
diff --git a/tests/data/cli/compare/virt-install-many-devices.xml b/tests/data/cli/compare/virt-install-many-devices.xml
index ddfbbe058..fd972ef32 100644
--- a/tests/data/cli/compare/virt-install-many-devices.xml
+++ b/tests/data/cli/compare/virt-install-many-devices.xml
@@ -507,6 +507,9 @@
<controller type="usb" model="ich9-uhci3">
<master startport="4"/>
</controller>
+ <controller type="nvme">
+ <serial>1</serial>
+ </controller>
<filesystem type="mount" accessmode="mapped">
<driver ats="on" iommu="off" packed="on" page_per_vq="off"/>
<alias name="testfsalias"/>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 99f4a59dc..b0b236615 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -709,6 +709,7 @@ source.reservations.managed=no,source.reservations.source.type=unix,source.reser
--controller usb3
--controller scsi,model=virtio-scsi
--controller usb2
+--controller nvme,serial=1
--input type=keyboard,bus=usb
diff --git a/virtinst/cli.py b/virtinst/cli.py
index 346043287..1081cf115 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -4495,6 +4495,7 @@ class ParserController(VirtCLIParser):
cls.add_arg("target.memReserve", "target_memReserve")
cls.add_arg("pcihole64", "pcihole64")
cls.add_arg("pcihole64.unit", "pcihole64_unit")
+ cls.add_arg("serial", "serial")
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 f3c4ce61d..def85f10e 100644
--- a/virtinst/devices/controller.py
+++ b/virtinst/devices/controller.py
@@ -77,6 +77,7 @@ class DeviceController(Device):
ports = XMLProperty("./@ports", is_int=True)
maxGrantFrames = XMLProperty("./@maxGrantFrames", is_int=True)
index = XMLProperty("./@index", is_int=True)
+ serial = XMLProperty("./serial")
driver_iothread = XMLProperty("./driver/@iothread", is_int=True)
driver_queues = XMLProperty("./driver/@queues", is_int=True)

View File

@@ -0,0 +1,26 @@
Subject: virtinst: Add NVMe Controller
From: 6543 6543@obermui.de Thu Dec 18 03:37:40 2025 +0100
Date: Sun Jan 11 18:36:09 2026 +0100:
Git: 605b3d807078f8a67f6828ed84d4e0c2aa6d63bc
diff --git a/virtinst/devices/controller.py b/virtinst/devices/controller.py
index def85f10e..ff723d91c 100644
--- a/virtinst/devices/controller.py
+++ b/virtinst/devices/controller.py
@@ -14,6 +14,7 @@ class DeviceController(Device):
TYPE_IDE = "ide"
TYPE_FDC = "fdc"
TYPE_SCSI = "scsi"
+ TYPE_NVME = "nvme"
TYPE_SATA = "sata"
TYPE_VIRTIOSERIAL = "virtio-serial"
TYPE_USB = "usb"
@@ -121,6 +122,6 @@ class DeviceController(Device):
ret = []
if self.type == "virtio-serial":
ret = self._get_attached_virtioserial_devices(guest)
- elif self.type in ["scsi", "sata", "ide", "fdc"]:
+ elif self.type in ["scsi", "sata", "ide", "fdc", "nvme"]:
ret = self._get_attached_disk_devices(guest)
return ret

View File

@@ -0,0 +1,147 @@
Subject: virtinst: implement NVMe disk target generation
From: Pavel Hrdina phrdina@redhat.com Fri Jan 9 08:51:29 2026 +0100
Date: Sun Jan 11 18:36:09 2026 +0100:
Git: 97505a9feab1ecfd23d88dad0f90444108496f83
In libvirt NVMe disk targets are based on what linux uses for device
names.
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
--- a/tests/test_disk.py
+++ b/tests/test_disk.py
@@ -40,13 +40,30 @@ def test_disk_numtotarget():
assert DeviceDisk.target_to_num("xvdaaa") == 26 * 26 * 1 + 26 * 1 + 0
conn = utils.URIs.open_testdefault_cached()
+ guest = virtinst.Guest(conn)
disk = virtinst.DeviceDisk(conn)
disk.bus = "ide"
- assert disk.generate_target([]) == "hda"
- assert disk.generate_target(["hda"]) == "hdb"
- assert disk.generate_target(["hdb", "sda"]) == "hdc"
- assert disk.generate_target(["hda", "hdd"]) == "hdb"
+ assert disk.generate_target([], guest) == "hda"
+ assert disk.generate_target(["hda"], guest) == "hdb"
+ assert disk.generate_target(["hdb", "sda"], guest) == "hdc"
+ assert disk.generate_target(["hda", "hdd"], guest) == "hdb"
+
+ disk.bus = "nvme"
+ disk.serial = "0"
+
+ assert disk.generate_target([], guest) == "nvme0n1"
+
+ controller = virtinst.DeviceController(conn)
+ controller.type = "nvme"
+ controller.serial = "0"
+ controller.index = 0
+ guest.add_device(controller)
+
+ assert disk.generate_target([], guest) == "nvme0n1"
+
+ controller.index = 1
+ assert disk.generate_target(["nvme1n1"], guest) == "nvme1n2"
def test_disk_dir_searchable(monkeypatch):
--- a/virtManager/addhardware.py
+++ b/virtManager/addhardware.py
@@ -1453,7 +1453,7 @@ class vmmAddHardware(vmmGObjectUI):
used.append(d.target)
self._set_disk_controller(disk)
- disk.generate_target(used)
+ disk.generate_target(used, self.vm.xmlobj)
return disk
def _build_network(self):
--- a/virtinst/devices/disk.py
+++ b/virtinst/devices/disk.py
@@ -914,6 +914,19 @@ class DeviceDisk(Device):
if path:
self._set_xmlpath(path)
+ def get_nvme_namespace(self, guest):
+ """
+ Returns the NVMe namespace for disk based on it's bus and serial.
+
+ If no NVMe controller is defined return 0 as that is default used by
+ libvirt and virt-manager.
+ """
+ for c in guest.devices.controller:
+ if c.type == "nvme" and c.serial == self.serial:
+ return c.index
+
+ return 0
+
def get_target_prefix(self):
"""
Returns the suggested disk target prefix (hd, xvd, sd ...) for the
@@ -930,6 +943,7 @@ class DeviceDisk(Device):
"fd": 2,
"hd": 4,
"sd": 1024,
+ "nvme": 1024,
}
return prefix, nummap[prefix]
@@ -941,10 +955,12 @@ class DeviceDisk(Device):
return _return("fd")
elif self.bus == "ide":
return _return("hd")
+ elif self.bus == "nvme":
+ return _return("nvme")
# sata, scsi, usb, sd
return _return("sd")
- def generate_target(self, skip_targets):
+ def generate_target(self, skip_targets, guest):
"""
Generate target device ('hda', 'sdb', etc..) for disk, excluding
any targets in 'skip_targets'.
@@ -957,11 +973,17 @@ class DeviceDisk(Device):
skip_targets = [t for t in skip_targets if t and t.startswith(prefix)]
skip_targets.sort()
+ if self.bus == "nvme":
+ nvmen = self.get_nvme_namespace(guest)
+
def get_target():
first_found = None
for i in range(maxnode):
- gen_t = prefix + self.num_to_target(i + 1)
+ if self.bus == "nvme":
+ gen_t = f"{prefix}{nvmen}n{i + 1}"
+ else:
+ gen_t = prefix + self.num_to_target(i + 1)
if gen_t in skip_targets:
skip_targets.remove(gen_t)
continue
@@ -1008,7 +1030,7 @@ class DeviceDisk(Device):
used.remove(self.target)
self.target = None
- self.generate_target(used)
+ self.generate_target(used, guest)
#########################
# set_defaults handling #
@@ -1078,4 +1100,4 @@ class DeviceDisk(Device):
if not self.target:
used_targets = [d.target for d in guest.devices.disk if d.target]
- self.generate_target(used_targets)
+ self.generate_target(used_targets, guest)
--- a/virtinst/guest.py
+++ b/virtinst/guest.py
@@ -877,7 +877,7 @@ class Guest(XMLBuilder):
if dev.DEVICE_TYPE == "disk" and dev.bus == "ide":
dev.bus = "sata"
used_targets = [d.target for d in self.devices.disk if d.target]
- dev.generate_target(used_targets)
+ dev.generate_target(used_targets, self)
dev.address.clear()
if dev.address.type == "pci":

View File

@@ -0,0 +1,111 @@
Subject: virtManager: Add NVMe disk type
From: 6543 6543@obermui.de Thu Dec 18 03:38:56 2025 +0100
Date: Sun Jan 11 18:36:09 2026 +0100:
Git: 08b547366fbc4037a737515ee0efab3c3e673a80
--- a/virtManager/addhardware.py
+++ b/virtManager/addhardware.py
@@ -472,6 +472,7 @@ class vmmAddHardware(vmmGObjectUI):
def controller_recommended_types():
return [
DeviceController.TYPE_SCSI,
+ DeviceController.TYPE_NVME,
DeviceController.TYPE_USB,
DeviceController.TYPE_VIRTIOSERIAL,
DeviceController.TYPE_CCID,
@@ -482,6 +483,7 @@ class vmmAddHardware(vmmGObjectUI):
labels = {
DeviceController.TYPE_IDE: _("IDE"),
DeviceController.TYPE_FDC: _("Floppy"),
+ DeviceController.TYPE_NVME: _("NVMe"),
DeviceController.TYPE_SCSI: _("SCSI"),
DeviceController.TYPE_SATA: _("SATA"),
DeviceController.TYPE_VIRTIOSERIAL: _("VirtIO Serial"),
@@ -510,6 +512,7 @@ class vmmAddHardware(vmmGObjectUI):
ret.append("ide")
ret.append("sata")
ret.append("fdc")
+ ret.append("nvme")
ret.append("scsi")
ret.append("usb")
@@ -531,7 +534,7 @@ class vmmAddHardware(vmmGObjectUI):
buses = vmmAddHardware.disk_old_recommended_buses(guest)
bus_map = {
- "disk": ["ide", "sata", "scsi", "sd", "usb", "virtio", "xen"],
+ "disk": ["ide", "nvme", "sata", "scsi", "sd", "usb", "virtio", "xen"],
"floppy": ["fdc"],
"cdrom": ["ide", "sata", "scsi", "usb"],
"lun": ["scsi"],
@@ -542,6 +545,7 @@ class vmmAddHardware(vmmGObjectUI):
def disk_pretty_bus(bus):
bus_mappings = {
"ide": _("IDE"),
+ "nvme": _("NVMe"),
"sata": _("SATA"),
"scsi": _("SCSI"),
"sd": _("SD"),
@@ -1424,16 +1428,33 @@ class vmmAddHardware(vmmGObjectUI):
return dev
def _set_disk_controller(self, disk):
- # Add a SCSI controller with model virtio-scsi if needed
+ # Add a SCSI controller with model virtio-scsi if needed or
+ # add an NVMe controller if needed
disk.vmm_controller = None
- if not self.vm.xmlobj.can_default_virtioscsi():
- return
- controller = DeviceController(self.conn.get_backend())
- controller.type = "scsi"
- controller.model = "virtio-scsi"
- controller.index = 0
- disk.vmm_controller = controller
+ if disk.bus == "scsi":
+ if not self.vm.xmlobj.can_default_virtioscsi():
+ return
+
+ controller = DeviceController(self.conn.get_backend())
+ controller.type = "scsi"
+ controller.model = "virtio-scsi"
+ controller.index = 0
+ disk.vmm_controller = controller
+
+ elif disk.bus == "nvme":
+ nvme_controllers = [c for c in self.vm.xmlobj.devices.controller if c.type == "nvme"]
+ if len(nvme_controllers) > 0:
+ if not disk.serial:
+ disk.serial = nvme_controllers[0].serial
+ else:
+ if not disk.serial:
+ disk.serial = "0"
+ controller = DeviceController(self.conn.get_backend())
+ controller.type = "nvme"
+ controller.index = 0
+ controller.serial = disk.serial
+ disk.vmm_controller = controller
def _build_storage(self):
bus = uiutil.get_list_selection(self.widget("storage-bustype"))
@@ -1585,12 +1606,18 @@ class vmmAddHardware(vmmGObjectUI):
controller_num = [x for x in controllers if (x.type == controller_type)]
if len(controller_num) > 0:
index_new = max(int(x.index or 0) for x in controller_num) + 1
- dev.index = index_new
+ else:
+ index_new = 0
+ dev.index = index_new
dev.type = controller_type
if model and model != "none":
dev.model = model
+
+ if controller_type == DeviceController.TYPE_NVME:
+ dev.serial = str(dev.index)
+
return dev
def _build_rng(self):

View File

@@ -0,0 +1,87 @@
Subject: ui: Show NVMe Controller details
From: 6543 6543@obermui.de Thu Dec 18 03:40:08 2025 +0100
Date: Sun Jan 11 18:36:09 2026 +0100:
Git: 90e425b59a30f1dd4827de5cc480031d89391d3d
display serial and atached disks
diff --git a/ui/details.ui b/ui/details.ui
index ead89a8c0..2eb0d8a44 100644
--- a/ui/details.ui
+++ b/ui/details.ui
@@ -4243,6 +4243,31 @@
<property name="top-attach">1</property>
</packing>
</child>
+ <child>
+ <object class="GtkLabel" id="controller-serial-label">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="halign">end</property>
+ <property name="label" translatable="yes">Serial:</property>
+ </object>
+ <packing>
+ <property name="left-attach">0</property>
+ <property name="top-attach">2</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkLabel" id="controller-serial">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="halign">start</property>
+ <property name="label">-</property>
+ <property name="selectable">True</property>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">2</property>
+ </packing>
+ </child>
<child>
<object class="GtkLabel" id="device-list-label">
<property name="visible">True</property>
@@ -4255,7 +4280,7 @@
</object>
<packing>
<property name="left-attach">0</property>
- <property name="top-attach">2</property>
+ <property name="top-attach">3</property>
</packing>
</child>
<child>
@@ -4290,7 +4315,7 @@
</object>
<packing>
<property name="left-attach">1</property>
- <property name="top-attach">2</property>
+ <property name="top-attach">3</property>
</packing>
</child>
</object>
diff --git a/virtManager/details/details.py b/virtManager/details/details.py
index 6cadf8bf0..c927f1045 100644
--- a/virtManager/details/details.py
+++ b/virtManager/details/details.py
@@ -2161,7 +2161,7 @@ class vmmDetails(vmmGObjectUI):
self._disable_device_remove(_("Hypervisor does not support removing this device"))
if controller.type == "pci":
self._disable_device_remove(_("Hypervisor does not support removing this device"))
- elif controller.type in ["scsi", "sata", "ide", "fdc"]:
+ elif controller.type in ["nvme", "scsi", "sata", "ide", "fdc"]:
model = self.widget("controller-device-list").get_model()
model.clear()
disks = controller.get_attached_devices(self.vm.xmlobj)
@@ -2188,6 +2188,12 @@ class vmmDetails(vmmGObjectUI):
type_label = vmmAddHardware.controller_pretty_desc(controller)
self.widget("controller-type").set_text(type_label)
+ has_serial = controller.type == "nvme" and controller.serial
+ if has_serial:
+ self.widget("controller-serial").set_text(controller.serial)
+ uiutil.set_grid_row_visible(self.widget("controller-serial"), has_serial)
+ uiutil.set_grid_row_visible(self.widget("controller-serial-label"), has_serial)
+
combo = self.widget("controller-model")
vmmAddHardware.populate_controller_model_combo(combo, controller.type)
show_model = controller.model or len(combo.get_model()) > 1

View File

@@ -0,0 +1,23 @@
Subject: virtinst: fix locale when running in flatpak
From: Pavel Hrdina phrdina@redhat.com Sun Jan 11 20:48:22 2026 +0100
Date: Sun Jan 11 21:20:42 2026 +0100:
Git: d13271422e47d9bc827d6ede3e7d5154568115c7
Module locale is used to configure C libraries. When running in flatpak
we need to set correct path using locale module as well.
Resolves: https://github.com/virt-manager/virt-manager/issues/1023
Signed-off-by: Pavel Hrdina <phrdina@redhat.com>
diff --git a/virtinst/__init__.py b/virtinst/__init__.py
index 621acb238..eb874063a 100644
--- a/virtinst/__init__.py
+++ b/virtinst/__init__.py
@@ -24,6 +24,7 @@ def _setup_i18n():
gettext.install("virt-manager", BuildConfig.gettext_dir, names=["ngettext"])
gettext.bindtextdomain("virt-manager", BuildConfig.gettext_dir)
+ locale.bindtextdomain("virt-manager", BuildConfig.gettext_dir)
def _set_libvirt_error_handler():

View File

@@ -0,0 +1,66 @@
Subject: virtinst: add support for iommufd
From: Nathan Chen nathanc@nvidia.com Mon Oct 27 18:34:27 2025 +0000
Date: Tue Feb 3 07:17:03 2026 +0100:
Git: 9ab2918face14ff4081b85bfd224342e1829880c
A minimal config to enable iommufd would be
$ virt-install
...args...
--host-device 0x062a:0x0001,driver.iommufd=yes
Signed-off-by: Nathan Chen <nathanc@nvidia.com>
diff --git a/tests/data/cli/compare/virt-install-many-devices.xml b/tests/data/cli/compare/virt-install-many-devices.xml
index fd972ef32..5e4aec35e 100644
--- a/tests/data/cli/compare/virt-install-many-devices.xml
+++ b/tests/data/cli/compare/virt-install-many-devices.xml
@@ -928,6 +928,12 @@
<zpci uid="0xffff" fid="0xffffffff"/>
</address>
</hostdev>
+ <hostdev mode="subsystem" type="pci" managed="yes">
+ <source>
+ <address domain="0" bus="21" slot="0" function="4"/>
+ </source>
+ <driver name="vfio" iommufd="yes"/>
+ </hostdev>
<hostdev mode="subsystem" type="usb" managed="yes">
<source>
<vendor id="0x062a"/>
diff --git a/tests/test_cli.py b/tests/test_cli.py
index b0b236615..8d1c24fe6 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -748,6 +748,7 @@ source.reservations.managed=no,source.reservations.source.type=unix,source.reser
--hostdev 15:0.1
--host-device 2:15:0.2
--hostdev 0:15:0.3,address.type=pci,address.zpci.uid=0xffff,address.zpci.fid=0xffffffff
+--hostdev 0:15:0.4,driver_name=vfio,driver.iommufd=yes
--host-device 0x062a:0x0001,driver_name=vfio
--host-device 0483:2016
--host-device pci_8086_2829_scsi_host_scsi_device_lun0,rom.bar=on,acpi.nodeset=0-2
diff --git a/virtinst/cli.py b/virtinst/cli.py
index 1081cf115..c6001644c 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -5287,6 +5287,7 @@ class ParserHostdev(VirtCLIParser):
cls.add_arg("type", "type")
cls.add_arg("name", None, cb=cls.set_name_cb, lookup_cb=cls.name_lookup_cb)
cls.add_arg("driver.name", "driver_name")
+ cls.add_arg("driver.iommufd", "driver_iommufd")
cls.add_arg("rom.bar", "rom_bar", is_onoff=True)
cls.add_arg("acpi.nodeset", "acpi_nodeset", can_comma=True)
cls.add_arg("source.startupPolicy", "startup_policy")
diff --git a/virtinst/devices/hostdev.py b/virtinst/devices/hostdev.py
index 43d5322f3..2a3dc048d 100644
--- a/virtinst/devices/hostdev.py
+++ b/virtinst/devices/hostdev.py
@@ -127,6 +127,7 @@ class DeviceHostdev(Device):
slot = XMLProperty("./source/address/@slot")
driver_name = XMLProperty("./driver/@name")
+ driver_iommufd = XMLProperty("./driver/@iommufd", is_yesno=True)
rom_bar = XMLProperty("./rom/@bar", is_onoff=True)
acpi_nodeset = XMLProperty("./acpi/@nodeset")

View File

@@ -1,64 +0,0 @@
References: bsc#1200691, an IBM request
This patch reverts commit 363fca413cae336a0ca86cbdcbb2f65fead948ee.
Only x86 will have a hard requirement for the --osinfo option.
From: Cole Robinson crobinso@redhat.com Sun Feb 20 11:40:35 2022 -0500
Subject: virt-install: Require --osinfo for non-x86 HVM case too
Date: Sun Feb 20 11:40:35 2022 -0500:
Git: 363fca413cae336a0ca86cbdcbb2f65fead948ee
It's generally not as valuable for non-x86 where we don't have the
history of supporting non-virtio OSes, but as time goes on it will
likely become more relevant for non-x86 arches, so let's make this
change now to get ahead of it.
Signed-off-by: Cole Robinson <crobinso@redhat.com>
Index: virt-manager-5.0.0/man/virt-install.rst
===================================================================
--- virt-manager-5.0.0.orig/man/virt-install.rst
+++ virt-manager-5.0.0/man/virt-install.rst
@@ -1067,8 +1067,8 @@ all other settings off or unset.
By default, virt-install will always attempt ``--osinfo detect=on``
for appropriate install media. If no OS is detected, we will fail
-in most common cases. This fatal error was added in 2022. You can
-work around this by using the fallback example
+in certain common cases (x86 KVM for example). This fatal error was
+added in 2022. You can work around this by using the fallback example
above, or disabling the ``require`` option. If you just need to get back
to the old non-fatal behavior ASAP, set the environment variable
VIRTINSTALL_OSINFO_DISABLE_REQUIRE=1.
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
@@ -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
-c.add_invalid("--arch aarch64 --nodisks --pxe --connect " + utils.URIs.kvm_x86, grep="OS name is required") # catch missing osinfo for non-x86
c.add_compare("--arch aarch64 --osinfo fedora19 --machine virt --cpu default --boot kernel=/f19-arm.kernel,initrd=/f19-arm.initrd,kernel_args=\"console=ttyAMA0,1234 rw root=/dev/vda3\" --disk %(EXISTIMG1)s", "aarch64-machvirt")
c.add_compare("--arch aarch64 --osinfo fedora19 --boot kernel=/f19-arm.kernel,initrd=/f19-arm.initrd,kernel_args=\"console=ttyAMA0,1234 rw root=/dev/vda3\" --disk %(EXISTIMG1)s", "aarch64-machdefault")
c.add_compare("--arch aarch64 --cdrom %(ISO-F26-NETINST)s --boot loader=CODE.fd,nvram.template=VARS.fd --disk %(EXISTIMG1)s --cpu none --events on_crash=preserve,on_reboot=destroy,on_poweroff=restart", "aarch64-cdrom") # cdrom test, but also --cpu none override, --events override, and headless
Index: virt-manager-5.0.0/virtinst/virtinstall.py
===================================================================
--- virt-manager-5.0.0.orig/virtinst/virtinstall.py
+++ virt-manager-5.0.0/virtinst/virtinstall.py
@@ -355,13 +355,9 @@ def _show_memory_warnings(guest):
def _needs_accurate_osinfo(guest):
- # HVM is really the only case where OS impacts what we set for defaults,
- # so far.
- #
- # Historically we would only warn about missing osinfo on x86, but
- # with the change to make osinfo mandatory we relaxed the arch check,
- # so virt-install behavior is more consistent.
- return guest.os.is_hvm()
+ # Limit it to hvm x86 guests which presently our defaults
+ # only really matter for
+ return guest.os.is_x86() and guest.os.is_hvm()
def show_guest_warnings(options, guest):

Binary file not shown.

BIN
virt-manager-5.1.0.tar.xz LFS Normal file

Binary file not shown.

View File

@@ -1,3 +1,193 @@
-------------------------------------------------------------------
Tue Feb 17 11:37:25 MST 2026 - carnold@suse.com
- jsc#PED-14636 - UEFI as default for new SLES 16 VMs
virtinst-query-recommended-firmware.patch
-------------------------------------------------------------------
Wed Feb 4 14:51:19 MST 2026 - carnold@suse.com
- Upstream features and bug fixes (bsc#1027942) (jsc#PED-14625)
051-addhardware-Add-usb-as-a-recommended-sound-device.patch
055-virtinst-Add-serial-controller-option-to-cli.patch
056-virtinst-Add-NVMe-Controller.patch
057-virtinst-implement-NVMe-disk-target-generation.patch
058-virtManager-Add-NVMe-disk-type.patch
059-ui-Show-NVMe-Controller-details.patch
060-virtinst-fix-locale-when-running-in-flatpak.patch
061-virtinst-add-support-for-iommufd.patch
-------------------------------------------------------------------
Fri Jan 23 12:05:21 MST 2026 - carnold@suse.com
- bsc#1257182 - A VM will fail to boot with Intel TDX or AMD SNP
with a TPM device defined in the VM
virtinst-remove-tpm-device-for-tdx-and-snp.patch
- Modified detection of SLES distros to be more flexible with
media naming conventions
-------------------------------------------------------------------
Wed Jan 7 13:32:03 MST 2026 - carnold@suse.com
- Upstream features and bug fixes (bsc#1027942) (jsc#PED-14625)
003-virtinst-cloudinit-include-empty-meta-data-file.patch
009-avoid-NoneType-pixbuf.patch
012-virtManager-wrapped-details-hw-panel-with-GtkScrolledWindow.patch
013-virtinst-interface-add-support-for-backend.hostname-and-backend.fqdn.patch
014-virtinst-add-support-for-acpi-generic-initiator.patch
015-virtinst-add-support-for-pcihole64.patch
017-maint-use-constants-instead-of-strings-for-boot-devices.patch
018-virtinst-rework-get_boot_order.patch
019-virtinst-guest-introduce-can_use_device_boot_order.patch
020-virtinst-remove-legacy-attribute-from-set_boot_order-get_boot_order.patch
021-installer-add-support-to-use-device-boot-order.patch
024-virtinst-Fix-XDG_DATA_HOME-handling.patch
- Dropped virtinst-fix-XDG_DATA_HOME-handling.patch
-------------------------------------------------------------------
Tue Dec 9 11:48:43 UTC 2025 - Callum Farmer <gmbr3@opensuse.org>
- Add virtinst-fix-XDG_DATA_HOME-handling.patch: fix usage
of XDG_DATA_HOME (bsc#1253017)
- Use a more sensible XDG_DATA_HOME in test section
-------------------------------------------------------------------
Fri Nov 7 12:53:47 MST 2025 - carnold@suse.com
- bsc#1253017 - aaa_base: update to 84.87+git20251030.441f926
breaks python-platformdirs:test and virt-manager:test
virt-manager.spec
-------------------------------------------------------------------
Fri Oct 17 16:25:09 MDT 2025 - carnold@suse.com
- bsc#1252105 - Unable to create an SEV-SNP enabled guest with
virt-manager. This simplifies the code from what used to be
required for sev while adding initial tdx support.
virtman-add-launch-security-support.patch
- Dropped patches rolled into above the patch.
virtman-add-sev-memory-support.patch
virtinst-dont-require-uefi-for-sev-snp.patch
-------------------------------------------------------------------
Thu Sep 11 13:52:31 MDT 2025 - carnold@suse.com
- Fix issues with detection of openSUSE Leap 16.
virtinst-add-sle16-detection-support.patch
-------------------------------------------------------------------
Mon Sep 8 06:21:53 MDT 2025 - carnold@suse.com
- Update to Version 5.1.0 (jsc#PED-8910)
* cli: Support --cpu maximum (Andrea Bolognani)
* Prefer maximum mode for many emulated guests (Andrea Bolognani)
* virt-manager: Fill in model combo with advertised values by
libvirt (Lin Ma)
* virt-manager: Default to same snapshot mode as currently used
snapshot
* virt-manager: Warn users to not mix snapshot modes
* cli: Add --memdev target.dynamicMemslots support for
virtio-mem (Lin Ma)
* cli: add target.memReserve for pci-bridge and pcie-root-port
controllers (Lin Ma)
* cli: Add --disk driver.queue_size support (Lin Ma)
* cli: Add 'poll' settings for iothread (Lin Ma)
* cli: Add --tpm backend.profile.{source,removeDisabled} support
(Lin Ma)
* cli: Add nvram.templateFormat to indicate template format
(Lin Ma)
* cli: Add --features hyperv.xmm_input.state=on/off (Lin Ma)
* cli: Add --features hyperv.emsr_bitmap.state=on/off (Lin Ma)
* cli: Add --features hyperv.tlbflush.direct.state=on/off
(Lin Ma)
* cli: Add --features hyperv.tlbflush.extended.state=on/off
(Lin Ma)
* virt-manager: Add riscv64 to prioritized architectures
(Heinrich Schuchardt)
* virtinst: Add --pstore backend=acpi-erst,path=XX,size=YY
support (Lin Ma)
* XML: Fix escaping special characters twice in some cases
(Marius Vollmer)
* Add riscv64 architecture for Debian ISO/URL detection
(Heinrich Schuchardt)
* virt-manager: list virtual networks when creating new QEMU
Session VM
* Add support for vDPA network devices (Joren)
* virt-install: Detect wayland in order to start virt-viewer
* Improve Debian/Ubuntu detection for ISO images
* Allow spaces, disallow slashes in names
(AbhinavTiruvee)
* cli: Add support to fetch cloud-init config files from URL
* virt-manager: Fix error when opening File Browser
(Zahid Kizmaz)
* virt-manager: Add Ctrl+Alt+Shift+Esc key command for logind's
SecureAttentionKey (n3rdopolis)
* cli: Add support for creating TDX VMs
* virt-install: Improve default device models to improve Windows
ARM support (Akihiko Odaki)
* Add support to configure startup policy for USB passed through
devices (Lin Ma)
- Drop patches contained in new tarball
001-cli-Support-cpu-maximum.patch
002-gui-Support-maximum-CPU-mode.patch
003-cpu-Prefer-maximum-mode-for-many-emulated-guests.patch
004-domcaps-get-list-of-supported-panic-device-models.patch
005-tests-Update-capabilities-for-advertisting-panic-device-models.patch
006-addhardware-panic-Fill-in-model-combo-with-advertised-values-by-libvirt.patch
007-cli-man-Always-list-osinfo-before-os-variant.patch
008-snapshots-default-to-same-snapshot-mode-as-currently-used-snapshot.patch
009-snapshots-warn-users-to-not-mix-snapshot-modes.patch
010-virtManager-domain-fix-indentation.patch
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
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
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
053-virtinst-add-support-for-creating-TDX-guests.patch
revert-363fca41-virt-install-Require-osinfo-for-non-x86-HVM-case-too.patch
-------------------------------------------------------------------
Wed Aug 13 16:46:43 MDT 2025 - carnold@suse.com
- Adjust how we detect sles16 as the media layout changes.
(bsc#1244685) (bsc#1249466)
virtinst-add-sle16-detection-support.patch
-------------------------------------------------------------------
Tue Aug 12 14:23:56 MDT 2025 - carnold@suse.com
- bsc#1247865 - sles 16.0 rc3 KVM virt-manager detects windows 2025
as 2022
virtinst-windows-server-detection.patch
-------------------------------------------------------------------
Mon Jul 28 10:49:22 MDT 2025 - carnold@suse.com
- Add support for creating TDX guests in virt-install (jsc#PED-9265)
053-virtinst-add-support-for-creating-TDX-guests.patch
-------------------------------------------------------------------
Wed Jun 18 14:06:18 MDT 2025 - carnold@suse.com
@@ -3474,7 +3664,7 @@ Wed Jan 22 11:03:50 MST 2014 - carnold@suse.com
- Add sles12/sled12 as supported distros
-------------------------------------------------------------------
Thu Jan 07 14:25:13 MDT 2014 - carnold@suse.com
Tue Jan 07 14:25:13 MST 2014 - carnold@suse.com
- Translate virt-install.ycp to virt-install.rb
Added virt-install.rb
@@ -3491,7 +3681,7 @@ Sat Dec 14 16:49:34 CET 2013 - ohering@suse.de
- Pass --prefix to setup.py to fix build in 12.2 and older
-------------------------------------------------------------------
Mon Dec 9 16:35:32 MDT 2013 - carnold@suse.com
Mon Dec 9 16:35:32 MST 2013 - carnold@suse.com
- Allow vm-install to be launched from the menu as an independent
process.
@@ -3503,7 +3693,7 @@ Mon Dec 9 18:34:01 UTC 2013 - cbosdonnat@suse.com
virtman-support-unsafe-migration.patch
-------------------------------------------------------------------
Mon Nov 25 16:12:07 MDT 2013 - carnold@suse.com
Mon Nov 25 16:12:07 MST 2013 - carnold@suse.com
- fate#316388: virt-manager: Support the latest version (0.10.x or newer)
virt-manager-0.10.0.tar.bz2
@@ -3938,7 +4128,7 @@ Wed Mar 23 08:31:23 MDT 2011 - carnold@novell.com
virtman-connect-consoles-fix.diff
-------------------------------------------------------------------
Thu Mar 21 13:34:41 MST 2011 - carnold@novell.com
Thu Mar 21 13:34:41 MDT 2011 - carnold@novell.com
- Update to virt-manager 0.8.6
* SPICE support (requires spice-gtk) (Marc-André Lureau)

View File

@@ -1,7 +1,7 @@
#
# spec file
# spec file for package virt-manager
#
# Copyright (c) 2025 SUSE LLC
# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -38,7 +38,7 @@
%endif
Name: virt-manager%{psuffix}
Version: 5.0.0
Version: 5.1.0
Release: 0
Summary: Virtual Machine Manager
License: GPL-2.0-or-later
@@ -49,44 +49,26 @@ Source1: virt-install.rb
Source2: virt-install.desktop
Source3: virt-manager-supportconfig
# Upstream Patches
Patch1: 001-cli-Support-cpu-maximum.patch
Patch2: 002-gui-Support-maximum-CPU-mode.patch
Patch3: 003-cpu-Prefer-maximum-mode-for-many-emulated-guests.patch
Patch4: 004-domcaps-get-list-of-supported-panic-device-models.patch
Patch5: 005-tests-Update-capabilities-for-advertisting-panic-device-models.patch
Patch6: 006-addhardware-panic-Fill-in-model-combo-with-advertised-values-by-libvirt.patch
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
Patch1: 003-virtinst-cloudinit-include-empty-meta-data-file.patch
Patch2: 009-avoid-NoneType-pixbuf.patch
Patch3: 012-virtManager-wrapped-details-hw-panel-with-GtkScrolledWindow.patch
Patch4: 013-virtinst-interface-add-support-for-backend.hostname-and-backend.fqdn.patch
Patch5: 014-virtinst-add-support-for-acpi-generic-initiator.patch
Patch6: 015-virtinst-add-support-for-pcihole64.patch
Patch7: 017-maint-use-constants-instead-of-strings-for-boot-devices.patch
Patch8: 018-virtinst-rework-get_boot_order.patch
Patch9: 019-virtinst-guest-introduce-can_use_device_boot_order.patch
Patch10: 020-virtinst-remove-legacy-attribute-from-set_boot_order-get_boot_order.patch
Patch11: 021-installer-add-support-to-use-device-boot-order.patch
Patch12: 024-virtinst-Fix-XDG_DATA_HOME-handling.patch
Patch13: 051-addhardware-Add-usb-as-a-recommended-sound-device.patch
Patch14: 055-virtinst-Add-serial-controller-option-to-cli.patch
Patch15: 056-virtinst-Add-NVMe-Controller.patch
Patch16: 057-virtinst-implement-NVMe-disk-target-generation.patch
Patch17: 058-virtManager-Add-NVMe-disk-type.patch
Patch18: 059-ui-Show-NVMe-Controller-details.patch
Patch19: 060-virtinst-fix-locale-when-running-in-flatpak.patch
Patch20: 061-virtinst-add-support-for-iommufd.patch
# SUSE Only
Patch150: virtman-desktop.patch
Patch151: virtman-kvm.patch
@@ -99,7 +81,7 @@ Patch156: virtinst-set-qemu-emulator.patch
Patch203: virtman-load-stored-uris.patch
Patch204: virtman-add-tooltip-to-firmware.patch
Patch205: virtman-modify-gui-defaults.patch
Patch206: virtman-add-sev-memory-support.patch
Patch206: virtman-add-launch-security-support.patch
Patch220: virtinst-default-xen-to-qcow2-format.patch
Patch221: virtinst-detect-oes-distros.patch
Patch222: virtinst-vol-default-nocow.patch
@@ -108,6 +90,7 @@ Patch224: virtinst-s390x-disable-graphics.patch
Patch225: virtinst-add-caasp-support.patch
Patch226: virtinst-add-sle15-detection-support.patch
Patch227: virtinst-media-detection.patch
Patch228: virtinst-query-recommended-firmware.patch
# Bug Fixes
Patch251: virtman-increase-setKeepAlive-count.patch
Patch252: virtman-allow-destroy-from-shutdown-menu-of-crashed-vm.patch
@@ -136,7 +119,7 @@ Patch284: virtinst-add-slem60-detection-support.patch
Patch285: virtinst-windows-server-detection.patch
Patch286: virtinst-drop-removeprefix-usage.patch
Patch287: virtinst-add-sle16-detection-support.patch
Patch288: virtinst-dont-require-uefi-for-sev-snp.patch
Patch288: virtinst-remove-tpm-device-for-tdx-and-snp.patch
BuildArch: noarch
@@ -257,54 +240,63 @@ chmod -x %{buildroot}%{_datadir}/virt-manager/virtManager/virtmanager.py
%if %{with test}
%check
# TODO: check if these are genuine failures or due to the non-upstream patches
# different device names
# bsc#1253017: Set this for testCLI0181virt_install_kvm_session_defaults
export XDG_DATA_HOME="/tmp/.local/share"
# XML contains hda instead of hdc
donttest="test_disk_numtotarget"
# XML contains sd{a,b,c,d} instead of sda{a,b,c,d}
donttest="$donttest or testCLI0001virt_install_many_devices"
donttest="$donttest or testCLI0003virt_install_singleton_config_2"
donttest="$donttest or testCLI0004virt_install_singleton_config_2"
donttest="$donttest or testCLI0101virt_install_cloud_init_default"
donttest="$donttest or testCLI0101virt_install_cloud_init_options1"
donttest="$donttest or testCLI0102virt_install_cloud_init_options1"
donttest="$donttest or testCLI0113virt_install_reinstall_cdrom"
donttest="$donttest or testCLI0117virt_install_reinstall_cdrom"
donttest="$donttest or testCLI0147virt_install_win11"
donttest="$donttest or testCLI0147virt_install_win11_no_uefi"
donttest="$donttest or testCLI0148virt_install_win11_no_uefi"
donttest="$donttest or testCLI0151virt_install_location_iso_and_cloud_init"
donttest="$donttest or testCLI0165virt_install"
donttest="$donttest or testCLI0173virt_install"
donttest="$donttest or testCLI0172virt_install_s390x_cdrom"
donttest="$donttest or testCLI0180virt_install_s390x_cdrom"
donttest="$donttest or testCLI0186virt_install_riscv64_cloud_init"
donttest="$donttest or testCLI0187virt_install_riscv64_cdrom"
donttest="$donttest or testCLI0188virt_install_riscv64_unattended"
donttest="$donttest or testCLI0200virt_install_aarch64_cloud_init"
donttest="$donttest or testCLI0204virt_install_loongarch64_cloud_init"
donttest="$donttest or testCLI0205virt_install_loongarch64_cdrom"
donttest="$donttest or testCLI0206virt_install_loongarch64_unattended"
donttest="$donttest or testCLI0193virt_install_xen_default"
donttest="$donttest or testCLI0216virt_install_xen_default"
donttest="$donttest or testCLI0217virt_install_xenpvh"
donttest="$donttest or testCLI0218virt_install_xen_pv"
donttest="$donttest or testCLI0219virt_install_xen_hvm"
donttest="$donttest or testCLI0220virt_install_xen_hvm"
donttest="$donttest or testCLI0227virt_install_bhyve_default_f27"
donttest="$donttest or testCLI0307virt_xml_build_disk_domain"
donttest="$donttest or testCLI0315virt_xml_edit_cpu_host_copy"
donttest="$donttest or testCLI0316virt_xml_build_pool_logical_disk"
donttest="$donttest or testCLI0416virt_xml_add_disk_create_storage_start"
donttest="$donttest or testCLI0438virt_clone_auto_unmanaged"
donttest="$donttest or testCLI0442virt_clone"
donttest="$donttest or testCLI0443virt_clone"
donttest="$donttest or testCLI0457virt_clone"
donttest="$donttest or testCLI0458virt_clone"
donttest="$donttest or testCLI0460virt_clone"
donttest="$donttest or testCLI0461virt_clone"
donttest="$donttest or testCLI0468virt_clone"
donttest="$donttest or test_virtinstall_no_testsuite"
# There are XML properties that are untested in the test suite.
donttest="$donttest or testCheckXMLBuilderProps"
# There are command line arguments or aliases are not checked in the test suite.
donttest="$donttest or testCheckCLISuboptions"
# We insert cache="unsafe" during installation
donttest="$donttest or testCLI0007virt_install_singleton_config_2"
donttest="$donttest or testCLI0105virt_install_cloud_init_default"
donttest="$donttest or testCLI0106virt_install_cloud_init_options1"
donttest="$donttest or testCLI0111virt_install_cloud_init_options6"
donttest="$donttest or testCLI0123virt_install_reinstall_cdrom"
donttest="$donttest or testCLI0153virt_install_win11"
donttest="$donttest or testCLI0154virt_install_win11_no_uefi"
donttest="$donttest or testCLI0157virt_install_location_iso_and_cloud_init"
# RuntimeError: SEV launch security requires a Q35 machine
donttest="$donttest or testCLI0179virt_install"
# Size must be specified for non existent volume '__virtinst_cli_exist1.img'
donttest="$donttest or testCLI0186virt_install_s390x_cdrom"
# We insert cache="unsafe" during installation
donttest="$donttest or testCLI0192virt_install_riscv64_cloud_init"
donttest="$donttest or testCLI0193virt_install_riscv64_cdrom"
donttest="$donttest or testCLI0194virt_install_riscv64_unattended"
donttest="$donttest or testCLI0207virt_install_aarch64_cloud_init"
# We default to 4 vcpus instead of 1
donttest="$donttest or testCLI0208virt_install_aarch64_win11"
# We insert cache="unsafe" during installation
donttest="$donttest or testCLI0212virt_install_loongarch64_cloud_init"
donttest="$donttest or testCLI0213virt_install_loongarch64_cdrom"
donttest="$donttest or testCLI0214virt_install_loongarch64_unattended"
# We use grub.xen instead of pygrub
donttest="$donttest or testCLI0228virt_install_xen_default"
donttest="$donttest or testCLI0229virt_install_xenpvh"
donttest="$donttest or testCLI0230virt_install_xen_pv"
# We use qemu-system-i386 instead of the ancient qemu-dm and also no e1000 nic
donttest="$donttest or testCLI0231virt_install_xen_hvm"
donttest="$donttest or testCLI0232virt_install_xen_hvm"
# foobhyve.qcow2 used instead of foobhyve.img
donttest="$donttest or testCLI0239virt_install_bhyve_default_f27"
# XML contains vda instead of vdaf
donttest="$donttest or testCLI0319virt_xml_build_disk_domain"
donttest="$donttest or testCLI0328virt_xml_build_pool_logical_disk"
# XML contains hda instead of hdd
donttest="$donttest or testCLI0428virt_xml_add_disk_create_storage_start"
# Disk path '/tmp/__virtinst_cli_exist1.img' does not exist.
donttest="$donttest or testCLI0450virt_clone_auto_unmanaged"
donttest="$donttest or testCLI0454virt_clone"
donttest="$donttest or testCLI0455virt_clone"
donttest="$donttest or testCLI0469virt_clone"
donttest="$donttest or testCLI0470virt_clone"
donttest="$donttest or testCLI0472virt_clone"
donttest="$donttest or testCLI0473virt_clone"
donttest="$donttest or testCLI0480virt_clone"
#
pytest -v -rfEs -k "not ($donttest)"
%endif

View File

@@ -1,11 +1,11 @@
References: bsc#1010060
Index: virt-manager-3.3.0/virtinst/install/urldetect.py
Index: virt-manager-5.1.0/virtinst/install/urldetect.py
===================================================================
--- virt-manager-3.3.0.orig/virtinst/install/urldetect.py
+++ virt-manager-3.3.0/virtinst/install/urldetect.py
@@ -278,6 +278,12 @@ class _SUSEContent(object):
self.product_name.strip().rsplit(' ')[5][2])
--- virt-manager-5.1.0.orig/virtinst/install/urldetect.py
+++ virt-manager-5.1.0/virtinst/install/urldetect.py
@@ -281,6 +281,12 @@ class _SUSEContent:
sle_version = sle_version + "." + self.product_name.strip().rsplit(" ")[5][2]
distro_version = sle_version
+ # SUSE Container as a Service Platform
@@ -17,17 +17,17 @@ Index: virt-manager-3.3.0/virtinst/install/urldetect.py
return distro_version
@@ -564,6 +570,9 @@ class _SuseDistro(_RHELDistro):
@@ -560,6 +566,9 @@ class _SuseDistro(_RHELDistro):
version = distro_version.split('.', 1)[0].strip()
version = distro_version.split(".", 1)[0].strip()
+ if self._variant_prefix.startswith(("caasp")):
+ return self._variant_prefix + distro_version
+
if str(self._variant_prefix).startswith(("sles", "sled", "oes")):
sp_version = ""
if len(distro_version.split('.', 1)) == 2:
@@ -633,6 +642,14 @@ class _OpensuseDistro(_SuseDistro):
if len(distro_version.split(".", 1)) == 2:
@@ -629,6 +638,14 @@ class _OpensuseDistro(_SuseDistro):
famregex = ".*openSUSE.*"
@@ -42,7 +42,7 @@ Index: virt-manager-3.3.0/virtinst/install/urldetect.py
class _OESDistro(_SuseDistro):
PRETTY_NAME = "OES"
matching_distros = ["oes"]
@@ -870,6 +887,7 @@ def _build_distro_list(osobj):
@@ -867,6 +884,7 @@ def _build_distro_list(osobj):
_SLESDistro,
_SLEDDistro,
_OpensuseDistro,

View File

@@ -1,10 +1,10 @@
References: bsc#1192238, jsc#SLE-17764
Index: virt-manager-3.3.0/virtinst/install/urldetect.py
Index: virt-manager-5.1.0/virtinst/install/urldetect.py
===================================================================
--- virt-manager-3.3.0.orig/virtinst/install/urldetect.py
+++ virt-manager-3.3.0/virtinst/install/urldetect.py
@@ -724,6 +724,26 @@ class _OESDistro(_SuseDistro):
--- virt-manager-5.1.0.orig/virtinst/install/urldetect.py
+++ virt-manager-5.1.0/virtinst/install/urldetect.py
@@ -718,6 +718,26 @@ class _OESDistro(_SuseDistro):
famregex = ".*Open Enterprise Server.*"
@@ -31,7 +31,7 @@ Index: virt-manager-3.3.0/virtinst/install/urldetect.py
class _DebianDistro(_DistroTree):
# ex. http://ftp.egr.msu.edu/debian/dists/sarge/main/installer-i386/
# daily builds: https://d-i.debian.org/daily-images/amd64/
@@ -950,6 +970,7 @@ def _build_distro_list(osobj):
@@ -945,6 +965,7 @@ def _build_distro_list(osobj):
_FedoraDistro,
_RHELDistro,
_CentOSDistro,

View File

@@ -1,10 +1,10 @@
References: bsc#1190215
Index: virt-manager-3.3.0/virtinst/install/urldetect.py
Index: virt-manager-5.1.0/virtinst/install/urldetect.py
===================================================================
--- virt-manager-3.3.0.orig/virtinst/install/urldetect.py
+++ virt-manager-3.3.0/virtinst/install/urldetect.py
@@ -274,12 +274,17 @@ class _SUSEContent(object):
--- virt-manager-5.1.0.orig/virtinst/install/urldetect.py
+++ virt-manager-5.1.0/virtinst/install/urldetect.py
@@ -278,11 +278,15 @@ class _SUSEContent:
if "Enterprise" in self.product_name or "SLES" in self.product_name:
if " SAP " in self.product_name:
sle_version = self.product_name.strip().rsplit(' ')[7]
@@ -14,15 +14,13 @@ Index: virt-manager-3.3.0/virtinst/install/urldetect.py
sle_version = self.product_name.strip().rsplit(' ')[4]
if len(self.product_name.strip().rsplit(' ')) > 5 and not " Micro " in self.product_name:
if " SAP " in self.product_name:
sle_version = (sle_version + '.' +
self.product_name.strip().rsplit(' ')[8][2])
sle_version = (sle_version + '.' + self.product_name.strip().rsplit(' ')[8][2])
+ if " High Performance " in self.product_name:
+ sle_version = (sle_version + '.' +
+ self.product_name.strip().rsplit(' ')[7][2])
+ sle_version = (sle_version + '.' + self.product_name.strip().rsplit(' ')[7][2])
else:
sle_version = (sle_version + '.' +
self.product_name.strip().rsplit(' ')[5][2])
@@ -671,6 +676,14 @@ class _SLESDistro(_SuseDistro):
sle_version = (sle_version + '.' + self.product_name.strip().rsplit(' ')[5][2])
distro_version = sle_version
@@ -666,6 +670,14 @@ class _SLESDistro(_SuseDistro):
famregex = ".*SUSE Linux Enterprise.*"
@@ -37,7 +35,7 @@ Index: virt-manager-3.3.0/virtinst/install/urldetect.py
class _SLEDDistro(_SuseDistro):
PRETTY_NAME = "SLED"
matching_distros = ["sled"]
@@ -939,6 +952,7 @@ def _build_distro_list(osobj):
@@ -935,6 +947,7 @@ def _build_distro_list(osobj):
_CentOSDistro,
_SLEDistro,
_SLESDistro,

View File

@@ -1,10 +1,10 @@
References: bsc#1054986
Index: virt-manager-3.3.0/virtinst/install/urldetect.py
Index: virt-manager-5.1.0/virtinst/install/urldetect.py
===================================================================
--- virt-manager-3.3.0.orig/virtinst/install/urldetect.py
+++ virt-manager-3.3.0/virtinst/install/urldetect.py
@@ -597,6 +597,10 @@ class _SuseDistro(_RHELDistro):
--- virt-manager-5.1.0.orig/virtinst/install/urldetect.py
+++ virt-manager-5.1.0/virtinst/install/urldetect.py
@@ -593,6 +593,10 @@ class _SuseDistro(_RHELDistro):
if re.search("openSUSE Tumbleweed", self.cache.treeinfo_name):
return "opensusetumbleweed"
@@ -15,10 +15,10 @@ Index: virt-manager-3.3.0/virtinst/install/urldetect.py
version, update = self.cache.split_version()
base = self._variant_prefix + str(version)
while update >= 0:
@@ -604,7 +608,10 @@ class _SuseDistro(_RHELDistro):
@@ -600,7 +604,10 @@ class _SuseDistro(_RHELDistro):
# SLE doesn't use '.0' for initial releases in
# osinfo-db (sles11, sles12, etc)
if update > 0 or not base.startswith('sle'):
if update > 0 or not base.startswith("sle"):
- tryvar += ".%s" % update
+ if sp_version:
+ tryvar += "sp%s" % update
@@ -27,7 +27,7 @@ Index: virt-manager-3.3.0/virtinst/install/urldetect.py
if OSDB.lookup_os(tryvar):
return tryvar
update -= 1
@@ -618,6 +625,14 @@ class _SuseDistro(_RHELDistro):
@@ -614,6 +621,14 @@ class _SuseDistro(_RHELDistro):
return var
@@ -42,7 +42,7 @@ Index: virt-manager-3.3.0/virtinst/install/urldetect.py
class _SLESDistro(_SuseDistro):
PRETTY_NAME = "SLES"
matching_distros = ["sles"]
@@ -884,6 +899,7 @@ def _build_distro_list(osobj):
@@ -881,6 +896,7 @@ def _build_distro_list(osobj):
_FedoraDistro,
_RHELDistro,
_CentOSDistro,

View File

@@ -1,43 +1,116 @@
Index: virt-manager-5.0.0/virtinst/install/urldetect.py
Index: virt-manager-5.1.0/virtinst/install/urldetect.py
===================================================================
--- virt-manager-5.0.0.orig/virtinst/install/urldetect.py
+++ virt-manager-5.0.0/virtinst/install/urldetect.py
@@ -279,6 +279,10 @@ class _SUSEContent(object):
--- virt-manager-5.1.0.orig/virtinst/install/urldetect.py
+++ virt-manager-5.1.0/virtinst/install/urldetect.py
@@ -271,20 +271,27 @@ class _SUSEContent:
# Special case, parse version out of a line like this
# cpe:/o:opensuse:opensuse:13.2,openSUSE
- if not distro_version and re.match("^.*:.*,openSUSE*", self.content_dict["DISTRO"]):
- distro_version = self.content_dict["DISTRO"].rsplit(",", 1)[0].strip().rsplit(":")[4]
+ if not distro_version:
+ if "DISTRO" in self.content_dict and re.match("^.*:.*,openSUSE*", self.content_dict["DISTRO"]):
+ distro_version = self.content_dict["DISTRO"].rsplit(",", 1)[0].strip().rsplit(":")[4]
+ elif "openSUSE" in self.product_name:
+ distro_version = self.product_name.strip().rsplit(' ')[1]
distro_version = distro_version.strip()
if "Enterprise" in self.product_name or "SLES" in self.product_name or "Micro" in self.product_name:
if " SAP " in self.product_name:
sle_version = self.product_name.strip().rsplit(' ')[7]
- if " High Performance " in self.product_name:
+ elif " High Performance " in self.product_name:
sle_version = self.product_name.strip().rsplit(' ')[6]
+ elif "SUSE SL Micro" in self.product_name:
+ sle_version = self.product_name.strip().rsplit(' ')[3]
else:
if "SUSE SL Micro" in self.product_name:
sle_version = self.product_name.strip().rsplit(' ')[3]
+ elif "SUSE SLES Full" in self.product_name:
+ # For SLES 16
+ sle_version = self.product_name.strip().rsplit(' ')[3]
+ sle_version = sle_version.rstrip(".0")
else:
sle_version = self.product_name.strip().rsplit(' ')[4]
- if "SUSE SL Micro" in self.product_name:
- sle_version = self.product_name.strip().rsplit(' ')[3]
- else:
- sle_version = self.product_name.strip().rsplit(' ')[4]
+ sle_version = self.product_name.strip().rsplit(' ')
+ for num in sle_version:
+ num = num.replace(".0", "", 1)
+ if num.isnumeric():
+ sle_version = num
+ break
if len(self.product_name.strip().rsplit(' ')) > 5 and not " Micro " in self.product_name:
@@ -521,10 +525,16 @@ class _SuseDistro(_RHELDistro):
if " SAP " in self.product_name:
sle_version = (sle_version + '.' + self.product_name.strip().rsplit(' ')[8][2])
@@ -518,13 +525,20 @@ class _SuseDistro(_RHELDistro):
if not cache.checked_for_suse_content:
cache.checked_for_suse_content = True
+ # The content file exists in sles12 and older
content_str = cache.acquire_file_content("content")
if content_str is None:
products_str = cache.acquire_file_content("media.1/products")
+ if not products_str:
+ # For SLES16 install iso (not agama)
+ # For SLES16 and Leap 16 install iso
+ products_str = cache.acquire_file_content("install/media.1/products")
if products_str:
products_str = products_str.replace('/', ' ,', 1)
products_str = "DISTRO " + products_str.replace('-', ' ')
media_str = cache.acquire_file_content("media.1/media")
+ if not media_str:
+ # For SLES16 install iso (not agama)
+ # For SLES16 and Leap 16 install iso
+ media_str = cache.acquire_file_content("install/media.1/media")
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"))
@@ -580,6 +594,10 @@ class _SuseDistro(_RHELDistro):
if tree_arch == "ppc64":
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,
self._kernel_paths.append(("boot/%s/linux" % tree_arch, "boot/%s/initrd" % tree_arch))
# Tested with Opensuse 10.0
@@ -669,7 +687,7 @@ class _SLESDistro(_SuseDistro):
PRETTY_NAME = "SLES"
matching_distros = ["sles"]
_variant_prefix = "sles"
- _suse_regex = [".*SUSE Linux Enterprise Server*", ".*SUSE SLES*"]
+ _suse_regex = [".*SUSE Linux Enterprise Server*", ".*SLES*", ".*SUSE SLES*"]
famregex = ".*SUSE Linux Enterprise.*"
@@ -965,17 +983,17 @@ def _build_distro_list(osobj):
allstores = [
# Libosinfo takes priority
_LibosinfoDistro,
- _FedoraDistro,
- _RHELDistro,
- _CentOSDistro,
- _OLDistro,
_SLEDistro,
_SLESDistro,
+ _OpensuseDistro,
_SLEHPCDistro,
_SLEDDistro,
- _OpensuseDistro,
_MICRODistro,
_CAASPDistro,
+ _FedoraDistro,
+ _RHELDistro,
+ _CentOSDistro,
+ _OLDistro,
_OESDistro,
_DebianDistro,
_UbuntuDistro,
Index: virt-manager-5.1.0/virtManager/createvm.py
===================================================================
--- virt-manager-5.1.0.orig/virtManager/createvm.py
+++ virt-manager-5.1.0/virtManager/createvm.py
@@ -31,7 +31,7 @@ from .storagebrowse import vmmStorageBro
from .vmwindow import vmmVMWindow
# Number of seconds to wait for media detection
-DETECT_TIMEOUT = 20
+DETECT_TIMEOUT = 30
DEFAULT_MEM = 1024

View File

@@ -1,22 +1,22 @@
Add support for detecting SUSE Linux Enterprise Micro.
See also the osinfo-db package for the description file.
Index: virt-manager-3.3.0/virtinst/install/urldetect.py
Index: virt-manager-5.1.0/virtinst/install/urldetect.py
===================================================================
--- virt-manager-3.3.0.orig/virtinst/install/urldetect.py
+++ virt-manager-3.3.0/virtinst/install/urldetect.py
@@ -276,7 +276,7 @@ class _SUSEContent(object):
--- virt-manager-5.1.0.orig/virtinst/install/urldetect.py
+++ virt-manager-5.1.0/virtinst/install/urldetect.py
@@ -280,7 +280,7 @@ class _SUSEContent:
sle_version = self.product_name.strip().rsplit(' ')[7]
else:
sle_version = self.product_name.strip().rsplit(' ')[4]
- if len(self.product_name.strip().rsplit(' ')) > 5:
- if len(self.product_name.strip().rsplit(" ")) > 5:
+ if len(self.product_name.strip().rsplit(' ')) > 5 and not " Micro " in self.product_name:
if " SAP " in self.product_name:
sle_version = (sle_version + '.' +
self.product_name.strip().rsplit(' ')[8][2])
@@ -597,6 +597,9 @@ class _SuseDistro(_RHELDistro):
sle_version = (sle_version + '.' + self.product_name.strip().rsplit(' ')[8][2])
else:
@@ -592,6 +592,9 @@ class _SuseDistro(_RHELDistro):
version = distro_version.split('.', 1)[0].strip()
version = distro_version.split(".", 1)[0].strip()
+ if self._variant_prefix.startswith(("slem")):
+ return self._variant_prefix + distro_version
@@ -24,7 +24,7 @@ Index: virt-manager-3.3.0/virtinst/install/urldetect.py
if self._variant_prefix.startswith(("caasp")):
return self._variant_prefix + distro_version
@@ -684,6 +687,14 @@ class _OpensuseDistro(_SuseDistro):
@@ -679,6 +682,14 @@ class _OpensuseDistro(_SuseDistro):
famregex = ".*openSUSE.*"
@@ -39,7 +39,7 @@ Index: virt-manager-3.3.0/virtinst/install/urldetect.py
class _CAASPDistro(_SuseDistro):
PRETTY_NAME = "SLES"
matching_distros = ["caasp"]
@@ -930,6 +941,7 @@ def _build_distro_list(osobj):
@@ -926,6 +937,7 @@ def _build_distro_list(osobj):
_SLESDistro,
_SLEDDistro,
_OpensuseDistro,

View File

@@ -5,12 +5,12 @@ temporarily dropped from the Micro version name, then added
back as the official name upon release but the ISO media does not
have the word Enterprise.
Index: virt-manager-4.1.0/virtinst/install/urldetect.py
Index: virt-manager-5.1.0/virtinst/install/urldetect.py
===================================================================
--- virt-manager-4.1.0.orig/virtinst/install/urldetect.py
+++ virt-manager-4.1.0/virtinst/install/urldetect.py
@@ -271,13 +271,16 @@ class _SUSEContent(object):
",", 1)[0].strip().rsplit(":")[4]
--- virt-manager-5.1.0.orig/virtinst/install/urldetect.py
+++ virt-manager-5.1.0/virtinst/install/urldetect.py
@@ -275,13 +275,16 @@ class _SUSEContent:
distro_version = self.content_dict["DISTRO"].rsplit(",", 1)[0].strip().rsplit(":")[4]
distro_version = distro_version.strip()
- if "Enterprise" in self.product_name or "SLES" in self.product_name:
@@ -27,8 +27,8 @@ Index: virt-manager-4.1.0/virtinst/install/urldetect.py
+ sle_version = self.product_name.strip().rsplit(' ')[4]
if len(self.product_name.strip().rsplit(' ')) > 5 and not " Micro " in self.product_name:
if " SAP " in self.product_name:
sle_version = (sle_version + '.' +
@@ -704,7 +707,7 @@ class _MICRODistro(_SuseDistro):
sle_version = (sle_version + '.' + self.product_name.strip().rsplit(' ')[8][2])
@@ -698,7 +701,7 @@ class _MICRODistro(_SuseDistro):
PRETTY_NAME = "SLES"
matching_distros = ["slem"]
_variant_prefix = "slem"

View File

@@ -1,10 +1,10 @@
References: fate#326960, bsc#1123942
Index: virt-manager-4.2.0/virtinst/install/installer.py
Index: virt-manager-5.1.0/virtinst/install/installer.py
===================================================================
--- virt-manager-4.2.0.orig/virtinst/install/installer.py
+++ virt-manager-4.2.0/virtinst/install/installer.py
@@ -622,7 +622,10 @@ class Installer(object):
--- virt-manager-5.1.0.orig/virtinst/install/installer.py
+++ virt-manager-5.1.0/virtinst/install/installer.py
@@ -621,7 +621,10 @@ class Installer:
guest.bootloader = "pygrub"
else:
guest.bootloader = None
@@ -16,11 +16,11 @@ Index: virt-manager-4.2.0/virtinst/install/installer.py
log.debug("Using grub.xen to boot guest")
on_reboot_value = guest.on_reboot
self._alter_bootconfig(guest)
Index: virt-manager-4.2.0/virtManager/delete.py
Index: virt-manager-5.1.0/virtManager/delete.py
===================================================================
--- virt-manager-4.2.0.orig/virtManager/delete.py
+++ virt-manager-4.2.0/virtManager/delete.py
@@ -459,7 +459,7 @@ def _populate_storage_list(storage_list,
--- virt-manager-5.1.0.orig/virtManager/delete.py
+++ virt-manager-5.1.0/virtManager/delete.py
@@ -472,7 +472,7 @@ def _populate_storage_list(storage_list,
model.clear()
for diskdata in diskdatas:

View File

@@ -1,10 +1,10 @@
Reference: bnc#885380
Allow Xen based VMs to default to using qcow2
Index: virt-manager-3.0.0/virtinst/support.py
Index: virt-manager-5.1.0/virtinst/support.py
===================================================================
--- virt-manager-3.0.0.orig/virtinst/support.py
+++ virt-manager-3.0.0/virtinst/support.py
@@ -242,7 +242,7 @@ class SupportCache:
--- virt-manager-5.1.0.orig/virtinst/support.py
+++ virt-manager-5.1.0/virtinst/support.py
@@ -246,7 +246,7 @@ class SupportCache:
# This is an arbitrary check to say whether it's a good idea to
# default to qcow2. It might be fine for xen or qemu older than the versions
# here, but until someone tests things I'm going to be a bit conservative.
@@ -12,4 +12,4 @@ Index: virt-manager-3.0.0/virtinst/support.py
+ conn_default_qcow2 = _make(hv_version={"qemu": "1.2.0", "all": 0})
conn_autosocket = _make(hv_libvirt_version={"qemu": "1.0.6"})
conn_pm_disable = _make(hv_version={"qemu": "1.2.0", "test": 0})
conn_qcow2_lazy_refcounts = _make(
conn_qcow2_lazy_refcounts = _make(version="1.1.0", hv_version={"qemu": "1.2.0", "test": 0})

View File

@@ -1,19 +1,19 @@
Enhancement to correctly detect Open Enterprise Server media is
selected as the installation source.
Index: virt-manager-3.3.0/virtinst/install/urldetect.py
Index: virt-manager-5.1.0/virtinst/install/urldetect.py
===================================================================
--- virt-manager-3.3.0.orig/virtinst/install/urldetect.py
+++ virt-manager-3.3.0/virtinst/install/urldetect.py
@@ -564,7 +564,7 @@ class _SuseDistro(_RHELDistro):
--- virt-manager-5.1.0.orig/virtinst/install/urldetect.py
+++ virt-manager-5.1.0/virtinst/install/urldetect.py
@@ -560,7 +560,7 @@ class _SuseDistro(_RHELDistro):
version = distro_version.split('.', 1)[0].strip()
version = distro_version.split(".", 1)[0].strip()
- if str(self._variant_prefix).startswith(("sles", "sled")):
+ if str(self._variant_prefix).startswith(("sles", "sled", "oes")):
sp_version = ""
if len(distro_version.split('.', 1)) == 2:
sp_version = 'sp' + distro_version.split('.', 1)[1].strip()
@@ -633,6 +633,14 @@ class _OpensuseDistro(_SuseDistro):
if len(distro_version.split(".", 1)) == 2:
sp_version = "sp" + distro_version.split(".", 1)[1].strip()
@@ -629,6 +629,14 @@ class _OpensuseDistro(_SuseDistro):
famregex = ".*openSUSE.*"
@@ -28,7 +28,7 @@ Index: virt-manager-3.3.0/virtinst/install/urldetect.py
class _DebianDistro(_DistroTree):
# ex. http://ftp.egr.msu.edu/debian/dists/sarge/main/installer-i386/
# daily builds: https://d-i.debian.org/daily-images/amd64/
@@ -862,6 +870,7 @@ def _build_distro_list(osobj):
@@ -859,6 +867,7 @@ def _build_distro_list(osobj):
_SLESDistro,
_SLEDDistro,
_OpensuseDistro,

View File

@@ -1,17 +0,0 @@
References: bsc#1239013
virt-install incorrectly assumes SEV-SNP guests require EFI firmware
via a pflash device. For SNP guests, the firmware must be provided
as a ROM device.
--- virt-manager-5.0.0/virtinst/domain/launch_security.py.orig 2025-03-06 10:02:31.600954861 -0700
+++ virt-manager-5.0.0/virtinst/domain/launch_security.py 2025-03-06 14:42:46.001355525 -0700
@@ -43,7 +43,7 @@ class DomainLaunchSecurity(XMLBuilder):
self.policy = "0x07"
def _set_defaults_sev_snp(self, guest):
- if not guest.os.is_q35() or not guest.is_uefi():
+ if not guest.os.is_q35():
raise RuntimeError(_("SEV-SNP launch security requires a Q35 UEFI machine"))
def set_defaults(self, guest):

View File

@@ -1,10 +1,10 @@
References: bsc#1234215
Index: virt-manager-5.0.0/virtinst/devices/disk.py
Index: virt-manager-5.1.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):
--- virt-manager-5.1.0.orig/virtinst/devices/disk.py
+++ virt-manager-5.1.0/virtinst/devices/disk.py
@@ -703,7 +703,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:
@@ -15,4 +15,4 @@ Index: virt-manager-5.0.0/virtinst/devices/disk.py
+ newpath = newpath[len(prefix):]
if self._storage_backend.will_create_storage():
raise xmlutil.DevError(
raise xmlutil.DevError("Can't change disk path if storage creation info has been set.")

View File

@@ -2,11 +2,11 @@ Older SLE guests have a two stage installation that need the ISO.
Newer SLE PV guests hang when a cdrom device is attached without
an ISO file.
Index: virt-manager-3.3.0/virtinst/install/installer.py
Index: virt-manager-5.1.0/virtinst/install/installer.py
===================================================================
--- virt-manager-3.3.0.orig/virtinst/install/installer.py
+++ virt-manager-3.3.0/virtinst/install/installer.py
@@ -168,7 +168,8 @@ class Installer(object):
--- virt-manager-5.1.0.orig/virtinst/install/installer.py
+++ virt-manager-5.1.0/virtinst/install/installer.py
@@ -178,7 +178,8 @@ class Installer:
def _remove_install_cdrom_media(self, guest):
if not self._install_cdrom_device_added:
return

View File

@@ -2,14 +2,14 @@ References: bsc#1180897
Removing the cdrom iso file from the device prevents booting
with a qemu error.
Index: virt-manager-3.3.0/virtinst/install/installer.py
Index: virt-manager-5.1.0/virtinst/install/installer.py
===================================================================
--- virt-manager-3.3.0.orig/virtinst/install/installer.py
+++ virt-manager-3.3.0/virtinst/install/installer.py
@@ -175,8 +175,9 @@ class Installer(object):
--- virt-manager-5.1.0.orig/virtinst/install/installer.py
+++ virt-manager-5.1.0/virtinst/install/installer.py
@@ -184,8 +184,9 @@ class Installer:
return
for disk in guest.devices.disk:
if (disk.is_cdrom() and
disk.get_source_path() == self._cdrom_path()):
if disk.is_cdrom() and disk.get_source_path() == self._cdrom_path():
- disk.set_source_path(None)
- disk.sync_path_props()
+ if not guest.os.is_xenpv():

View File

@@ -2,11 +2,11 @@ When both the content file and .treeinfo file are missing from the media
look in the media.1/products and media.1/media files for information.
Caasp 4.0 has not content or .treeinfo file on the media
Index: virt-manager-3.3.0/virtinst/install/urldetect.py
Index: virt-manager-5.1.0/virtinst/install/urldetect.py
===================================================================
--- virt-manager-3.3.0.orig/virtinst/install/urldetect.py
+++ virt-manager-3.3.0/virtinst/install/urldetect.py
@@ -505,8 +505,23 @@ class _SuseDistro(_RHELDistro):
--- virt-manager-5.1.0.orig/virtinst/install/urldetect.py
+++ virt-manager-5.1.0/virtinst/install/urldetect.py
@@ -507,8 +507,23 @@ class _SuseDistro(_RHELDistro):
cache.checked_for_suse_content = True
content_str = cache.acquire_file_content("content")
if content_str is None:

View File

@@ -2,11 +2,11 @@ Reference: bnc#863821
grub.xen is required to boot PV VMs that use the BTRFS filesystem.
This patch forces the use of grub.xen (instead of using pygrub) for
suse distros SLE12GA, openSUSE 13.2, and newer.
Index: virt-manager-4.2.0/virtinst/install/installer.py
Index: virt-manager-5.1.0/virtinst/install/installer.py
===================================================================
--- virt-manager-4.2.0.orig/virtinst/install/installer.py
+++ virt-manager-4.2.0/virtinst/install/installer.py
@@ -229,7 +229,8 @@ class Installer(object):
--- virt-manager-5.1.0.orig/virtinst/install/installer.py
+++ virt-manager-5.1.0/virtinst/install/installer.py
@@ -240,7 +240,8 @@ class Installer:
def _alter_treemedia_bootconfig(self, guest):
if not self._treemedia:
@@ -16,10 +16,10 @@ Index: virt-manager-4.2.0/virtinst/install/installer.py
kernel, initrd, kernel_args = self._treemedia_bootconfig
if kernel:
@@ -612,6 +613,21 @@ class Installer(object):
@@ -611,6 +612,21 @@ class Installer:
final_xml = guest.get_xml()
if self.requires_postboot_xml_changes():
initial_xml, final_xml = self._build_postboot_xml(
guest, final_xml, meter)
initial_xml, final_xml = self._build_postboot_xml(guest, final_xml, meter)
+ if (guest.os.is_xenpv() and
+ not guest.os.kernel):
+ os_ver = guest.osinfo.name
@@ -37,4 +37,4 @@ Index: virt-manager-4.2.0/virtinst/install/installer.py
+ final_xml = guest.get_xml()
final_xml = self._pre_reinstall_xml or final_xml
log.debug("Generated initial_xml: %s",
log.debug(

View File

@@ -0,0 +1,40 @@
References: jsc#PED-14636 - Impl: UEFI as default for new VMs
This patch depends on an upstream libosinfo patch.
Index: virt-manager-5.1.0/virtinst/osdict.py
===================================================================
--- virt-manager-5.1.0.orig/virtinst/osdict.py
+++ virt-manager-5.1.0/virtinst/osdict.py
@@ -445,21 +445,27 @@ class _OsVariant:
def _supports_firmware_type(self, name, arch, default):
firmwares = self._get_firmware_list()
+ is_supported = default
+ is_recommended = False
for firmware in firmwares: # pragma: no cover
if firmware.get_architecture() != arch:
continue
if firmware.get_firmware_type() == name:
- return firmware.is_supported()
+ is_supported = firmware.is_supported()
+ if hasattr(firmware, "is_recommended"):
+ is_recommended = firmware.is_recommended()
- return default
+ return (is_supported, is_recommended)
def requires_firmware_efi(self, arch):
ret = False
try:
- supports_efi = self._supports_firmware_type("efi", arch, False)
- supports_bios = self._supports_firmware_type("bios", arch, True)
- ret = supports_efi and not supports_bios
+ supports_efi, recommended_efi = self._supports_firmware_type("efi", arch, False)
+ supports_bios, recommended_bios = self._supports_firmware_type("bios", arch, True)
+ if supports_efi:
+ if not supports_bios or recommended_efi:
+ ret = True
except Exception: # pragma: no cover
log.debug("Error checking osinfo firmware support", exc_info=True)

View File

@@ -0,0 +1,35 @@
References: bsc#1257182
Index: virt-manager-5.1.0/virtinst/guest.py
===================================================================
--- virt-manager-5.1.0.orig/virtinst/guest.py
+++ virt-manager-5.1.0/virtinst/guest.py
@@ -1049,6 +1049,16 @@ class Guest(XMLBuilder):
self.pm.set_defaults(self)
self.os.set_defaults(self)
self.launchSecurity.set_defaults(self)
+ # Currently TPM does not work with SEV-SNP and TDX.
+ # Remove TPM device if present.
+ if self.have_default_tpm:
+ domcaps = self.lookup_domcaps()
+ if domcaps.get_launch_security_type() is not None:
+ for dev in self.devices.get_all():
+ if dev.type == DeviceTpm.TYPE_EMULATOR:
+ self.remove_device(dev)
+ self.have_default_tpm = False
+ break
for dev in self.devices.get_all():
dev.set_defaults(self)
--- virt-manager-5.1.0/tests/data/cli/compare/virt-install-amd-sev.xml.orig 2026-01-23 13:52:18.196433822 -0700
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-amd-sev.xml 2026-01-23 13:53:20.340435342 -0700
@@ -66,9 +66,6 @@
<target type="virtio" name="com.redhat.spice.0"/>
</channel>
<input type="tablet" bus="usb"/>
- <tpm model="tpm-crb">
- <backend type="emulator"/>
- </tpm>
<graphics type="spice" port="-1" tlsPort="-1" autoport="yes">
<image compression="off"/>
</graphics>

View File

@@ -1,10 +1,10 @@
Reference: bnc#869024
Disable graphics on s390x
Index: virt-manager-5.0.0/virtinst/guest.py
Index: virt-manager-5.1.0/virtinst/guest.py
===================================================================
--- virt-manager-5.0.0.orig/virtinst/guest.py
+++ virt-manager-5.0.0/virtinst/guest.py
@@ -212,7 +212,10 @@ class Guest(XMLBuilder):
--- virt-manager-5.1.0.orig/virtinst/guest.py
+++ virt-manager-5.1.0/virtinst/guest.py
@@ -265,7 +265,10 @@ class Guest(XMLBuilder):
self.skip_default_channel = False
self.skip_default_sound = False
self.skip_default_usbredir = False
@@ -16,16 +16,7 @@ Index: virt-manager-5.0.0/virtinst/guest.py
self.skip_default_rng = False
self.skip_default_tpm = False
self.skip_default_input = False
@@ -365,7 +368,7 @@ class Guest(XMLBuilder):
if not os_support:
return False
- if self.os.is_x86():
+ if self.os.is_x86() or self.os.is_s390x():
return True
return False # pragma: no cover
@@ -1153,7 +1156,7 @@ class Guest(XMLBuilder):
@@ -1192,7 +1195,7 @@ class Guest(XMLBuilder):
self.add_device(dev)
def _add_default_video_device(self):

View File

@@ -1,23 +1,22 @@
Index: virt-manager-3.3.0/virtinst/install/urldetect.py
Index: virt-manager-5.1.0/virtinst/install/urldetect.py
===================================================================
--- virt-manager-3.3.0.orig/virtinst/install/urldetect.py
+++ virt-manager-3.3.0/virtinst/install/urldetect.py
@@ -272,9 +272,16 @@ class _SUSEContent(object):
--- virt-manager-5.1.0.orig/virtinst/install/urldetect.py
+++ virt-manager-5.1.0/virtinst/install/urldetect.py
@@ -276,9 +276,15 @@ class _SUSEContent:
distro_version = distro_version.strip()
if "Enterprise" in self.product_name or "SLES" in self.product_name:
- sle_version = self.product_name.strip().rsplit(' ')[4]
- sle_version = self.product_name.strip().rsplit(" ")[4]
+ if " SAP " in self.product_name:
+ sle_version = self.product_name.strip().rsplit(' ')[7]
+ else:
+ sle_version = self.product_name.strip().rsplit(' ')[4]
if len(self.product_name.strip().rsplit(' ')) > 5:
- sle_version = (sle_version + '.' +
if len(self.product_name.strip().rsplit(" ")) > 5:
- sle_version = sle_version + "." + self.product_name.strip().rsplit(" ")[5][2]
+ if " SAP " in self.product_name:
+ sle_version = (sle_version + '.' +
+ self.product_name.strip().rsplit(' ')[8][2])
+ sle_version = (sle_version + '.' + self.product_name.strip().rsplit(' ')[8][2])
+ else:
+ sle_version = (sle_version + '.' +
self.product_name.strip().rsplit(' ')[5][2])
+ sle_version = (sle_version + '.' + self.product_name.strip().rsplit(' ')[5][2])
distro_version = sle_version
# SUSE Container as a Service Platform

View File

@@ -1,10 +1,10 @@
Set cache mode for target installation disk to unsafe for better
performance.
Index: virt-manager-4.2.0/virtinst/install/installer.py
Index: virt-manager-5.1.0/virtinst/install/installer.py
===================================================================
--- virt-manager-4.2.0.orig/virtinst/install/installer.py
+++ virt-manager-4.2.0/virtinst/install/installer.py
@@ -571,6 +571,15 @@ class Installer(object):
--- virt-manager-5.1.0.orig/virtinst/install/installer.py
+++ virt-manager-5.1.0/virtinst/install/installer.py
@@ -572,6 +572,15 @@ class Installer:
def _build_postboot_xml(self, guest_ro, final_xml, meter):
initial_guest = Guest(self.conn, parsexml=final_xml)
@@ -20,8 +20,8 @@ Index: virt-manager-4.2.0/virtinst/install/installer.py
self._alter_bootconfig(initial_guest)
self._alter_install_resources(initial_guest, meter)
if self.has_cloudinit():
@@ -601,11 +610,15 @@ class Installer(object):
"TPM for the first boot")
@@ -601,11 +610,15 @@ class Installer:
)
initial_guest.remove_device(initial_guest.devices.tpm[0])
+ install_xml = initial_guest.get_xml()
@@ -37,23 +37,23 @@ Index: virt-manager-4.2.0/virtinst/install/installer.py
def _build_xml(self, guest, meter):
initial_xml = None
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-cdrom-url.xml
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-cdrom-url.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-cdrom-url.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-cdrom-url.xml
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-cdrom-url.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-cdrom-url.xml
@@ -24,6 +24,7 @@
</source>
<target dev="hda" bus="ide"/>
<readonly/>
<boot order="1"/>
+ <driver cache="unsafe"/>
</disk>
<controller type="usb" model="ich9-ehci1"/>
<controller type="usb" model="ich9-uhci1">
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-memory-hotplug.xml
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-memory-hotplug.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-memory-hotplug.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-memory-hotplug.xml
@@ -35,7 +35,7 @@
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-memory-hotplug.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-memory-hotplug.xml
@@ -33,7 +33,7 @@
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type="file" device="disk">
@@ -61,23 +61,23 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-memory-hotplug.xml
+ <driver name="qemu" type="qcow2" discard="unmap" cache="unsafe"/>
<source file="/var/lib/libvirt/images/fedora.qcow2"/>
<target dev="vda" bus="virtio"/>
</disk>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-cdrom-double.xml
<boot order="2"/>
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-cdrom-double.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-cdrom-double.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-cdrom-double.xml
@@ -22,6 +22,7 @@
<disk type="file" device="disk">
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-cdrom-double.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-cdrom-double.xml
@@ -21,6 +21,7 @@
<source file="/var/lib/libvirt/images/vm1.qcow2"/>
<target dev="hda" bus="ide"/>
<boot order="2"/>
+ <driver cache="unsafe"/>
</disk>
<disk type="file" device="cdrom">
<source file="/pool-dir/testvol1.img"/>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-cloud-init-default.xml
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-cloud-init-default.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-cloud-init-default.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-cloud-init-default.xml
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-cloud-init-default.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-cloud-init-default.xml
@@ -33,6 +33,7 @@
<driver name="qemu" type="qcow2"/>
<source file="/pool-dir/testvol1.img"/>
@@ -86,10 +86,10 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-cloud-init-default
</disk>
<controller type="usb" model="qemu-xhci" ports="15"/>
<controller type="pci" model="pcie-root"/>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-cloud-init-options1.xml
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-cloud-init-options1.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-cloud-init-options1.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-cloud-init-options1.xml
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-cloud-init-options1.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-cloud-init-options1.xml
@@ -44,6 +44,7 @@ chpasswd:
<driver name="qemu" type="qcow2"/>
<source file="/pool-dir/testvol1.img"/>
@@ -98,10 +98,10 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-cloud-init-options
</disk>
<controller type="usb" model="qemu-xhci" ports="15"/>
<controller type="pci" model="pcie-root"/>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-cloud-init-options2.xml
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-cloud-init-options2.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-cloud-init-options2.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-cloud-init-options2.xml
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-cloud-init-options2.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-cloud-init-options2.xml
@@ -39,6 +39,7 @@ ssh_authorized_keys:
<disk type="file" device="disk">
<source file="/pool-dir/testvol1.img"/>
@@ -110,10 +110,10 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-cloud-init-options
</disk>
<controller type="usb" model="ich9-ehci1"/>
<controller type="usb" model="ich9-uhci1">
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-cloud-init-options3.xml
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-cloud-init-options3.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-cloud-init-options3.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-cloud-init-options3.xml
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-cloud-init-options3.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-cloud-init-options3.xml
@@ -33,6 +33,7 @@ users:
<disk type="file" device="disk">
<source file="/pool-dir/testvol1.img"/>
@@ -122,10 +122,10 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-cloud-init-options
</disk>
<controller type="usb" model="ich9-ehci1"/>
<controller type="usb" model="ich9-uhci1">
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-cloud-init-options4.xml
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-cloud-init-options4.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-cloud-init-options4.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-cloud-init-options4.xml
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-cloud-init-options4.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-cloud-init-options4.xml
@@ -26,6 +26,7 @@
<disk type="file" device="disk">
<source file="/pool-dir/testvol1.img"/>
@@ -134,10 +134,10 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-cloud-init-options
</disk>
<controller type="usb" model="ich9-ehci1"/>
<controller type="usb" model="ich9-uhci1">
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-cloud-init-options5.xml
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-cloud-init-options5.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-cloud-init-options5.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-cloud-init-options5.xml
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-cloud-init-options5.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-cloud-init-options5.xml
@@ -26,6 +26,7 @@
<disk type="file" device="disk">
<source file="/pool-dir/testvol1.img"/>
@@ -146,11 +146,11 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-cloud-init-options
</disk>
<controller type="usb" model="ich9-ehci1"/>
<controller type="usb" model="ich9-uhci1">
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-osinfo-multiple-short-id.xml
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-osinfo-multiple-short-id.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-osinfo-multiple-short-id.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-osinfo-multiple-short-id.xml
@@ -31,7 +31,7 @@
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-osinfo-multiple-short-id.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-osinfo-multiple-short-id.xml
@@ -29,7 +29,7 @@
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type="file" device="disk">
@@ -158,11 +158,11 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-osinfo-multiple-sh
+ <driver name="qemu" type="qcow2" cache="unsafe"/>
<source file="/pool-dir/testvol1.img"/>
<target dev="vda" bus="virtio"/>
</disk>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-osinfo-url-with-disk.xml
<boot order="2"/>
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-osinfo-url-with-disk.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-osinfo-url-with-disk.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-osinfo-url-with-disk.xml
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-osinfo-url-with-disk.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-osinfo-url-with-disk.xml
@@ -32,7 +32,7 @@
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
@@ -172,11 +172,11 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-osinfo-url-with-di
<source file="/pool-dir/testvol1.img"/>
<target dev="vda" bus="virtio"/>
</disk>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-osinfo-win7-unattended.xml
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-osinfo-win7-unattended.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-osinfo-win7-unattended.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-osinfo-win7-unattended.xml
@@ -45,7 +45,7 @@
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-osinfo-win7-unattended.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-osinfo-win7-unattended.xml
@@ -44,7 +44,7 @@
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type="file" device="cdrom">
@@ -185,22 +185,22 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-osinfo-win7-unatte
<source file="TESTSUITE_SCRUBBED/tests/data/fakemedia/fake-win7.iso"/>
<target dev="sda" bus="sata"/>
<readonly/>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-osvariant-defaults-pxe.xml
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-osvariant-defaults-pxe.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-osvariant-defaults-pxe.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-osvariant-defaults-pxe.xml
@@ -28,6 +28,7 @@
<disk type="file" device="disk">
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-osvariant-defaults-pxe.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-osvariant-defaults-pxe.xml
@@ -27,6 +27,7 @@
<source file="/var/lib/libvirt/images/fedora26.qcow2"/>
<target dev="hda" bus="ide"/>
<boot order="2"/>
+ <driver cache="unsafe"/>
</disk>
<controller type="usb" model="ich9-ehci1"/>
<controller type="usb" model="ich9-uhci1">
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-reinstall-location.xml
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-reinstall-location.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-reinstall-location.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-reinstall-location.xml
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-reinstall-location.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-reinstall-location.xml
@@ -22,7 +22,7 @@
<devices>
<emulator>/usr/lib/xen/bin/qemu-dm</emulator>
@@ -210,11 +210,11 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-reinstall-location
<source file="/pool-dir/test-clone-simple.img"/>
<target dev="hda" bus="ide"/>
<address type="drive" controller="0" bus="0" target="0" unit="0"/>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-reinstall-pxe.xml
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-reinstall-pxe.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-reinstall-pxe.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-reinstall-pxe.xml
@@ -21,7 +21,7 @@
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-reinstall-pxe.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-reinstall-pxe.xml
@@ -19,7 +19,7 @@
<devices>
<emulator>/usr/lib/xen/bin/qemu-dm</emulator>
<disk type="file" device="disk">
@@ -223,23 +223,23 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-reinstall-pxe.xml
<source file="/pool-dir/test-clone-simple.img"/>
<target dev="hda" bus="ide"/>
<address type="drive" controller="0" bus="0" target="0" unit="0"/>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-w2k3-cdrom.xml
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-w2k3-cdrom.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-w2k3-cdrom.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-w2k3-cdrom.xml
@@ -30,6 +30,7 @@
<disk type="file" device="disk">
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-w2k3-cdrom.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-w2k3-cdrom.xml
@@ -29,6 +29,7 @@
<source file="/pool-dir/testvol1.img"/>
<target dev="hda" bus="ide"/>
<boot order="2"/>
+ <driver cache="unsafe"/>
</disk>
<disk type="file" device="cdrom">
<source file="/pool-dir/testvol2.img"/>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-aarch64-cdrom.xml
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-aarch64-cdrom.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-aarch64-cdrom.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-aarch64-cdrom.xml
@@ -26,7 +26,7 @@
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-aarch64-cdrom.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-aarch64-cdrom.xml
@@ -24,7 +24,7 @@
<devices>
<emulator>/usr/bin/qemu-system-aarch64</emulator>
<disk type="file" device="disk">
@@ -247,11 +247,37 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-aarch64-cdrom.xml
+ <driver name="qemu" type="qcow2" cache="unsafe"/>
<source file="/pool-dir/testvol1.img"/>
<target dev="vda" bus="virtio"/>
</disk>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-cdrom-centos-label.xml
<boot order="2"/>
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-cdrom-centos-label.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-cdrom-centos-label.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-cdrom-centos-label.xml
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-cdrom-centos-label.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-cdrom-centos-label.xml
@@ -30,7 +30,7 @@
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type="file" device="disk">
- <driver name="qemu" type="qcow2"/>
+ <driver name="qemu" type="qcow2" cache="unsafe"/>
<source file="/pool-dir/testvol1.img"/>
<target dev="vda" bus="virtio"/>
<boot order="2"/>
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-kvm-centos7.xml
===================================================================
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-kvm-centos7.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-kvm-centos7.xml
@@ -30,7 +30,7 @@
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type="file" device="disk">
- <driver name="qemu" type="qcow2"/>
+ <driver name="qemu" type="qcow2" cache="unsafe"/>
<source file="/pool-dir/testvol1.img"/>
<target dev="vda" bus="virtio"/>
<boot order="2"/>
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-kvm-cpu-default-fallback.xml
===================================================================
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-kvm-cpu-default-fallback.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-kvm-cpu-default-fallback.xml
@@ -32,7 +32,7 @@
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
@@ -260,12 +286,12 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-cdrom-centos-label
+ <driver name="qemu" type="qcow2" cache="unsafe"/>
<source file="/pool-dir/testvol1.img"/>
<target dev="vda" bus="virtio"/>
</disk>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-centos7.xml
<boot order="2"/>
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-kvm-cpu-hostmodel-fallback.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-kvm-centos7.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-centos7.xml
@@ -32,7 +32,7 @@
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-kvm-cpu-hostmodel-fallback.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-kvm-cpu-hostmodel-fallback.xml
@@ -30,7 +30,7 @@
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type="file" device="disk">
@@ -273,37 +299,11 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-centos7.xml
+ <driver name="qemu" type="qcow2" cache="unsafe"/>
<source file="/pool-dir/testvol1.img"/>
<target dev="vda" bus="virtio"/>
</disk>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-cpu-default-fallback.xml
<boot order="2"/>
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-kvm-fedoralatest-url.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-kvm-cpu-default-fallback.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-cpu-default-fallback.xml
@@ -34,7 +34,7 @@
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type="file" device="disk">
- <driver name="qemu" type="qcow2"/>
+ <driver name="qemu" type="qcow2" cache="unsafe"/>
<source file="/pool-dir/testvol1.img"/>
<target dev="vda" bus="virtio"/>
</disk>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-cpu-hostmodel-fallback.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-kvm-cpu-hostmodel-fallback.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-cpu-hostmodel-fallback.xml
@@ -32,7 +32,7 @@
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type="file" device="disk">
- <driver name="qemu" type="qcow2"/>
+ <driver name="qemu" type="qcow2" cache="unsafe"/>
<source file="/pool-dir/testvol1.img"/>
<target dev="vda" bus="virtio"/>
</disk>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-fedoralatest-url.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-kvm-fedoralatest-url.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-fedoralatest-url.xml
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-kvm-fedoralatest-url.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-kvm-fedoralatest-url.xml
@@ -33,7 +33,7 @@
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
@@ -313,11 +313,11 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-fedoralatest-u
<source file="/pool-dir/testvol1.img"/>
<target dev="vda" bus="virtio"/>
</disk>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-rhel5.xml
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-kvm-rhel5.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-kvm-rhel5.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-rhel5.xml
@@ -32,7 +32,7 @@
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-kvm-rhel5.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-kvm-rhel5.xml
@@ -30,7 +30,7 @@
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type="file" device="disk">
@@ -325,11 +325,11 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-rhel5.xml
+ <driver name="qemu" type="qcow2" cache="unsafe"/>
<source file="/pool-dir/testvol1.img"/>
<target dev="hda" bus="ide"/>
</disk>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-rhel6.xml
<boot order="2"/>
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-kvm-rhel6.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-kvm-rhel6.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-rhel6.xml
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-kvm-rhel6.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-kvm-rhel6.xml
@@ -33,7 +33,7 @@
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
@@ -339,10 +339,10 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-rhel6.xml
<source file="/pool-dir/testvol1.img"/>
<target dev="vda" bus="virtio"/>
</disk>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-rhel7.xml
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-kvm-rhel7.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-kvm-rhel7.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-rhel7.xml
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-kvm-rhel7.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-kvm-rhel7.xml
@@ -33,7 +33,7 @@
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
@@ -352,11 +352,11 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-rhel7.xml
<source file="/pool-dir/testvol1.img"/>
<target dev="vda" bus="virtio"/>
</disk>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-session-defaults.xml
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-kvm-session-defaults.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-kvm-session-defaults.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-session-defaults.xml
@@ -32,7 +32,7 @@
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-kvm-session-defaults.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-kvm-session-defaults.xml
@@ -30,7 +30,7 @@
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type="file" device="disk">
@@ -364,12 +364,12 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-session-defaul
+ <driver name="qemu" type="qcow2" discard="unmap" cache="unsafe"/>
<source file="/tmp/.local/share/libvirt/images/fedora21.qcow2"/>
<target dev="vda" bus="virtio"/>
</disk>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-win10.xml
<boot order="2"/>
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-kvm-win10.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-kvm-win10.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-win10.xml
@@ -47,7 +47,7 @@
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-kvm-win10.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-kvm-win10.xml
@@ -45,7 +45,7 @@
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type="file" device="disk">
@@ -377,12 +377,12 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-win10.xml
+ <driver name="qemu" type="qcow2" cache="unsafe"/>
<source file="/pool-dir/testvol1.img"/>
<target dev="sda" bus="sata"/>
</disk>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-win2k3-cdrom.xml
<boot order="2"/>
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-kvm-win2k3-cdrom.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-kvm-win2k3-cdrom.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-win2k3-cdrom.xml
@@ -47,7 +47,7 @@
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-kvm-win2k3-cdrom.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-kvm-win2k3-cdrom.xml
@@ -45,7 +45,7 @@
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type="file" device="disk">
@@ -390,12 +390,12 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-kvm-win2k3-cdrom.x
+ <driver name="qemu" type="qcow2" cache="unsafe"/>
<source file="/pool-dir/testvol1.img"/>
<target dev="hda" bus="ide"/>
</disk>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-linux2020.xml
<boot order="2"/>
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-linux2020.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-linux2020.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-linux2020.xml
@@ -32,7 +32,7 @@
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-linux2020.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-linux2020.xml
@@ -30,7 +30,7 @@
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type="file" device="disk">
@@ -403,11 +403,11 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-linux2020.xml
+ <driver name="qemu" type="qcow2" discard="unmap" cache="unsafe"/>
<source file="/var/lib/libvirt/images/linux2020.qcow2"/>
<target dev="vda" bus="virtio"/>
</disk>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-location-iso.xml
<boot order="2"/>
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-location-iso.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-location-iso.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-location-iso.xml
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-location-iso.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-location-iso.xml
@@ -32,7 +32,7 @@
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
@@ -417,10 +417,10 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-location-iso.xml
<source file="/pool-dir/testvol1.img"/>
<target dev="vda" bus="virtio"/>
</disk>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-location-manual-kernel.xml
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-location-manual-kernel.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-location-manual-kernel.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-location-manual-kernel.xml
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-location-manual-kernel.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-location-manual-kernel.xml
@@ -27,7 +27,7 @@
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
@@ -430,10 +430,10 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-location-manual-ke
<source file="TESTSUITE_SCRUBBED/tests/data/fakemedia/fake-no-osinfo.iso"/>
<target dev="hda" bus="ide"/>
<readonly/>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-osinfo-netinst-unattended.xml
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-osinfo-netinst-unattended.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-osinfo-netinst-unattended.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-osinfo-netinst-unattended.xml
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-osinfo-netinst-unattended.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-osinfo-netinst-unattended.xml
@@ -32,7 +32,7 @@
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
@@ -443,11 +443,11 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-osinfo-netinst-una
<source file="TESTSUITE_SCRUBBED/tests/data/fakemedia/fake-f26-netinst.iso"/>
<target dev="sda" bus="sata"/>
<readonly/>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-q35-defaults.xml
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-q35-defaults.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-q35-defaults.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-q35-defaults.xml
@@ -27,7 +27,7 @@
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-q35-defaults.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-q35-defaults.xml
@@ -25,7 +25,7 @@
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type="file" device="disk">
@@ -455,36 +455,36 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-q35-defaults.xml
+ <driver name="qemu" type="qcow2" cache="unsafe"/>
<source file="/pool-dir/testvol1.img"/>
<target dev="sda" bus="sata"/>
</disk>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-remote-storage.xml
<boot order="2"/>
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-remote-storage.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-remote-storage.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-remote-storage.xml
@@ -22,6 +22,7 @@
<disk type="file" device="disk">
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-remote-storage.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-remote-storage.xml
@@ -21,6 +21,7 @@
<source file="/foo/bar/baz"/>
<target dev="hda" bus="ide"/>
<boot order="2"/>
+ <driver cache="unsafe"/>
</disk>
<disk type="block" device="disk">
<source dev="/dev/zde"/>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-unattended-remote-cdrom.xml
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-unattended-remote-cdrom.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-unattended-remote-cdrom.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-unattended-remote-cdrom.xml
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-unattended-remote-cdrom.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-unattended-remote-cdrom.xml
@@ -27,6 +27,7 @@
<source file="/pool-dir/testvol1.img"/>
<target dev="hda" bus="ide"/>
<readonly/>
<boot order="1"/>
+ <driver cache="unsafe"/>
</disk>
<controller type="usb" model="ich9-ehci1"/>
<controller type="usb" model="ich9-uhci1">
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-win7-uefi.xml
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-win7-uefi.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-win7-uefi.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-win7-uefi.xml
@@ -49,7 +49,7 @@
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-win7-uefi.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-win7-uefi.xml
@@ -47,7 +47,7 @@
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type="file" device="disk">
@@ -492,11 +492,11 @@ Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-win7-uefi.xml
+ <driver name="qemu" type="qcow2" cache="unsafe"/>
<source file="/pool-dir/testvol1.img"/>
<target dev="sda" bus="sata"/>
</disk>
Index: virt-manager-4.2.0/tests/data/cli/compare/virt-install-xen-pv.xml
<boot order="2"/>
Index: virt-manager-5.1.0/tests/data/cli/compare/virt-install-xen-pv.xml
===================================================================
--- virt-manager-4.2.0.orig/tests/data/cli/compare/virt-install-xen-pv.xml
+++ virt-manager-4.2.0/tests/data/cli/compare/virt-install-xen-pv.xml
--- virt-manager-5.1.0.orig/tests/data/cli/compare/virt-install-xen-pv.xml
+++ virt-manager-5.1.0/tests/data/cli/compare/virt-install-xen-pv.xml
@@ -16,7 +16,7 @@
</os>
<devices>

View File

@@ -1,11 +1,11 @@
References: bsc#1172356, bsc#1177620
Libvirt doesn't accept "Hypervisor default" as a model name
Index: virt-manager-5.0.0/virtinst/devices/interface.py
Index: virt-manager-5.1.0/virtinst/devices/interface.py
===================================================================
--- 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):
--- virt-manager-5.1.0.orig/virtinst/devices/interface.py
+++ virt-manager-5.1.0/virtinst/devices/interface.py
@@ -372,6 +372,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-5.0.0/virtinst/guest.py
Index: virt-manager-5.1.0/virtinst/guest.py
===================================================================
--- virt-manager-5.0.0.orig/virtinst/guest.py
+++ virt-manager-5.0.0/virtinst/guest.py
@@ -995,6 +995,10 @@ class Guest(XMLBuilder):
--- virt-manager-5.1.0.orig/virtinst/guest.py
+++ virt-manager-5.1.0/virtinst/guest.py
@@ -1033,6 +1033,10 @@ class Guest(XMLBuilder):
self._add_default_tpm()
self.clock.set_defaults(self)

View File

@@ -1,13 +1,13 @@
References: bsc#1180069
Index: virt-manager-5.0.0/virtinst/guest.py
Index: virt-manager-5.1.0/virtinst/guest.py
===================================================================
--- 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)
--- virt-manager-5.1.0.orig/virtinst/guest.py
+++ virt-manager-5.1.0/virtinst/guest.py
@@ -785,6 +785,8 @@ class Guest(XMLBuilder):
if wants_default_type and self.conn.is_qemu() and self.os.is_x86() and self.type != "kvm":
log.warning("KVM acceleration not available, using '%s'", self.type) # pragma: no cover
+ if self.os.is_xenpv() and self.os.smbios_mode is not None:
+ raise RuntimeError(_("The --sysinfo flag (smbios) is not supported for Xen PV guests."))

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-5.0.0/virtinst/devices/disk.py
Index: virt-manager-5.1.0/virtinst/devices/disk.py
===================================================================
--- 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):
--- virt-manager-5.1.0.orig/virtinst/devices/disk.py
+++ virt-manager-5.1.0/virtinst/devices/disk.py
@@ -590,7 +590,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

@@ -4,25 +4,25 @@ a non pae version. The sles10 sp4 32bit kernel will only boot para-
virtualized if the pae kernel is selected.
Note that sles12 and newer has no 32bit release.
Index: virt-manager-3.3.0/virtinst/install/urldetect.py
Index: virt-manager-5.1.0/virtinst/install/urldetect.py
===================================================================
--- virt-manager-3.3.0.orig/virtinst/install/urldetect.py
+++ virt-manager-3.3.0/virtinst/install/urldetect.py
@@ -550,9 +550,14 @@ class _SuseDistro(_RHELDistro):
--- virt-manager-5.1.0.orig/virtinst/install/urldetect.py
+++ virt-manager-5.1.0/virtinst/install/urldetect.py
@@ -552,9 +552,14 @@ class _SuseDistro(_RHELDistro):
if self.type == "xen":
# Matches Opensuse > 10.2 and sles 10
- self._kernel_paths.append(
- ("boot/%s/vmlinuz-xen" % tree_arch,
- "boot/%s/initrd-xen" % tree_arch))
- ("boot/%s/vmlinuz-xen" % tree_arch, "boot/%s/initrd-xen" % tree_arch)
- )
+ if tree_arch == "i386":
+ self._kernel_paths.append(
+ ("boot/%s/vmlinuz-xenpae" % tree_arch,
+ "boot/%s/initrd-xenpae" % tree_arch))
+ ("boot/%s/vmlinuz-xenpae" % tree_arch, "boot/%s/initrd-xenpae" % tree_arch)
+ )
+ else:
+ self._kernel_paths.append(
+ ("boot/%s/vmlinuz-xen" % tree_arch,
+ "boot/%s/initrd-xen" % tree_arch))
+ ("boot/%s/vmlinuz-xen" % tree_arch, "boot/%s/initrd-xen" % tree_arch)
+ )
if str(self._os_variant).startswith(("sles11", "sled11")):
if tree_arch == "s390x":

View File

@@ -4,27 +4,28 @@ issue on btrfs.
Signed-off-by: Chunyan Liu <cyliu@suse.com>
Index: virt-manager-4.2.0/virtinst/storage.py
Index: virt-manager-5.1.0/virtinst/storage.py
===================================================================
--- virt-manager-4.2.0.orig/virtinst/storage.py
+++ virt-manager-4.2.0/virtinst/storage.py
@@ -572,6 +572,11 @@ class StorageVolume(_StorageObject):
return self._pool_xml.get_disk_type()
--- virt-manager-5.1.0.orig/virtinst/storage.py
+++ virt-manager-5.1.0/virtinst/storage.py
@@ -584,6 +584,12 @@ class StorageVolume(_StorageObject):
file_type = property(_get_vol_type)
+ def _nocow_default_cb(self):
+ return self.conn.check_support(
+ self.conn.conn_nocow)
+ return self.conn.check_support(self.conn.conn_nocow)
+
+ nocow = XMLProperty("./target/nocow", is_bool=True)
+
+
##################
# XML properties #
Index: virt-manager-4.2.0/virtinst/support.py
##################
Index: virt-manager-5.1.0/virtinst/support.py
===================================================================
--- virt-manager-4.2.0.orig/virtinst/support.py
+++ virt-manager-4.2.0/virtinst/support.py
@@ -267,6 +267,7 @@ class SupportCache:
--- virt-manager-5.1.0.orig/virtinst/support.py
+++ virt-manager-5.1.0/virtinst/support.py
@@ -270,6 +270,7 @@ class SupportCache:
conn_vnc_none_auth = _make(hv_version={"qemu": "2.9.0"})
conn_device_boot_order = _make(hv_version={"qemu": 0, "test": 0})
conn_riscv_virt_pci_default = _make(version="5.3.0", hv_version={"qemu": "4.0.0"})

View File

@@ -1,20 +1,22 @@
References: bsc#1194323
Windows server 2k16, 2k19, and 2k22 have the volumen ID
Windows server 2k16, 2k19, 2k22, and 2k25 have the volume ID
so libosinfo can't really tell them apart.
This hack after detecting a windows ISO just looks at the
ISO filename for an extra clue.
Index: virt-manager-4.2.0/virtinst/install/installer.py
Index: virt-manager-5.1.0/virtinst/install/installer.py
===================================================================
--- virt-manager-4.2.0.orig/virtinst/install/installer.py
+++ virt-manager-4.2.0/virtinst/install/installer.py
@@ -545,6 +545,14 @@ class Installer(object):
--- virt-manager-5.1.0.orig/virtinst/install/installer.py
+++ virt-manager-5.1.0/virtinst/install/installer.py
@@ -546,6 +546,16 @@ class Installer:
osguess = OSDB.guess_os_by_iso(self.cdrom)
if osguess:
ret = osguess[0]
+ # Hack because windows ISOs contain same volume ID
+ if ret and ret.startswith("win"):
+ if "windows_server_2022" in self.cdrom:
+ if "windows_server_2025" in self.cdrom:
+ ret = "win2k25"
+ elif "windows_server_2022" in self.cdrom:
+ ret = "win2k22"
+ elif "windows_server_2019" in self.cdrom:
+ ret = "win2k19"

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-5.0.0/virtinst/devices/disk.py
Index: virt-manager-5.1.0/virtinst/devices/disk.py
===================================================================
--- 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):
--- virt-manager-5.1.0.orig/virtinst/devices/disk.py
+++ virt-manager-5.1.0/virtinst/devices/disk.py
@@ -607,6 +607,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-5.0.0/virtinst/devices/disk.py
Index: virt-manager-5.1.0/virtinst/devices/disk.py
===================================================================
--- 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):
--- virt-manager-5.1.0.orig/virtinst/devices/disk.py
+++ virt-manager-5.1.0/virtinst/devices/disk.py
@@ -977,6 +977,17 @@ class DeviceDisk(Device):
:returns: generated target
"""
prefix, maxnode = self.get_target_prefix()
@@ -28,17 +28,17 @@ Index: virt-manager-5.0.0/virtinst/devices/disk.py
skip_targets = [t for t in skip_targets if t and t.startswith(prefix)]
skip_targets.sort()
@@ -949,11 +960,18 @@ class DeviceDisk(Device):
first_found = None
for i in range(maxnode):
- gen_t = prefix + self.num_to_target(i + 1)
+ postfix = self.num_to_target(i + 1)
+ gen_t = prefix + postfix
+ if self.conn.is_xen() and postfix in postfix_targets:
+ if gen_t in skip_targets:
+ skip_targets.remove(gen_t)
+ continue
@@ -990,11 +1001,18 @@ class DeviceDisk(Device):
if self.bus == "nvme":
gen_t = f"{prefix}{nvmen}n{i + 1}"
else:
- gen_t = prefix + self.num_to_target(i + 1)
+ postfix = self.num_to_target(i + 1)
+ gen_t = prefix + postfix
+ if self.conn.is_xen() and postfix in postfix_targets:
+ if gen_t in skip_targets:
+ skip_targets.remove(gen_t)
+ continue
if gen_t in skip_targets:
skip_targets.remove(gen_t)
continue

View File

@@ -0,0 +1,294 @@
References: bsc#1196806, bsc#1252105, jsc#SLE-18834
Add a button on the Customize dialog for launch security.
Support AMD SEV, SEV-ES, and SEV-SNP
Support Intel TDX
Index: virt-manager-5.1.0/ui/details.ui
===================================================================
--- virt-manager-5.1.0.orig/ui/details.ui
+++ virt-manager-5.1.0/ui/details.ui
@@ -2908,7 +2908,20 @@
<placeholder/>
</child>
<child>
- <placeholder/>
+ <object class="GtkCheckButton" id="launch-security">
+ <property name="label" translatable="yes">Enable launch security</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="halign">start</property>
+ <property name="use-underline">True</property>
+ <property name="draw-indicator">True</property>
+ <signal name="toggled" handler="on_mem_launch_security_toggled" swapped="no"/>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">4</property>
+ </packing>
</child>
</object>
<packing>
Index: virt-manager-5.1.0/virtManager/details/details.py
===================================================================
--- virt-manager-5.1.0.orig/virtManager/details/details.py
+++ virt-manager-5.1.0/virtManager/details/details.py
@@ -46,6 +46,7 @@ from ..delete import vmmDeleteStorage
EDIT_TOPOLOGY,
EDIT_MEM,
EDIT_MEM_SHARED,
+ EDIT_MEM_LS,
EDIT_AUTOSTART,
EDIT_BOOTORDER,
EDIT_BOOTMENU,
@@ -72,7 +73,7 @@ from ..delete import vmmDeleteStorage
EDIT_FS,
EDIT_HOSTDEV_ROMBAR,
EDIT_HOSTDEV_USB_STARTUPPOLICY,
-) = range(1, 39)
+) = range(1, 40)
# Columns in hw list model
@@ -416,6 +417,7 @@ class vmmDetails(vmmGObjectUI):
"on_mem_maxmem_changed": _e(EDIT_MEM),
"on_mem_memory_changed": self._curmem_changed_cb,
"on_mem_shared_access_toggled": _e(EDIT_MEM_SHARED),
+ "on_mem_launch_security_toggled": _e(EDIT_MEM_LS),
"on_boot_list_changed": self._boot_list_changed_cb,
"on_boot_moveup_clicked": self._boot_moveup_clicked_cb,
"on_boot_movedown_clicked": self._boot_movedown_clicked_cb,
@@ -1484,6 +1486,9 @@ class vmmDetails(vmmGObjectUI):
if self._edited(EDIT_MEM_SHARED):
kwargs["mem_shared"] = self.widget("shared-memory").get_active()
+ if self._edited(EDIT_MEM_LS):
+ kwargs["lsmem"] = self.widget("launch-security").get_active()
+
return self._change_config(self.vm.define_memory, kwargs, hotplug_args=hotplug_args)
def _apply_boot_options(self):
@@ -1973,6 +1978,14 @@ class vmmDetails(vmmGObjectUI):
curmem.set_value(int(round(vm_cur_mem)))
maxmem.set_value(int(round(vm_max_mem)))
+ domcaps = self.vm.get_domain_capabilities()
+ show_ls = domcaps.supports_launch_security()
+ self.widget("launch-security").set_sensitive(show_ls and self.is_customize_dialog)
+ if self.vm.get_launch_security_type():
+ self.widget("launch-security").set_active(True)
+ else:
+ self.widget("launch-security").set_active(False)
+
shared_mem, shared_mem_err = self.vm.has_shared_mem()
self.widget("shared-memory").set_active(shared_mem)
self.widget("shared-memory").set_sensitive(not bool(shared_mem_err))
Index: virt-manager-5.1.0/virtManager/object/domain.py
===================================================================
--- virt-manager-5.1.0.orig/virtManager/object/domain.py
+++ virt-manager-5.1.0/virtManager/object/domain.py
@@ -680,7 +680,7 @@ class vmmDomain(vmmLibvirtObject):
if access_mode != _SENTINEL:
guest.memoryBacking.access_mode = access_mode
- def define_memory(self, memory=_SENTINEL, maxmem=_SENTINEL, mem_shared=_SENTINEL):
+ def define_memory(self, memory=_SENTINEL, maxmem=_SENTINEL, mem_shared=_SENTINEL, lsmem=_SENTINEL):
guest = self._make_xmlobj_to_define()
if memory != _SENTINEL:
@@ -689,6 +689,18 @@ class vmmDomain(vmmLibvirtObject):
guest.memory = int(maxmem)
if mem_shared != _SENTINEL:
self._edit_shared_mem(guest, mem_shared)
+ if lsmem != _SENTINEL:
+ if lsmem is True:
+ domcaps = self.get_domain_capabilities()
+ if domcaps.supports_sev_launch_security():
+ guest.launchSecurity.type = "sev"
+ guest.launchSecurity.set_defaults(guest)
+ elif domcaps.supports_tdx_launch_security():
+ guest.launchSecurity.type = "tdx"
+ guest.launchSecurity.set_defaults(guest)
+ else:
+ guest.launchSecurity.type = None
+ guest.launchSecurity.policy = None
self._redefine_xmlobj(guest)
@@ -1370,6 +1382,9 @@ class vmmDomain(vmmLibvirtObject):
def get_description(self):
return self.get_xmlobj().description
+ def get_launch_security_type(self):
+ return self.get_xmlobj().launchSecurity.type
+
def get_boot_order(self):
return self.xmlobj.get_boot_order()
Index: virt-manager-5.1.0/virtinst/domcapabilities.py
===================================================================
--- virt-manager-5.1.0.orig/virtinst/domcapabilities.py
+++ virt-manager-5.1.0/virtinst/domcapabilities.py
@@ -89,16 +89,24 @@ def _make_capsblock(xml_root_name):
return TmpClass
-################################
-# SEV launch security handling #
-################################
+###################
+# Launch security #
+###################
+class _LAUNCHSECURITY(XMLBuilder):
+ XML_NAME = "launchSecurity"
+ supported = XMLProperty("./@supported", is_yesno=True)
+ sectype = XMLProperty("./@sectype")
+
class _SEV(XMLBuilder):
XML_NAME = "sev"
supported = XMLProperty("./@supported", is_yesno=True)
maxESGuests = XMLProperty("./maxESGuests")
+class _TDX(XMLBuilder):
+ XML_NAME = "tdx"
+ supported = XMLProperty("./@supported", is_yesno=True)
#############################
# Misc toplevel XML classes #
@@ -127,6 +135,8 @@ class _Features(_CapsBlock):
XML_NAME = "features"
gic = XMLChildProperty(_make_capsblock("gic"), is_single=True)
sev = XMLChildProperty(_SEV, is_single=True)
+ tdx = XMLChildProperty(_TDX, is_single=True)
+ launchSecurity = XMLChildProperty(_LAUNCHSECURITY, is_single=True)
hyperv = XMLChildProperty(_make_capsblock("hyperv"), is_single=True)
@@ -413,19 +423,57 @@ class DomainCapabilities(XMLBuilder):
self._features = _lookup_cpu_security_features(self) or []
return self._features
- ########################
- # Misc support methods #
- ########################
+ ###########################
+ # Launch Security Methods #
+ ###########################
- def supports_sev_launch_security(self, check_es=False):
+ def supports_sev_launch_security(self):
"""
Returns False if either libvirt doesn't advertise support for SEV at
all (< libvirt-4.5.0) or if it explicitly advertises it as unsupported
on the platform
"""
- if check_es:
- return bool(self.features.sev.supported and self.features.sev.maxESGuests)
- return bool(self.features.sev.supported)
+ if bool(self.features.sev.supported):
+ return True
+ return False
+
+ def supports_tdx_launch_security(self):
+ """
+ Returns False if either libvirt doesn't advertise support for TDX at
+ all (< libvirt-11.5.0) or if it explicitly advertises it as unsupported
+ on the platform
+ """
+ if bool(self.features.tdx.supported):
+ return True
+ return False
+
+ def supports_launch_security(self):
+ """
+ Return True if host supports any kind of launch security.
+ """
+ if self.supports_sev_launch_security() or self.supports_tdx_launch_security():
+ return True
+ return False
+
+ def get_launch_security_type(self):
+ """
+ Return the type of launch security. This is ether AMD's sev-snp,
+ sev-es, or sev. For Intel return tdx. Otherwise return None.
+ """
+ if bool(self.features.sev.supported):
+ if bool(self.features.launchSecurity.supported):
+ if "sev-snp" in self.features.launchSecurity.get_xml():
+ return "sev-snp"
+ if bool(self.features.sev.maxESGuests):
+ return "sev-es"
+ return "sev"
+ elif bool(self.features.tdx.supported):
+ return "tdx"
+ return None
+
+ ########################
+ # Misc support methods #
+ ########################
def supports_video_bochs(self):
"""
Index: virt-manager-5.1.0/virtinst/domain/launch_security.py
===================================================================
--- virt-manager-5.1.0.orig/virtinst/domain/launch_security.py
+++ virt-manager-5.1.0/virtinst/domain/launch_security.py
@@ -1,3 +1,4 @@
+from ..logger import log
from ..xmlbuilder import XMLBuilder, XMLProperty
@@ -29,31 +30,38 @@ class DomainLaunchSecurity(XMLBuilder):
quoteGenerationSocket = XMLProperty("./quoteGenerationService/@path")
def _set_defaults_sev(self, guest):
- if not guest.os.is_q35() or not guest.is_uefi():
- raise RuntimeError(_("SEV launch security requires a Q35 UEFI machine"))
+ if not guest.os.is_q35():
+ if self.type == "sev-snp":
+ raise RuntimeError(_("SEV-SNP launch security requires a Q35 UEFI machine"))
+ raise RuntimeError(_("SEV launch security requires a Q35 machine"))
+ # Libvirt will select the appropriate firmware file if not specified
+ # as long as we enable efi.
+ if not guest.is_uefi():
+ guest.os.firmware = 'efi'
# The 'policy' is a mandatory 4-byte argument for the SEV firmware.
# If missing, we use 0x03 for the original SEV implementation and
- # 0x07 for SEV-ES.
+ # 0x07 for SEV-ES. 0x00030000 for SEV-SNP.
# Reference: https://libvirt.org/formatdomain.html#launch-security
if self.policy is None:
domcaps = guest.lookup_domcaps()
+ sev_type = domcaps.get_launch_security_type()
self.policy = "0x03"
- if domcaps.supports_sev_launch_security(check_es=True):
- self.policy = "0x07"
-
- def _set_defaults_sev_snp(self, guest):
- if not guest.os.is_q35() or not guest.is_uefi():
- raise RuntimeError(_("SEV-SNP launch security requires a Q35 UEFI machine"))
+ if sev_type is not None:
+ if sev_type == "sev-snp":
+ self.type = "sev-snp"
+ self.policy = "0x00030000"
+ elif sev_type == "sev-es":
+ self.policy = "0x07"
def _set_defaults_tdx(self, guest):
- if not guest.os.is_q35() or not guest.is_uefi():
+ if not guest.os.is_q35():
raise RuntimeError(_("TDX launch security requires a Q35 UEFI machine"))
+ if not guest.is_uefi():
+ guest.os.firmware = 'efi'
def set_defaults(self, guest):
- if self.type == "sev":
+ if self.type == "sev" or self.type == "sev-snp":
return self._set_defaults_sev(guest)
- elif self.type == "sev-snp":
- return self._set_defaults_sev_snp(guest)
elif self.type == "tdx":
return self._set_defaults_tdx(guest)

View File

@@ -1,216 +0,0 @@
References: bsc#1196806, jsc#SLE-18834
Index: virt-manager-5.0.0/ui/details.ui
===================================================================
--- virt-manager-5.0.0.orig/ui/details.ui
+++ virt-manager-5.0.0/ui/details.ui
@@ -1927,7 +1927,20 @@
</packing>
</child>
<child>
- <placeholder/>
+ <object class="GtkCheckButton" id="launch-security">
+ <property name="label" translatable="yes">Enable launch security</property>
+ <property name="visible">True</property>
+ <property name="can-focus">True</property>
+ <property name="receives-default">False</property>
+ <property name="halign">start</property>
+ <property name="use-underline">True</property>
+ <property name="draw-indicator">True</property>
+ <signal name="toggled" handler="on_mem_launch_security_toggled" swapped="no"/>
+ </object>
+ <packing>
+ <property name="left-attach">1</property>
+ <property name="top-attach">4</property>
+ </packing>
</child>
</object>
<packing>
Index: virt-manager-5.0.0/virtManager/details/details.py
===================================================================
--- virt-manager-5.0.0.orig/virtManager/details/details.py
+++ virt-manager-5.0.0/virtManager/details/details.py
@@ -49,6 +49,7 @@ from ..delete import vmmDeleteStorage
EDIT_MEM,
EDIT_MEM_SHARED,
+ EDIT_MEM_SEV,
EDIT_AUTOSTART,
EDIT_BOOTORDER,
@@ -86,7 +87,7 @@ from ..delete import vmmDeleteStorage
EDIT_FS,
- EDIT_HOSTDEV_ROMBAR) = range(1, 38)
+ EDIT_HOSTDEV_ROMBAR) = range(1, 39)
# Columns in hw list model
@@ -422,6 +423,7 @@ class vmmDetails(vmmGObjectUI):
"on_mem_maxmem_changed": _e(EDIT_MEM),
"on_mem_memory_changed": self._curmem_changed_cb,
"on_mem_shared_access_toggled": _e(EDIT_MEM_SHARED),
+ "on_mem_launch_security_toggled": _e(EDIT_MEM_SEV),
"on_boot_list_changed": self._boot_list_changed_cb,
"on_boot_moveup_clicked": self._boot_moveup_clicked_cb,
@@ -1500,6 +1502,9 @@ class vmmDetails(vmmGObjectUI):
if self._edited(EDIT_MEM_SHARED):
kwargs["mem_shared"] = self.widget("shared-memory").get_active()
+ if self._edited(EDIT_MEM_SEV):
+ kwargs["sevmem"] = self.widget("launch-security").get_active()
+
return self._change_config(
self.vm.define_memory, kwargs,
hotplug_args=hotplug_args)
@@ -2007,6 +2012,14 @@ class vmmDetails(vmmGObjectUI):
curmem.set_value(int(round(vm_cur_mem)))
maxmem.set_value(int(round(vm_max_mem)))
+ domcaps = self.vm.get_domain_capabilities()
+ show_sev = domcaps.supports_sev_launch_security()
+ self.widget("launch-security").set_sensitive(show_sev and self.is_customize_dialog)
+ if self.vm.get_launch_security_type():
+ self.widget("launch-security").set_active(True)
+ else:
+ self.widget("launch-security").set_active(False)
+
shared_mem, shared_mem_err = self.vm.has_shared_mem()
self.widget("shared-memory").set_active(shared_mem)
self.widget("shared-memory").set_sensitive(not bool(shared_mem_err))
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
@@ -675,15 +675,33 @@ class vmmDomain(vmmLibvirtObject):
guest.memoryBacking.access_mode = access_mode
def define_memory(self, memory=_SENTINEL, maxmem=_SENTINEL,
- mem_shared=_SENTINEL):
+ mem_shared=_SENTINEL, sevmem=_SENTINEL):
guest = self._make_xmlobj_to_define()
+ def _set_rombar(guest, value):
+ # Ideally turning rombar off would be done automatically
+ # by either libvirt or qemu when SEV is detected.
+ for nic in guest.devices.interface:
+ nic.set_rom_bar(value)
+
if memory != _SENTINEL:
guest.currentMemory = int(memory)
if maxmem != _SENTINEL:
guest.memory = int(maxmem)
if mem_shared != _SENTINEL:
self._edit_shared_mem(guest, mem_shared)
+ if sevmem != _SENTINEL:
+ if sevmem is True:
+ domcaps = self.get_domain_capabilities()
+ guest.launchSecurity.type = "sev"
+ guest.launchSecurity.set_defaults(guest)
+ guest.memoryBacking.set_locked(True)
+ _set_rombar(guest, "off")
+ else:
+ guest.launchSecurity.type = None
+ guest.launchSecurity.policy = None
+ guest.memoryBacking.set_locked(False)
+ _set_rombar(guest, None)
self._redefine_xmlobj(guest)
@@ -1319,6 +1337,9 @@ class vmmDomain(vmmLibvirtObject):
def get_description(self):
return self.get_xmlobj().description
+ def get_launch_security_type(self):
+ return self.get_xmlobj().launchSecurity.type
+
def get_boot_order(self):
legacy = not self.can_use_device_boot_order()
return self.xmlobj.get_boot_order(legacy=legacy)
Index: virt-manager-5.0.0/virtinst/domain/memorybacking.py
===================================================================
--- virt-manager-5.0.0.orig/virtinst/domain/memorybacking.py
+++ virt-manager-5.0.0/virtinst/domain/memorybacking.py
@@ -27,6 +27,9 @@ class DomainMemoryBacking(XMLBuilder):
XML_NAME = "memoryBacking"
_XML_PROP_ORDER = ["hugepages", "nosharepages", "locked", "pages"]
+ def set_locked(self, value):
+ self.locked = value
+
hugepages = XMLProperty("./hugepages", is_bool=True)
nosharepages = XMLProperty("./nosharepages", is_bool=True)
locked = XMLProperty("./locked", is_bool=True)
Index: virt-manager-5.0.0/virtinst/domcapabilities.py
===================================================================
--- virt-manager-5.0.0.orig/virtinst/domcapabilities.py
+++ virt-manager-5.0.0/virtinst/domcapabilities.py
@@ -93,6 +93,9 @@ def _make_capsblock(xml_root_name):
class _SEV(XMLBuilder):
XML_NAME = "sev"
supported = XMLProperty("./@supported", is_yesno=True)
+ cbitpos = XMLProperty("./cbitpos")
+ reducedPhysBits = XMLProperty("./reducedPhysBits")
+ maxGuests = XMLProperty("./maxGuests")
maxESGuests = XMLProperty("./maxESGuests")
@@ -420,6 +423,9 @@ class DomainCapabilities(XMLBuilder):
self.features.sev.maxESGuests)
return bool(self.features.sev.supported)
+ def supports_sev_es_launch_security(self):
+ return bool(self.features.sev.supported and self.features.sev.maxESGuests)
+
def supports_video_bochs(self):
"""
Returns False if either libvirt or qemu do not have support to bochs
Index: virt-manager-5.0.0/virtinst/domain/launch_security.py
===================================================================
--- virt-manager-5.0.0.orig/virtinst/domain/launch_security.py
+++ virt-manager-5.0.0/virtinst/domain/launch_security.py
@@ -25,8 +25,12 @@ class DomainLaunchSecurity(XMLBuilder):
vcek = XMLProperty("./@vcek", is_yesno=True)
def _set_defaults_sev(self, guest):
- if not guest.os.is_q35() or not guest.is_uefi():
- raise RuntimeError(_("SEV launch security requires a Q35 UEFI machine"))
+ if not guest.os.is_q35():
+ raise RuntimeError(_("SEV launch security requires a Q35 machine"))
+ # Libvirt will select the appropriate firmware file if not specified
+ # as long as we enable efi.
+ if not guest.is_uefi():
+ guest.os.firmware = 'efi'
# The 'policy' is a mandatory 4-byte argument for the SEV firmware.
# If missing, we use 0x03 for the original SEV implementation and
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
@@ -311,6 +311,9 @@ class DeviceInterface(Device):
portForward = XMLChildProperty(_PortForward)
+ def set_rom_bar(self, value):
+ self.rom_bar = value
+
#############
# Build API #
Index: virt-manager-5.0.0/virtManager/addhardware.py
===================================================================
--- virt-manager-5.0.0.orig/virtManager/addhardware.py
+++ virt-manager-5.0.0/virtManager/addhardware.py
@@ -1434,6 +1434,9 @@ class vmmAddHardware(vmmGObjectUI):
mac = self.widget("create-mac-address").get_text()
dev = self._netlist.build_device(mac, model)
+ if self.vm.get_launch_security_type() == "sev":
+ dev.set_rom_bar("off")
+
return dev
def _build_input(self):

View File

@@ -2,10 +2,10 @@ References:
When a particular firmware is selected, read the json file for a description.
Add a tooltip of the json description when the mouse move overs the selected firmware.
Index: virt-manager-5.0.0/virtManager/details/details.py
Index: virt-manager-5.1.0/virtManager/details/details.py
===================================================================
--- virt-manager-5.0.0.orig/virtManager/details/details.py
+++ virt-manager-5.0.0/virtManager/details/details.py
--- virt-manager-5.1.0.orig/virtManager/details/details.py
+++ virt-manager-5.1.0/virtManager/details/details.py
@@ -4,6 +4,10 @@
# This work is licensed under the GNU GPLv2 or later.
# See the COPYING file in the top-level directory.
@@ -17,16 +17,16 @@ Index: virt-manager-5.0.0/virtManager/details/details.py
from gi.repository import Gtk
import libvirt
@@ -402,7 +406,7 @@ class vmmDetails(vmmGObjectUI):
"on_overview_name_changed": _e(EDIT_NAME),
"on_overview_title_changed": _e(EDIT_TITLE),
"on_machine_type_changed": _e(EDIT_MACHTYPE),
- "on_overview_firmware_changed": _e(EDIT_FIRMWARE),
+ "on_overview_firmware_changed": self._uefi_combobox_changed_cb,
"on_overview_chipset_changed": _e(EDIT_MACHTYPE),
"on_details_inspection_refresh_clicked": self._inspection_refresh_clicked_cb,
@@ -1100,6 +1104,52 @@ class vmmDetails(vmmGObjectUI):
@@ -398,7 +402,7 @@ class vmmDetails(vmmGObjectUI):
"on_overview_name_changed": _e(EDIT_NAME),
"on_overview_title_changed": _e(EDIT_TITLE),
"on_machine_type_changed": _e(EDIT_MACHTYPE),
- "on_overview_firmware_changed": _e(EDIT_FIRMWARE),
+ "on_overview_firmware_changed": self._uefi_combobox_changed_cb,
"on_overview_chipset_changed": _e(EDIT_MACHTYPE),
"on_details_inspection_refresh_clicked": self._inspection_refresh_clicked_cb,
"on_cpu_vcpus_changed": self._config_vcpus_changed_cb,
@@ -1076,6 +1080,52 @@ class vmmDetails(vmmGObjectUI):
self.storage_browser.set_browse_reason(reason)
self.storage_browser.show(self.topwin)
@@ -78,4 +78,4 @@ Index: virt-manager-5.0.0/virtManager/details/details.py
+
def _inspection_refresh_clicked_cb(self, src):
from ..lib.inspection import vmmInspection
inspection = vmmInspection.get_instance()

View File

@@ -1,19 +1,18 @@
References: bsc#919692
Because openSUSE repos combine 32 and 64 bit sources we need to
continue showing the 'Architecture' pop-up.
Index: virt-manager-4.2.0/virtManager/createvm.py
Index: virt-manager-5.1.0/virtManager/createvm.py
===================================================================
--- virt-manager-4.2.0.orig/virtManager/createvm.py
+++ virt-manager-4.2.0/virtManager/createvm.py
@@ -866,11 +866,6 @@ class vmmCreateVM(vmmGObjectUI):
--- virt-manager-5.1.0.orig/virtManager/createvm.py
+++ virt-manager-5.1.0/virtManager/createvm.py
@@ -836,10 +836,6 @@ class vmmCreateVM(vmmGObjectUI):
for guest in self.conn.caps.guests:
if guest.os_type == self._capsinfo.os_type:
archs.append(guest.arch)
-
- # Combine x86/i686 to avoid confusion
- if (self.conn.caps.host.cpu.arch == "x86_64" and
- "x86_64" in archs and "i686" in archs):
- if self.conn.caps.host.cpu.arch == "x86_64" and "x86_64" in archs and "i686" in archs:
- archs.remove("i686")
archs.sort()
prios = ["x86_64", "i686", "aarch64", "armv7l", "ppc64", "ppc64le",
prios = ["x86_64", "i686", "aarch64", "armv7l", "ppc64", "ppc64le", "riscv64", "s390x"]

View File

@@ -6,11 +6,11 @@ Steps to get a KVM VM in the crashed state:
4) Edit the VM's /etc/default/grub file and remove the crashkernel information
and then run grub2-mkconfig /boot/grub2/grub.cfg.
5) Start the VM and within the VM's terminal type "echo 'c' > /proc/sysrq-trigger"
Index: virt-manager-3.3.0/virtManager/manager.py
Index: virt-manager-5.1.0/virtManager/manager.py
===================================================================
--- virt-manager-3.3.0.orig/virtManager/manager.py
+++ virt-manager-3.3.0/virtManager/manager.py
@@ -776,7 +776,7 @@ class vmmManager(vmmGObjectUI):
--- virt-manager-5.1.0.orig/virtManager/manager.py
+++ virt-manager-5.1.0/virtManager/manager.py
@@ -770,7 +770,7 @@ class vmmManager(vmmGObjectUI):
show_pause = bool(vm and vm.is_unpauseable())
else:
show_pause = bool(vm and vm.is_pauseable())
@@ -19,11 +19,11 @@ Index: virt-manager-3.3.0/virtManager/manager.py
if vm and vm.managedsave_supported:
self.change_run_text(vm.has_managed_save())
Index: virt-manager-3.3.0/virtManager/vmmenu.py
Index: virt-manager-5.1.0/virtManager/vmmenu.py
===================================================================
--- virt-manager-3.3.0.orig/virtManager/vmmenu.py
+++ virt-manager-3.3.0/virtManager/vmmenu.py
@@ -21,6 +21,7 @@ class _VMMenu(Gtk.Menu):
--- virt-manager-5.1.0.orig/virtManager/vmmenu.py
+++ virt-manager-5.1.0/virtManager/vmmenu.py
@@ -22,6 +22,7 @@ class _VMMenu(Gtk.Menu):
self._parent = src
self._current_vm_cb = current_vm_cb
self._show_open = show_open
@@ -31,7 +31,7 @@ Index: virt-manager-3.3.0/virtManager/vmmenu.py
self._init_state()
@@ -72,6 +73,7 @@ class VMShutdownMenu(_VMMenu):
@@ -77,6 +78,7 @@ class VMShutdownMenu(_VMMenu):
name = getattr(child, "vmm_widget_name", None)
if name in statemap:
child.set_sensitive(statemap[name])
@@ -39,7 +39,7 @@ Index: virt-manager-3.3.0/virtManager/vmmenu.py
class VMActionMenu(_VMMenu):
@@ -83,7 +85,8 @@ class VMActionMenu(_VMMenu):
@@ -89,7 +91,8 @@ class VMActionMenu(_VMMenu):
self._add_action(_("_Pause"), "suspend", VMActionUI.suspend)
self._add_action(_("R_esume"), "resume", VMActionUI.resume)
s = self._add_action(_("_Shut Down"), "shutdown", None)
@@ -49,7 +49,7 @@ Index: virt-manager-3.3.0/virtManager/vmmenu.py
self.add(Gtk.SeparatorMenuItem())
self._add_action(_("Clone..."), "clone", VMActionUI.clone)
@@ -100,7 +103,7 @@ class VMActionMenu(_VMMenu):
@@ -106,7 +109,7 @@ class VMActionMenu(_VMMenu):
def update_widget_states(self, vm):
statemap = {
"run": bool(vm and vm.is_runable()),
@@ -58,7 +58,7 @@ Index: virt-manager-3.3.0/virtManager/vmmenu.py
"suspend": bool(vm and vm.is_stoppable()),
"resume": bool(vm and vm.is_paused()),
"migrate": bool(vm and vm.is_stoppable()),
@@ -117,6 +120,8 @@ class VMActionMenu(_VMMenu):
@@ -123,6 +126,8 @@ class VMActionMenu(_VMMenu):
child.get_submenu().update_widget_states(vm)
if name in statemap:
child.set_sensitive(statemap[name])

View File

@@ -1,10 +1,11 @@
Index: virt-manager-4.1.0/data/virt-manager.desktop.in
Index: virt-manager-5.1.0/data/virt-manager.desktop.in
===================================================================
--- virt-manager-4.1.0.orig/data/virt-manager.desktop.in
+++ virt-manager-4.1.0/data/virt-manager.desktop.in
@@ -1,9 +1,20 @@
--- virt-manager-5.1.0.orig/data/virt-manager.desktop.in
+++ virt-manager-5.1.0/data/virt-manager.desktop.in
@@ -1,10 +1,21 @@
[Desktop Entry]
Name=Virtual Machine Manager
GenericName=Virtual machine viewer/manager
-Comment=Manage virtual machines
+Comment=Manage Virtual Machines for Xen and KVM
Icon=virt-manager
@@ -13,9 +14,9 @@ Index: virt-manager-4.1.0/data/virt-manager.desktop.in
+Exec=/usr/bin/virt-manager
Type=Application
Terminal=false
Keywords=vmm;
Categories=System;Emulator;GTK;
Keywords=virtualization;libvirt;vm;vmm;qemu;xen;lxc;kvm;
+Encoding=UTF-8
Categories=System;
+X-KDE-ModuleType=Library
+X-KDE-RootOnly=true
+X-KDE-HasReadOnlyMode=false

View File

@@ -4,11 +4,11 @@ in this patch anyways to correctly set up a bus if a floppy were
added.
Index: virt-manager-4.2.0/virtManager/addhardware.py
Index: virt-manager-5.1.0/virtManager/addhardware.py
===================================================================
--- virt-manager-4.2.0.orig/virtManager/addhardware.py
+++ virt-manager-4.2.0/virtManager/addhardware.py
@@ -489,6 +489,9 @@ class vmmAddHardware(vmmGObjectUI):
--- virt-manager-5.1.0.orig/virtManager/addhardware.py
+++ virt-manager-5.1.0/virtManager/addhardware.py
@@ -532,6 +532,9 @@ class vmmAddHardware(vmmGObjectUI):
buses = domcaps.devices.disk.get_enum("bus").get_values()
else:
buses = vmmAddHardware.disk_old_recommended_buses(guest)
@@ -17,8 +17,8 @@ Index: virt-manager-4.2.0/virtManager/addhardware.py
+ buses.append("fdc")
bus_map = {
"disk": ["ide", "sata", "scsi", "sd", "usb", "virtio", "xen"],
@@ -508,6 +511,7 @@ class vmmAddHardware(vmmGObjectUI):
"disk": ["ide", "nvme", "sata", "scsi", "sd", "usb", "virtio", "xen"],
@@ -552,6 +555,7 @@ class vmmAddHardware(vmmGObjectUI):
"usb": _("USB"),
"virtio": _("VirtIO"),
"xen": _("Xen"),
@@ -26,15 +26,13 @@ Index: virt-manager-4.2.0/virtManager/addhardware.py
}
return bus_mappings.get(bus, bus)
@@ -665,8 +669,9 @@ class vmmAddHardware(vmmGObjectUI):
"drive-harddisk", _("Disk device")])
target_model.append([DeviceDisk.DEVICE_CDROM,
"media-optical", _("CDROM device")])
- target_model.append([DeviceDisk.DEVICE_FLOPPY,
- "media-floppy", _("Floppy device")])
@@ -707,7 +711,8 @@ class vmmAddHardware(vmmGObjectUI):
target_list.add_attribute(text, "text", 2)
target_model.append([DeviceDisk.DEVICE_DISK, "drive-harddisk", _("Disk device")])
target_model.append([DeviceDisk.DEVICE_CDROM, "media-optical", _("CDROM device")])
- target_model.append([DeviceDisk.DEVICE_FLOPPY, "media-floppy", _("Floppy device")])
+ if not self.conn.is_xen():
+ target_model.append([DeviceDisk.DEVICE_FLOPPY,
+ "media-floppy", _("Floppy device")])
+ target_model.append([DeviceDisk.DEVICE_FLOPPY, "media-floppy", _("Floppy device")])
if self.conn.is_qemu() or self.conn.is_test():
target_model.append([DeviceDisk.DEVICE_LUN,
"drive-harddisk", _("LUN Passthrough")])
target_model.append([DeviceDisk.DEVICE_LUN, "drive-harddisk", _("LUN Passthrough")])
target_list.set_active(0)

View File

@@ -1,11 +1,11 @@
Reference: bnc#885094
grub.xen is required to boot Xen PV VMs using BTRFS. It belongs to
the grub2-x86_64-xen RPM and should never be deleted.
Index: virt-manager-3.3.0/virtManager/delete.py
Index: virt-manager-5.1.0/virtManager/delete.py
===================================================================
--- virt-manager-3.3.0.orig/virtManager/delete.py
+++ virt-manager-3.3.0/virtManager/delete.py
@@ -459,7 +459,7 @@ def _populate_storage_list(storage_list,
--- virt-manager-5.1.0.orig/virtManager/delete.py
+++ virt-manager-5.1.0/virtManager/delete.py
@@ -472,7 +472,7 @@ def _populate_storage_list(storage_list,
model.clear()
for diskdata in diskdatas:

Some files were not shown because too many files have changed in this diff Show More