[pve-devel] [PATCH qemu-server 09/16] monitor: qmp: allow 'qsd' peer type for qemu-storage-daemon
Fiona Ebner
f.ebner at proxmox.com
Tue Oct 14 16:39:20 CEST 2025
Signed-off-by: Fiona Ebner <f.ebner at proxmox.com>
---
src/PVE/QemuServer/Monitor.pm | 34 ++++++++++++++++++++++++++--------
1 file changed, 26 insertions(+), 8 deletions(-)
diff --git a/src/PVE/QemuServer/Monitor.pm b/src/PVE/QemuServer/Monitor.pm
index c8a72a64..efdee8e7 100644
--- a/src/PVE/QemuServer/Monitor.pm
+++ b/src/PVE/QemuServer/Monitor.pm
@@ -19,11 +19,12 @@ our @EXPORT_OK = qw(
my $result = qmp_cmd($peer, $cmd);
Execute the C<$qmp_command_name> with arguments C<%params> for the peer C<$peer>. The type C<$type>
-of the peer can be C<qmp> for the QEMU instance of the VM or C<qga> for the guest agent of the VM.
-Dies if the VM is not running or the monitor socket cannot be reached, even if the C<noerr> argument
-is used. Returns the structured result from the QMP side converted from JSON to structured Perl
-data. In case the C<noerr> argument is used and the QMP command failed or timed out, the result is a
-hash reference with an C<error> key containing the error message.
+of the peer can be C<qmp> for the QEMU instance of the VM, C<qga> for the guest agent of the VM or
+C<qsd> for the QEMU storage daemon associated to the VM. Dies if the VM is not running or the
+monitor socket cannot be reached, even if the C<noerr> argument is used. Returns the structured
+result from the QMP side converted from JSON to structured Perl data. In case the C<noerr> argument
+is used and the QMP command failed or timed out, the result is a hash reference with an C<error> key
+containing the error message.
Parameters:
@@ -35,8 +36,8 @@ Parameters:
=item C<$vmid>: The ID of the virtual machine.
-=item C<$type>: Type of the peer to communicate with. This can be C<qmp> for the VM's QEMU instance
-or C<qga> for the VM's guest agent.
+=item C<$type>: Type of the peer to communicate with. This can be C<qmp> for the VM's QEMU instance,
+C<qga> for the VM's guest agent or C<qsd> for the QEMU storage daemon assoicated to the VM.
=back
@@ -70,7 +71,16 @@ sub qmp_cmd {
}
eval {
- die "VM $vmid not running\n" if !PVE::QemuServer::Helpers::vm_running_locally($vmid);
+ if ($peer->{type} eq 'qmp' || $peer->{type} eq 'qga') {
+ die "VM $vmid not running\n"
+ if !PVE::QemuServer::Helpers::vm_running_locally($vmid);
+ } elsif ($peer->{type} eq 'qsd') {
+ die "QEMU storage daemon for VM $vmid not running\n"
+ if !PVE::QemuServer::Helpers::qsd_running_locally($vmid);
+ } else {
+ die "qmp_cmd - unknown peer type $peer->{type}\n";
+ }
+
my $sname = PVE::QemuServer::Helpers::qmp_socket($peer);
if (-e $sname) { # test if VM is reasonably new and supports qmp/qga
my $qmpclient = PVE::QMPClient->new();
@@ -88,6 +98,14 @@ sub qmp_cmd {
return $res;
}
+sub qsd_cmd {
+ my ($vmid, $execute, %params) = @_;
+
+ my $cmd = { execute => $execute, arguments => \%params };
+
+ return qmp_cmd({ vmid => $vmid, type => 'qsd' }, $cmd);
+}
+
sub mon_cmd {
my ($vmid, $execute, %params) = @_;
--
2.47.3
More information about the pve-devel
mailing list