From d1a474273b4c36e490141ca205cdd87ba67ab3fd Mon Sep 17 00:00:00 2001 From: Wolfgang Link Date: Thu, 3 Nov 2016 15:26:50 +0100 Subject: [PATCH] Add qm agent. This command makes it possible to run commnads on the Qemu-Guest-Agent if it is installed and running. --- PVE/API2/Qemu.pm | 46 ++++++++++++++++++++++++++++++++++++++++++++++ PVE/CLI/qm.pm | 2 ++ 2 files changed, 48 insertions(+) diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm index 902f028..500e2df 100644 --- a/PVE/API2/Qemu.pm +++ b/PVE/API2/Qemu.pm @@ -614,6 +614,7 @@ __PACKAGE__->register_method({ { subdir => 'rrd' }, { subdir => 'rrddata' }, { subdir => 'monitor' }, + { subdir => 'agent' }, { subdir => 'snapshot' }, { subdir => 'spiceproxy' }, { subdir => 'sendkey' }, @@ -2839,6 +2840,51 @@ __PACKAGE__->register_method({ return $res; }}); +__PACKAGE__->register_method({ + name => 'agent', + path => '{vmid}/agent', + method => 'POST', + protected => 1, + proxyto => 'node', + description => "Execute Qemu Guest Agent commands.", + permissions => { + check => ['perm', '/vms/{vmid}', [ 'VM.Monitor' ]], + }, + parameters => { + additionalProperties => 0, + properties => { + node => get_standard_option('pve-node'), + vmid => get_standard_option('pve-vmid'), + command => { + type => 'string', + description => "The QGA command.", + } + }, + }, + returns => { type => 'object' }, + code => sub { + my ($param) = @_; + + my $vmid = $param->{vmid}; + + my $conf = PVE::QemuConfig->load_config ($vmid); # check if VM exists + + die "Only qga commands are allowed\n" if $param->{command} !~ m/^guest-.*$/; + die "No Qemu Guest Agent\n" if !defined($conf->{agent}); + die "VM $vmid is not running\n" if !PVE::QemuServer::check_running($vmid); + + my $res = ''; + eval { + $res = PVE::QemuServer::vm_mon_cmd($vmid, $param->{command}); + }; + + if (my $err = $@) { + return {'ERROR:', $err}; + } else { + return {'OK:', $res}; + } + }}); + __PACKAGE__->register_method({ name => 'resize_vm', path => '{vmid}/resize', diff --git a/PVE/CLI/qm.pm b/PVE/CLI/qm.pm index a0e0ba5..0599260 100755 --- a/PVE/CLI/qm.pm +++ b/PVE/CLI/qm.pm @@ -529,6 +529,8 @@ our $cmddef = { monitor => [ __PACKAGE__, 'monitor', ['vmid']], + agent => [ "PVE::API2::Qemu", 'agent', ['vmid'], { node => $nodename }], + mtunnel => [ __PACKAGE__, 'mtunnel', []], terminal => [ __PACKAGE__, 'terminal', ['vmid']], -- 2.39.2