X-Git-Url: https://git.proxmox.com/?p=pve-client.git;a=blobdiff_plain;f=pveclient;h=a7e41efea3f740743d09d5741d64085e62c2ae3d;hp=8ef37a94b467ff7aae1601bf10a69cec3460c0f2;hb=b0495d825b1b1e5c83a006d68293e89c98eaa024;hpb=2f964a751cc71d669bc03df031a147eebc8ebe35 diff --git a/pveclient b/pveclient index 8ef37a9..a7e41ef 100755 --- a/pveclient +++ b/pveclient @@ -5,36 +5,42 @@ package PVE::CLI::pveclient; use strict; use warnings; use Cwd 'abs_path'; -use lib '/usr/share/pve-client'; -use lib '.'; use Data::Dumper; -use PVE::JSONSchema qw(register_standard_option get_standard_option); -use PVE::CLIHandler; +use PVE::APIClient::JSONSchema qw(register_standard_option get_standard_option); +use PVE::APIClient::CLIHandler; use PVE::APIClient::LWP; use PVE::APIClient::Helpers; +use PVE::APIClient::Config; use PVE::APIClient::Commands::config; use PVE::APIClient::Commands::remote; use PVE::APIClient::Commands::list; use PVE::APIClient::Commands::lxc; -use PVE::APIClient::Commands::help; -use PVE::APIClient::Commands::start; +use PVE::APIClient::Commands::GuestStatus; use JSON; sub call_method { - my ($remote, $path, $method, $params) = @_; + my ($remote, $path, $method, $param) = @_; die "missing API path\n" if !defined($path); + my $config = PVE::APIClient::Config->load(); + + # test if api path exists my $info = PVE::APIClient::Helpers::lookup_api_method($path, $method); - print Dumper($params); - die "implement me"; + my $conn = PVE::APIClient::Config->remote_conn($config, $remote); + + my $res = $conn->call($method, "api2/json/$path", $param); + die "undefined result" if !defined($res); + die "undefined result data" if !exists($res->{data}); + + return $res->{data}; } -use base qw(PVE::CLIHandler); +use base qw(PVE::APIClient::CLIHandler); my $cmd = $ARGV[0]; @@ -80,6 +86,15 @@ $path_properties->{api_path} = { }, }; +my $format_result = sub { + my ($data, $format) = @_; + + return if $path_returns->{type} eq 'null'; + + # TODO: implement different output formats ($format) + print to_json($data, {utf8 => 1, allow_nonref => 1, canonical => 1, pretty => 1 }); +}; + __PACKAGE__->register_method ({ name => 'pveclient_get', path => 'pveclient_get', @@ -162,15 +177,17 @@ our $cmddef = { list => $PVE::APIClient::Commands::list::cmddef, lxc => $PVE::APIClient::Commands::lxc::cmddef, remote => $PVE::APIClient::Commands::remote::cmddef, - - start => $PVE::APIClient::Commands::start::cmddef, + + spice => [ 'PVE::APIClient::Commands::GuestStatus', 'spice', ['remote', 'vmid']], + start => [ 'PVE::APIClient::Commands::GuestStatus', 'start', ['remote', 'vmid']], + stop => [ 'PVE::APIClient::Commands::GuestStatus', 'stop', ['remote', 'vmid']], api => { - get => [ __PACKAGE__, 'pveclient_get', ['remote', 'api_path']], - set => [ __PACKAGE__, 'pveclient_set', ['remote', 'api_path']], - create => [ __PACKAGE__, 'pveclient_create', ['remote', 'api_path']], - delete => [ __PACKAGE__, 'pveclient_delete', ['remote', 'api_path']], - } + get => [ __PACKAGE__, 'pveclient_get', ['remote', 'api_path'], {}, $format_result ], + set => [ __PACKAGE__, 'pveclient_set', ['remote', 'api_path'], {}, $format_result ], + create => [ __PACKAGE__, 'pveclient_create', ['remote', 'api_path'], {}, $format_result ], + delete => [ __PACKAGE__, 'pveclient_delete', ['remote', 'api_path'], {}, $format_result ], + }, };