[pve-devel] [PATCH V2 qemu-server] Add qm agent.

Wolfgang Link w.link at proxmox.com
Thu Nov 3 15:26:50 CET 2016


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 34a5d5d..6e82edc 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' },
@@ -2806,6 +2807,51 @@ __PACKAGE__->register_method({
     }});
 
 __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',
     method => 'PUT',
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.1.4





More information about the pve-devel mailing list