From: Fiona Ebner <f.ebner@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH qemu-server v4 03/16] move kvm_user_version() function to helpers module
Date: Fri, 17 Jan 2025 15:24:17 +0100 [thread overview]
Message-ID: <20250117142430.99484-4-f.ebner@proxmox.com> (raw)
In-Reply-To: <20250117142430.99484-1-f.ebner@proxmox.com>
Add an export, since the function is rather commonly used (in
particular inlined in function calls, where prefixing with the module
name would hurt readability) and there won't be much potential for
confusion name-wise.
This was the only user of stat(), so remove the File::stat include.
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
---
PVE/API2/Qemu.pm | 2 +-
PVE/QemuServer.pm | 32 +-------------------------------
PVE/QemuServer/Helpers.pm | 30 ++++++++++++++++++++++++++++++
test/run_config2command_tests.pl | 3 ++-
4 files changed, 34 insertions(+), 33 deletions(-)
diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index 52425ee8..868508e7 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -854,7 +854,7 @@ sub assert_scsi_feature_compatibility {
my $machine_type = PVE::QemuServer::get_vm_machine($conf, undef, $conf->{arch});
my $machine_version = PVE::QemuServer::Machine::extract_version(
- $machine_type, PVE::QemuServer::kvm_user_version());
+ $machine_type, PVE::QemuServer::Helpers::kvm_user_version());
my $drivetype = PVE::QemuServer::Drive::get_scsi_device_type(
$drive, $storecfg, $machine_version);
diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index ce962b7a..fd1feada 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -10,7 +10,6 @@ use Fcntl;
use File::Basename;
use File::Copy qw(copy);
use File::Path;
-use File::stat;
use Getopt::Long;
use IO::Dir;
use IO::File;
@@ -51,7 +50,7 @@ use PVE::Tools qw(run_command file_read_firstline file_get_contents dir_glob_for
use PVE::QMPClient;
use PVE::QemuConfig;
-use PVE::QemuServer::Helpers qw(config_aware_timeout min_version windows_version);
+use PVE::QemuServer::Helpers qw(config_aware_timeout min_version kvm_user_version windows_version);
use PVE::QemuServer::Cloudinit;
use PVE::QemuServer::CGroup;
use PVE::QemuServer::CPUConfig qw(print_cpu_device get_cpu_options get_cpu_bitness is_native_arch get_amd_sev_object);
@@ -1193,35 +1192,6 @@ sub kvm_version {
return $kvm_api_version;
}
-my $kvm_user_version = {};
-my $kvm_mtime = {};
-
-sub kvm_user_version {
- my ($binary) = @_;
-
- $binary //= PVE::QemuServer::Helpers::get_command_for_arch(get_host_arch()); # get the native arch by default
- my $st = stat($binary);
-
- my $cachedmtime = $kvm_mtime->{$binary} // -1;
- return $kvm_user_version->{$binary} if $kvm_user_version->{$binary} &&
- $cachedmtime == $st->mtime;
-
- $kvm_user_version->{$binary} = 'unknown';
- $kvm_mtime->{$binary} = $st->mtime;
-
- my $code = sub {
- my $line = shift;
- if ($line =~ m/^QEMU( PC)? emulator version (\d+\.\d+(\.\d+)?)(\.\d+)?[,\s]/) {
- $kvm_user_version->{$binary} = $2;
- }
- };
-
- eval { run_command([$binary, '--version'], outfunc => $code); };
- warn $@ if $@;
-
- return $kvm_user_version->{$binary};
-
-}
my sub extract_version {
my ($machine_type, $version) = @_;
$version = kvm_user_version() if !defined($version);
diff --git a/PVE/QemuServer/Helpers.pm b/PVE/QemuServer/Helpers.pm
index 7b65ba44..07b2ff6e 100644
--- a/PVE/QemuServer/Helpers.pm
+++ b/PVE/QemuServer/Helpers.pm
@@ -14,6 +14,7 @@ use base 'Exporter';
our @EXPORT_OK = qw(
min_version
config_aware_timeout
+kvm_user_version
parse_number_sets
windows_version
);
@@ -33,6 +34,35 @@ sub get_command_for_arch($) {
return $cmd;
}
+my $kvm_user_version = {};
+my $kvm_mtime = {};
+
+sub kvm_user_version {
+ my ($binary) = @_;
+
+ $binary //= get_command_for_arch(get_host_arch()); # get the native arch by default
+ my $st = stat($binary);
+
+ my $cachedmtime = $kvm_mtime->{$binary} // -1;
+ return $kvm_user_version->{$binary} if $kvm_user_version->{$binary} &&
+ $cachedmtime == $st->mtime;
+
+ $kvm_user_version->{$binary} = 'unknown';
+ $kvm_mtime->{$binary} = $st->mtime;
+
+ my $code = sub {
+ my $line = shift;
+ if ($line =~ m/^QEMU( PC)? emulator version (\d+\.\d+(\.\d+)?)(\.\d+)?[,\s]/) {
+ $kvm_user_version->{$binary} = $2;
+ }
+ };
+
+ eval { PVE::Tools::run_command([$binary, '--version'], outfunc => $code); };
+ warn $@ if $@;
+
+ return $kvm_user_version->{$binary};
+}
+
# Paths and directories
our $var_run_tmpdir = "/var/run/qemu-server";
diff --git a/test/run_config2command_tests.pl b/test/run_config2command_tests.pl
index 5308b1fc..2feebd4a 100755
--- a/test/run_config2command_tests.pl
+++ b/test/run_config2command_tests.pl
@@ -15,6 +15,7 @@ use PVE::SysFSTools;
use PVE::QemuConfig;
use PVE::QemuServer;
+use PVE::QemuServer::Helpers;
use PVE::QemuServer::Monitor;
use PVE::QemuServer::QMPHelpers;
use PVE::QemuServer::CPUConfig;
@@ -72,7 +73,7 @@ my $base_env = {
}
},
vmid => 8006,
- real_qemu_version => PVE::QemuServer::kvm_user_version(), # not yet mocked
+ real_qemu_version => PVE::QemuServer::Helpers::kvm_user_version(), # not yet mocked
};
my $pci_devs = [
--
2.39.5
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
next prev parent reply other threads:[~2025-01-17 14:25 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-17 14:24 [pve-devel] [PATCH qemu-server/docs v4 00/16] adapt to changes in QEMU machine version deprecation/removal Fiona Ebner
2025-01-17 14:24 ` [pve-devel] [PATCH qemu-server v4 01/16] machine: drop unused parameter from assert_valid_machine_property() helper Fiona Ebner
2025-01-17 14:24 ` [pve-devel] [PATCH qemu-server v4 02/16] move get_command_for_arch() helper to helpers module Fiona Ebner
2025-01-17 14:24 ` Fiona Ebner [this message]
2025-01-17 14:24 ` [pve-devel] [PATCH qemu-server v4 04/16] move get_vm_arch() " Fiona Ebner
2025-01-17 14:24 ` [pve-devel] [PATCH qemu-server v4 05/16] machine: add default_machine_for_arch() helper Fiona Ebner
2025-01-17 14:24 ` [pve-devel] [PATCH qemu-server v4 06/16] move get_installed_machine_version() helper to machine module Fiona Ebner
2025-01-17 14:24 ` [pve-devel] [PATCH qemu-server v4 07/16] move windows_get_pinned_machine_version() function " Fiona Ebner
2025-01-17 14:24 ` [pve-devel] [PATCH qemu-server v4 08/16] move get_vm_machine() " Fiona Ebner
2025-01-17 14:24 ` [pve-devel] [PATCH qemu-server v4 09/16] move meta information handling to its own module Fiona Ebner
2025-01-17 14:24 ` [pve-devel] [PATCH qemu-server v4 10/16] machine: fallback to creation QEMU version for windows starting with 9.1 Fiona Ebner
2025-01-17 14:24 ` [pve-devel] [PATCH qemu-server v4 11/16] machine: add check_and_pin_machine_string() helper Fiona Ebner
2025-01-17 14:24 ` [pve-devel] [PATCH qemu-server v4 12/16] api: update vm config: pin machine version when switching to windows os type Fiona Ebner
2025-01-17 14:24 ` [pve-devel] [PATCH qemu-server v4 13/16] machine: log informational line when pinning machine version for Windows guest Fiona Ebner
2025-01-17 14:24 ` [pve-devel] [PATCH qemu-server v4 14/16] machine: rename machine_version() function to is_machine_version_at_least() Fiona Ebner
2025-01-17 14:24 ` [pve-devel] [PATCH qemu-server v4 15/16] machine: code cleanup: avoid superfluous augmented assignment operator Fiona Ebner
2025-01-17 14:24 ` [pve-devel] [PATCH docs v4 16/16] qm: machine version: document support in PVE Fiona Ebner
2025-01-17 18:55 ` [pve-devel] applied-series: [PATCH qemu-server/docs v4 00/16] adapt to changes in QEMU machine version deprecation/removal Thomas Lamprecht
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250117142430.99484-4-f.ebner@proxmox.com \
--to=f.ebner@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox