---
 PVE/API2/Nodes.pm |   54 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 54 insertions(+)

diff --git a/PVE/API2/Nodes.pm b/PVE/API2/Nodes.pm
index 4cfcfd2..d349764 100644
--- a/PVE/API2/Nodes.pm
+++ b/PVE/API2/Nodes.pm
@@ -110,6 +110,7 @@ __PACKAGE__->register_method ({
        my $result = [
            { name => 'apt' },
            { name => 'version' },
+           { name => 'execute' },
            { name => 'syslog' },
            { name => 'bootlog' },
            { name => 'status' },
@@ -329,6 +330,59 @@ __PACKAGE__->register_method({
     }});
 
 __PACKAGE__->register_method({
+    name => 'execute',
+    path => 'execute',
+    method => 'GET',
+    permissions => {
+       check => ['perm', '/nodes/{node}', [ 'Sys.Audit' ]],
+    },
+    description => "Execute commands in order",
+    proxyto => 'node',
+    parameters => {
+       additionalProperties => 0,
+       properties => {
+           node => get_standard_option('pve-node'),
+           commands => { type => "JSON_STRING" }
+       },
+    },
+    returns => {
+       type => 'array',
+       properties => {
+
+       },
+    },
+    code => sub {
+       my ($param) = @_;
+       my $res = [];
+
+       my $commands = eval {
+               decode_json($param->{commands});
+       };
+       die "commands param did not contain valid JSON: $@" if $@;
+       die "commands is not an array" if ref($commands) ne "ARRAY";
+
+        foreach my $cmd (@$commands) {
+           die "$cmd is not a valid command" if (ref($cmd) ne "HASH" || 
!$cmd->{path} || !$cmd->{method});
+
+           $cmd->{args} //= {};
+
+           my $path = "nodes/".$param->{node}."/".$cmd->{path};
+           my ($handler, $info) = PVE::API2->find_handler($cmd->{method}, 
$path, $cmd->{args});
+           if (!$handler || !$info) {
+               die "no handler for '$path'\n";
+           }
+
+           eval {
+               push(@$res, $handler->handle($info, $cmd->{args}) );
+           };
+           push(@$res, $@) if $@;
+       }
+
+       return $res;
+    }});
+
+
+__PACKAGE__->register_method({
     name => 'node_cmd', 
     path => 'status', 
     method => 'POST',
-- 
1.7.10.4

_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to