Signed-off-by: Fiona Ebner <[email protected]>
---
 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



_______________________________________________
pve-devel mailing list
[email protected]
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to