On 11/25/19 4:13 PM, Thomas Lamprecht wrote:
With our QEMU 4.1.1 package we can pass a additional internal version
to QEMU's machine, it will be split out there and ignored, but
returned on a QMP 'query-machines' call.
This allows us to use it for increasing the granularity with which we
can roll-out HW layout changes/additions for VMs. Until now we
required a machine version bump, happening normally every major
release of QEMU, with seldom, for us irrelevant, exceptions.
This often delays rolling out a feature, which would break
live-migration, by several months. That can now be avoided, the new
"pve-version" component of the machine can be bumped at will, and
thus we are much more flexible.
That versions orders after the ($major, $minor) version components
from an stable release - it can thus also be reset on the next
release.
The implementation extends the qemu-machine REGEX, remembers
"pve-version" when doing a "query-machines" and integrates support
into the min_version and extract_version helpers.
We start out with a version of 1.
Signed-off-by: Thomas Lamprecht <t.lampre...@proxmox.com>
---
changes v1 -> v2:
* drop an unrelated hunk mistakenly included from rebase
* set version also when config machine is set explicitly to 'pc' or 'q35'
* fix a missing '?' in the qemu-machine option pattern part for q35
* fix comment and some typos
PVE/QemuServer.pm | 17 ++++++++------
PVE/QemuServer/Helpers.pm | 6 ++---
PVE/QemuServer/Machine.pm | 27 +++++++++++++++++-----
test/cfg2cmd/i440fx-win10-hostpci.conf.cmd | 2 +-
test/cfg2cmd/minimal-defaults.conf.cmd | 2 +-
test/cfg2cmd/q35-linux-hostpci.conf.cmd | 2 +-
test/cfg2cmd/q35-win10-hostpci.conf.cmd | 2 +-
test/cfg2cmd/spice-linux-4.1.conf.cmd | 2 +-
8 files changed, 39 insertions(+), 21 deletions(-)
diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index 89254fb..55684b8 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -93,7 +93,7 @@
PVE::JSONSchema::register_standard_option('pve-qm-image-format', {
PVE::JSONSchema::register_standard_option('pve-qemu-machine', {
description => "Specifies the Qemu machine type.",
type => 'string',
- pattern =>
'(pc|pc(-i440fx)?-\d+(\.\d+)+(\.pxe)?|q35|pc-q35-\d+(\.\d+)+(\.pxe)?|virt(?:-\d+(\.\d+)+)?)',
+ pattern =>
'(pc|pc(-i440fx)?-\d+(\.\d+)+(\+pve\d+)?(\.pxe)?|q35|pc-q35-\d+(\.\d+)+(\+pve\d+)?(\.pxe)?|virt(?:-\d+(\.\d+)+)?(\+pve\d+)?)',
maxLength => 40,
optional => 1,
});
@@ -1875,7 +1875,7 @@ sub print_drivedevice_full {
}
# for compatibility only, we prefer scsi-hd (#2408, #2355, #2380)
- my $version =
PVE::QemuServer::Machine::extract_version($machine_type) // kvm_user_version();
+ my $version =
PVE::QemuServer::Machine::extract_version($machine_type, kvm_user_version());
if ($path =~ m/^iscsi\:\/\// &&
!min_version($version, 4, 1)) {
$devicetype = 'generic';
@@ -3361,13 +3361,14 @@ my $default_machines = {
};
sub get_vm_machine {
- my ($conf, $forcemachine, $arch) = @_;
+ my ($conf, $forcemachine, $arch, $add_pve_version) = @_;
my $machine = $forcemachine || $conf->{machine};
- if (!$machine) {
+ if (!$machine || $machine =~ m/^(?:pc|q35)$/) {
I think technically this would have to include 'virt' too - but that's
only used for aarch AFAICT?
Anyway,
Reviewed-by: Stefan Reiter <s.rei...@proxmox.com>
if you want :)
[...]
_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel