Signed-off-by: Dietmar Maurer <diet...@proxmox.com> --- bin/pvesh | 83 +++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 44 insertions(+), 39 deletions(-)
diff --git a/bin/pvesh b/bin/pvesh index 36c9a900..5dab90c3 100755 --- a/bin/pvesh +++ b/bin/pvesh @@ -103,18 +103,17 @@ sub check_proxyto { } sub proxy_handler { - my ($node, $remip, $path, $cmd, $param, $noout) = @_; + my ($node, $remip, $path, $cmd, $param) = @_; my $args = []; foreach my $key (keys %$param) { + next if $key eq 'quiet' || $key eq 'output-format'; # just to be sure push @$args, "--$key", $param->{$key}; } - push @$args, '--quiet' if $noout; - my $remcmd = ['ssh', '-o', 'BatchMode=yes', "root\@$remip", 'pvesh', '--noproxy', $cmd, $path, - '--format', 'json']; + '--output-format', 'json']; if (scalar(@$args)) { my $cmdargs = [String::ShellQuote::shell_quote(@$args)]; @@ -202,7 +201,6 @@ sub extract_path_info { my $path_properties = {}; -my $path_returns = { type => 'null' }; my $api_path_property = { description => "API path.", @@ -219,7 +217,6 @@ if (my $info = extract_path_info($uri_param)) { next if defined($uri_param->{$key}); $path_properties->{$key} = $info->{parameters}->{properties}->{$key}; } - $path_returns = $info->{returns}; } $path_properties->{api_path} = $api_path_property; @@ -229,23 +226,18 @@ $path_properties->{noproxy} = { optional => 1, }; -my $format_result = sub { - my ($data, $schema, $options) = @_; - - return if $opt_nooutput || $options->{quiet}; # fixme:?? - - PVE::CLIFormatter::print_api_result($data, $path_returns, undef, $options); -}; - sub call_api_method { - my ($cmd, $param, $options) = @_; + my ($cmd, $param) = @_; my $method = $method_map->{$cmd} || die "unable to map command '$cmd'"; my $path = PVE::Tools::extract_param($param, 'api_path'); die "missing API path\n" if !defined($path); - $opt_nooutput = 1 if $options->{quiet}; + my $stdopts = PVE::RESTHandler::extract_standard_output_properties($param); + PVE::CLIFormatter::query_terminal_options($stdopts); + + $opt_nooutput = 1 if $stdopts->{quiet}; my $uri_param = {}; my ($handler, $info) = PVE::API2->find_handler($method, $path, $uri_param); @@ -253,16 +245,21 @@ sub call_api_method { die "no '$cmd' handler for '$path'\n"; } + my $data; my ($node, $remip) = check_proxyto($info, $uri_param); - return proxy_handler($node, $remip, $path, $cmd, $param, $opt_nooutput) if $node; + if ($node) { + $data = proxy_handler($node, $remip, $path, $cmd, $param); + } else { + foreach my $p (keys %$uri_param) { + $param->{$p} = $uri_param->{$p}; + } - foreach my $p (keys %$uri_param) { - $param->{$p} = $uri_param->{$p}; + $data = $handler->handle($info, $param); } - my $data = $handler->handle($info, $param, $options); + return if $opt_nooutput || $stdopts->{quiet}; - return $data; + PVE::CLIFormatter::print_api_result($data, $info->{returns}, undef, $stdopts); } __PACKAGE__->register_method ({ @@ -272,13 +269,15 @@ __PACKAGE__->register_method ({ description => "Call API GET on <api_path>.", parameters => { additionalProperties => 0, - properties => $path_properties, + properties => PVE::RESTHandler::add_standard_output_properties($path_properties), }, - returns => $path_returns, + returns => { type => 'null' }, code => sub { - my ($param, $options) = @_; + my ($param) = @_; + + call_api_method('get', $param); - return call_api_method('get', $param, $options); + return undef; }}); __PACKAGE__->register_method ({ @@ -290,11 +289,13 @@ __PACKAGE__->register_method ({ additionalProperties => 0, properties => $path_properties, }, - returns => $path_returns, + returns => { type => 'null' }, code => sub { - my ($param, $options) = @_; + my ($param) = @_; + + call_api_method('set', $param); - return call_api_method('set', $param, $options); + return undef; }}); __PACKAGE__->register_method ({ @@ -306,11 +307,13 @@ __PACKAGE__->register_method ({ additionalProperties => 0, properties => $path_properties, }, - returns => $path_returns, + returns => { type => 'null' }, code => sub { - my ($param, $options) = @_; + my ($param) = @_; - return call_api_method('create', $param, $options); + call_api_method('create', $param); + + return undef; }}); __PACKAGE__->register_method ({ @@ -322,11 +325,13 @@ __PACKAGE__->register_method ({ additionalProperties => 0, properties => $path_properties, }, - returns => $path_returns, + returns => { type => 'null' }, code => sub { - my ($param, $options) = @_; + my ($param) = @_; - return call_api_method('delete', $param, $options); + call_api_method('delete', $param); + + return undef; }}); __PACKAGE__->register_method ({ @@ -358,7 +363,7 @@ __PACKAGE__->register_method ({ }, returns => { type => 'null' }, code => sub { - my ($param, $options) = @_; + my ($param) = @_; my $path = $param->{api_path}; @@ -398,10 +403,10 @@ __PACKAGE__->register_method ({ our $cmddef = { usage => [ __PACKAGE__, 'usage', ['api_path']], - get => [ __PACKAGE__, 'get', ['api_path'], {}, $format_result ], - set => [ __PACKAGE__, 'set', ['api_path'], {}, $format_result ], - create => [ __PACKAGE__, 'create', ['api_path'], {}, $format_result ], - delete => [ __PACKAGE__, 'delete', ['api_path'], {}, $format_result ], + get => [ __PACKAGE__, 'get', ['api_path']], + set => [ __PACKAGE__, 'set', ['api_path']], + create => [ __PACKAGE__, 'create', ['api_path']], + delete => [ __PACKAGE__, 'delete', ['api_path']], }; my $cmd = $ARGV[0]; -- 2.11.0 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel