]>
Commit | Line | Data |
---|---|---|
0a13e08e SR |
1 | package PVE::QemuServer::Monitor; |
2 | ||
3 | use strict; | |
4 | use warnings; | |
5 | ||
6 | use PVE::SafeSyslog; | |
7 | use PVE::QemuServer::Helpers; | |
8 | use PVE::QMPClient; | |
9 | ||
10 | use base 'Exporter'; | |
11 | our @EXPORT_OK = qw( | |
12 | mon_cmd | |
13 | ); | |
14 | ||
15 | sub qmp_cmd { | |
16 | my ($vmid, $cmd) = @_; | |
17 | ||
18 | my $res; | |
19 | ||
20 | my $timeout; | |
21 | if ($cmd->{arguments}) { | |
22 | $timeout = delete $cmd->{arguments}->{timeout}; | |
23 | } | |
24 | ||
25 | eval { | |
26 | die "VM $vmid not running\n" if !PVE::QemuServer::Helpers::vm_running_locally($vmid); | |
27 | my $sname = PVE::QemuServer::Helpers::qmp_socket($vmid); | |
28 | if (-e $sname) { # test if VM is reasonably new and supports qmp/qga | |
29 | my $qmpclient = PVE::QMPClient->new(); | |
30 | ||
31 | $res = $qmpclient->cmd($vmid, $cmd, $timeout); | |
32 | } else { | |
33 | die "unable to open monitor socket\n"; | |
34 | } | |
35 | }; | |
36 | if (my $err = $@) { | |
37 | syslog("err", "VM $vmid qmp command failed - $err"); | |
38 | die $err; | |
39 | } | |
40 | ||
41 | return $res; | |
42 | } | |
43 | ||
44 | sub mon_cmd { | |
45 | my ($vmid, $execute, %params) = @_; | |
46 | ||
47 | my $cmd = { execute => $execute, arguments => \%params }; | |
ae1f94e1 TL |
48 | |
49 | return qmp_cmd($vmid, $cmd); | |
0a13e08e SR |
50 | } |
51 | ||
52 | sub hmp_cmd { | |
4ee69c54 | 53 | my ($vmid, $cmdline, $timeout) = @_; |
0a13e08e SR |
54 | |
55 | my $cmd = { | |
56 | execute => 'human-monitor-command', | |
4ee69c54 | 57 | arguments => { 'command-line' => $cmdline, timeout => $timeout }, |
0a13e08e SR |
58 | }; |
59 | ||
60 | return qmp_cmd($vmid, $cmd); | |
61 | } | |
62 | ||
63 | 1; |