[pve-devel] [PATCH pve-client v3] Add a simple implementation of list

René Jochum r.jochum at proxmox.com
Mon Jun 11 11:35:27 CEST 2018


Signed-off-by: René Jochum <r.jochum at proxmox.com>
---
This removes all the logic from previous patches where I quieried /config from each VM/LXC.


 PVE/APIClient/Commands/help.pm |  2 ++
 PVE/APIClient/Commands/list.pm | 58 ++++++++++++++++++++++++++++++++++++++++++
 PVE/APIClient/Commands/lxc.pm  | 21 ---------------
 pveclient                      |  2 ++
 4 files changed, 62 insertions(+), 21 deletions(-)
 create mode 100644 PVE/APIClient/Commands/list.pm

diff --git a/PVE/APIClient/Commands/help.pm b/PVE/APIClient/Commands/help.pm
index 407af5e..81d4d4a 100644
--- a/PVE/APIClient/Commands/help.pm
+++ b/PVE/APIClient/Commands/help.pm
@@ -4,6 +4,7 @@ use strict;
 use warnings;
 
 use PVE::APIClient::Commands::help;
+use PVE::APIClient::Commands::list;
 use PVE::APIClient::Commands::lxc;
 use PVE::APIClient::Commands::remote;
 
@@ -55,6 +56,7 @@ __PACKAGE__->register_method ({
 	};
 
 	$assemble_usage_string->('help', $PVE::APIClient::Commands::help::cmddef);
+	$assemble_usage_string->('list', $PVE::APIClient::Commands::list::cmddef);
 	$assemble_usage_string->('lxc', $PVE::APIClient::Commands::lxc::cmddef);
 	$assemble_usage_string->('remote', $PVE::APIClient::Commands::remote::cmddef);
 
diff --git a/PVE/APIClient/Commands/list.pm b/PVE/APIClient/Commands/list.pm
new file mode 100644
index 0000000..aed0a54
--- /dev/null
+++ b/PVE/APIClient/Commands/list.pm
@@ -0,0 +1,58 @@
+package PVE::APIClient::Commands::list;
+
+use strict;
+use warnings;
+use JSON;
+
+use PVE::JSONSchema qw(get_standard_option);
+
+use base qw(PVE::CLIHandler);
+
+__PACKAGE__->register_method ({
+    name => 'list',
+    path => 'list',
+    method => 'GET',
+    description => "List containers.",
+    parameters => {
+	additionalProperties => 0,
+	properties => {
+	    remote => get_standard_option('pveclient-remote-name'),
+	    format => {
+		type => 'string',
+		description => 'Output format',
+		enum => [ 'table', 'json' ],
+		optional => 1,
+		default => 'table',
+	    }
+	},
+    },
+    returns => { type => 'null'},
+    code => sub {
+	my ($param) = @_;
+
+	my $config = PVE::APIClient::Config->load();
+	my $conn = PVE::APIClient::Config->remote_conn($config, $param->{remote});
+	my $resources = $conn->get('api2/json/cluster/resources', { type => 'vm' });
+
+	if (!defined($param->{format}) or $param->{format} eq 'table') {
+	    my $headers = ['Node', 'VMID', 'Type', 'Name', 'Status'];
+	    my $data = [];
+	    for my $el (@$resources) {
+		push(@$data, [$el->{node}, $el->{vmid}, $el->{type}, $el->{name}, $el->{status}]);
+	    }
+
+	    printf("%10s %10s %10s %10s %10s\n", @$headers);
+	    for my $row (@$data) {
+		printf("%10s %10s %10s %10s %10s\n", @$row);
+	    }
+	} else {
+	    print JSON::to_json($resources, {utf8 => 1, pretty => 1});
+	}
+
+	return undef;
+    }});
+
+
+our $cmddef = [ __PACKAGE__, 'list', ['remote']];
+
+1;
\ No newline at end of file
diff --git a/PVE/APIClient/Commands/lxc.pm b/PVE/APIClient/Commands/lxc.pm
index c60017b..9e163f7 100644
--- a/PVE/APIClient/Commands/lxc.pm
+++ b/PVE/APIClient/Commands/lxc.pm
@@ -390,29 +390,8 @@ __PACKAGE__->register_method ({
 	return undef;
     }});
 
-__PACKAGE__->register_method ({
-    name => 'list',
-    path => 'list',
-    method => 'GET',
-    description => "List containers.",
-    parameters => {
-	additionalProperties => 0,
-	properties => {
-	    remote => get_standard_option('pveclient-remote-name'),
-	},
-    },
-    returns => { type => 'null'},
-    code => sub {
-	my ($param) = @_;
-
-	die "implement me";
-
-    }});
-
-
 our $cmddef = {
     enter => [ __PACKAGE__, 'enter', ['remote', 'vmid']],
-    list => [ __PACKAGE__, 'list', ['remote']],
 };
 
 1;
diff --git a/pveclient b/pveclient
index 46d902d..6a06a88 100755
--- a/pveclient
+++ b/pveclient
@@ -13,6 +13,7 @@ use PVE::CLIHandler;
 use PVE::APIClient::LWP;
 use PVE::APIClient::Helpers;
 use PVE::APIClient::Commands::remote;
+use PVE::APIClient::Commands::list;
 use PVE::APIClient::Commands::lxc;
 use PVE::APIClient::Commands::help;
 
@@ -31,6 +32,7 @@ sub call_method {
 }
 
 my $cli_class_handlers = {
+    list => 'PVE::APIClient::Commands::list',
     lxc => 'PVE::APIClient::Commands::lxc',
     remote => 'PVE::APIClient::Commands::remote',
     help => 'PVE::APIClient::Commands::help',
-- 
2.11.0



More information about the pve-devel mailing list