From: Fiona Ebner <f.ebner@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [PATCH qemu-server 11/11] agent: move guest agent format and parsing to agent module
Date: Mon, 5 May 2025 14:57:24 +0200 [thread overview]
Message-ID: <20250505125724.75620-12-f.ebner@proxmox.com> (raw)
In-Reply-To: <20250505125724.75620-1-f.ebner@proxmox.com>
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
---
PVE/API2/Qemu.pm | 4 +--
PVE/QemuConfig.pm | 4 +--
PVE/QemuMigrate.pm | 3 ++-
PVE/QemuServer.pm | 53 ++--------------------------------------
PVE/QemuServer/Agent.pm | 53 ++++++++++++++++++++++++++++++++++++++++
PVE/VZDump/QemuServer.pm | 3 ++-
6 files changed, 63 insertions(+), 57 deletions(-)
diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm
index 48a9b75a..0f22c94a 100644
--- a/PVE/API2/Qemu.pm
+++ b/PVE/API2/Qemu.pm
@@ -3095,7 +3095,7 @@ __PACKAGE__->register_method({
$status->{spice} = 1 if $spice;
$status->{clipboard} = $vga->{clipboard};
}
- $status->{agent} = 1 if PVE::QemuServer::get_qga_key($conf, 'enabled');
+ $status->{agent} = 1 if PVE::QemuServer::Agent::get_qga_key($conf, 'enabled');
return $status;
}});
@@ -4436,7 +4436,7 @@ __PACKAGE__->register_method({
PVE::QemuConfig->write_config($vmid, $conf);
- my $do_trim = PVE::QemuServer::get_qga_key($conf, 'fstrim_cloned_disks');
+ my $do_trim = PVE::QemuServer::Agent::get_qga_key($conf, 'fstrim_cloned_disks');
if ($running && $do_trim && PVE::QemuServer::Agent::qga_check_running($vmid)) {
eval { mon_cmd($vmid, "guest-fstrim") };
}
diff --git a/PVE/QemuConfig.pm b/PVE/QemuConfig.pm
index a88c12c5..34b55adc 100644
--- a/PVE/QemuConfig.pm
+++ b/PVE/QemuConfig.pm
@@ -8,7 +8,7 @@ use Scalar::Util qw(blessed);
use PVE::AbstractConfig;
use PVE::INotify;
use PVE::JSONSchema;
-use PVE::QemuServer::Agent qw(qga_check_running);
+use PVE::QemuServer::Agent qw(get_qga_key qga_check_running);
use PVE::QemuServer::CPUConfig;
use PVE::QemuServer::Drive;
use PVE::QemuServer::Helpers;
@@ -279,7 +279,7 @@ sub __snapshot_check_freeze_needed {
my $running = $class->__snapshot_check_running($vmid);
if (!$save_vmstate) {
- return ($running, $running && PVE::QemuServer::get_qga_key($config, 'enabled') && qga_check_running($vmid));
+ return ($running, $running && get_qga_key($config, 'enabled') && qga_check_running($vmid));
} else {
return ($running, 0);
}
diff --git a/PVE/QemuMigrate.pm b/PVE/QemuMigrate.pm
index 71c274b4..2d59959c 100644
--- a/PVE/QemuMigrate.pm
+++ b/PVE/QemuMigrate.pm
@@ -25,6 +25,7 @@ use PVE::Tools;
use PVE::Tunnel;
use PVE::QemuConfig;
+use PVE::QemuServer::Agent qw(get_qga_key);
use PVE::QemuServer::CPUConfig;
use PVE::QemuServer::Drive qw(checked_volume_format);
use PVE::QemuServer::Helpers qw(min_version);
@@ -1575,7 +1576,7 @@ sub phase3_cleanup {
if (
$self->{storage_migration}
- && PVE::QemuServer::get_qga_key($conf, 'fstrim_cloned_disks')
+ && PVE::QemuServer::Agent::get_qga_key($conf, 'fstrim_cloned_disks')
&& $self->{running}
) {
if (!$self->{vm_was_paused}) {
diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
index 9a81030e..a636d2ca 100644
--- a/PVE/QemuServer.pm
+++ b/PVE/QemuServer.pm
@@ -51,7 +51,7 @@ use PVE::Tools qw(run_command file_read_firstline file_get_contents dir_glob_for
use PVE::QMPClient;
use PVE::QemuConfig;
use PVE::QemuConfig::NoWrite;
-use PVE::QemuServer::Agent qw(qga_check_running);
+use PVE::QemuServer::Agent qw(get_qga_key parse_guest_agent qga_check_running);
use PVE::QemuServer::Helpers qw(config_aware_timeout min_version kvm_user_version windows_version);
use PVE::QemuServer::Cloudinit;
use PVE::QemuServer::CGroup;
@@ -161,34 +161,6 @@ my $watchdog_fmt = {
};
PVE::JSONSchema::register_format('pve-qm-watchdog', $watchdog_fmt);
-my $agent_fmt = {
- enabled => {
- description => "Enable/disable communication with a QEMU Guest Agent (QGA) running in the VM.",
- type => 'boolean',
- default => 0,
- default_key => 1,
- },
- fstrim_cloned_disks => {
- description => "Run fstrim after moving a disk or migrating the VM.",
- type => 'boolean',
- optional => 1,
- default => 0,
- },
- 'freeze-fs-on-backup' => {
- description => "Freeze/thaw guest filesystems on backup for consistency.",
- type => 'boolean',
- optional => 1,
- default => 1,
- },
- type => {
- description => "Select the agent type",
- type => 'string',
- default => 'virtio',
- optional => 1,
- enum => [qw(virtio isa)],
- },
-};
-
my $vga_fmt = {
type => {
description => "Select the VGA type. Using type 'cirrus' is not recommended.",
@@ -466,7 +438,7 @@ EODESC
optional => 1,
description => "Enable/disable communication with the QEMU Guest Agent and its properties.",
type => 'string',
- format => $agent_fmt,
+ format => $PVE::QemuServer::Agent::agent_fmt,
},
kvm => {
optional => 1,
@@ -1928,27 +1900,6 @@ sub parse_watchdog {
return $res;
}
-sub parse_guest_agent {
- my ($conf) = @_;
-
- return {} if !defined($conf->{agent});
-
- my $res = eval { parse_property_string($agent_fmt, $conf->{agent}) };
- warn $@ if $@;
-
- # if the agent is disabled ignore the other potentially set properties
- return {} if !$res->{enabled};
- return $res;
-}
-
-sub get_qga_key {
- my ($conf, $key) = @_;
- return undef if !defined($conf->{agent});
-
- my $agent = parse_guest_agent($conf);
- return $agent->{$key};
-}
-
sub parse_vga {
my ($value) = @_;
diff --git a/PVE/QemuServer/Agent.pm b/PVE/QemuServer/Agent.pm
index 9f1450ff..d147c1ae 100644
--- a/PVE/QemuServer/Agent.pm
+++ b/PVE/QemuServer/Agent.pm
@@ -6,6 +6,8 @@ use warnings;
use JSON;
use MIME::Base64 qw(decode_base64 encode_base64);
+use PVE::JSONSchema;
+
use PVE::QemuServer::Helpers;
use PVE::QemuServer::Monitor;
@@ -14,9 +16,60 @@ use base 'Exporter';
our @EXPORT_OK = qw(
check_agent_error
agent_cmd
+get_qga_key
+parse_guest_agent
qga_check_running
);
+our $agent_fmt = {
+ enabled => {
+ description => "Enable/disable communication with a QEMU Guest Agent (QGA) running in the VM.",
+ type => 'boolean',
+ default => 0,
+ default_key => 1,
+ },
+ fstrim_cloned_disks => {
+ description => "Run fstrim after moving a disk or migrating the VM.",
+ type => 'boolean',
+ optional => 1,
+ default => 0,
+ },
+ 'freeze-fs-on-backup' => {
+ description => "Freeze/thaw guest filesystems on backup for consistency.",
+ type => 'boolean',
+ optional => 1,
+ default => 1,
+ },
+ type => {
+ description => "Select the agent type",
+ type => 'string',
+ default => 'virtio',
+ optional => 1,
+ enum => [qw(virtio isa)],
+ },
+};
+
+sub parse_guest_agent {
+ my ($conf) = @_;
+
+ return {} if !defined($conf->{agent});
+
+ my $res = eval { PVE::JSONSchema::parse_property_string($agent_fmt, $conf->{agent}) };
+ warn $@ if $@;
+
+ # if the agent is disabled ignore the other potentially set properties
+ return {} if !$res->{enabled};
+ return $res;
+}
+
+sub get_qga_key {
+ my ($conf, $key) = @_;
+ return undef if !defined($conf->{agent});
+
+ my $agent = parse_guest_agent($conf);
+ return $agent->{$key};
+}
+
sub qga_check_running {
my ($vmid, $nowarn) = @_;
diff --git a/PVE/VZDump/QemuServer.pm b/PVE/VZDump/QemuServer.pm
index 80038d8f..b1c10687 100644
--- a/PVE/VZDump/QemuServer.pm
+++ b/PVE/VZDump/QemuServer.pm
@@ -1063,7 +1063,8 @@ sub qga_fs_freeze {
return;
}
- my $freeze = PVE::QemuServer::get_qga_key($self->{vmlist}->{$vmid}, 'freeze-fs-on-backup') // 1;
+ my $freeze =
+ PVE::QemuServer::Agent::get_qga_key($self->{vmlist}->{$vmid}, 'freeze-fs-on-backup') // 1;
if (!$freeze) {
$self->loginfo("skipping guest-agent 'fs-freeze', disabled in VM options");
return;
--
2.39.5
_______________________________________________
pve-devel mailing list
pve-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
prev parent reply other threads:[~2025-05-05 12:58 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-05 12:57 [pve-devel] [PATCH-SERIES qemu-server 00/11] better handle lost freeze command Fiona Ebner
2025-05-05 12:57 ` [pve-devel] [PATCH qemu-server 01/11] agent: drop unused $noerr argument from helpers Fiona Ebner
2025-05-05 12:57 ` [pve-devel] [PATCH qemu-server 02/11] api: agent: improve module imports Fiona Ebner
2025-05-05 12:57 ` [pve-devel] [PATCH qemu-server 03/11] agent: code style: order module imports according to style guide Fiona Ebner
2025-05-05 12:57 ` [pve-devel] [PATCH qemu-server 04/11] agent: avoid dependency on QemuConfig module Fiona Ebner
2025-05-05 12:57 ` [pve-devel] [PATCH qemu-server 05/11] qmp client: remove erroneous comment Fiona Ebner
2025-05-05 12:57 ` [pve-devel] [PATCH qemu-server 06/11] qmp client: add $noerr argument Fiona Ebner
2025-05-05 12:57 ` [pve-devel] [PATCH qemu-server 07/11] agent: implement fsfreeze helper to better handle lost commands Fiona Ebner
2025-05-05 13:57 ` Mira Limbeck
2025-05-05 14:01 ` Fiona Ebner
2025-05-05 12:57 ` [pve-devel] [PATCH qemu-server 08/11] agent: avoid use of deprecated check_running() function Fiona Ebner
2025-05-05 12:57 ` [pve-devel] [PATCH qemu-server 09/11] agent: move qga_check_running() helper to agent module Fiona Ebner
2025-05-05 12:57 ` [pve-devel] [PATCH qemu-server 10/11] agent: prefer usage of get_qga_key() helper Fiona Ebner
2025-05-05 12:57 ` Fiona Ebner [this message]
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=20250505125724.75620-12-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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal