From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id B30901FF164 for ; Fri, 17 Jan 2025 15:25:37 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id A0C8D10840; Fri, 17 Jan 2025 15:25:09 +0100 (CET) From: Fiona Ebner To: pve-devel@lists.proxmox.com Date: Fri, 17 Jan 2025 15:24:17 +0100 Message-Id: <20250117142430.99484-4-f.ebner@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250117142430.99484-1-f.ebner@proxmox.com> References: <20250117142430.99484-1-f.ebner@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.051 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [helpers.pm, qemu.pm, qemuserver.pm] Subject: [pve-devel] [PATCH qemu-server v4 03/16] move kvm_user_version() function to helpers module X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" 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 --- 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