]> git.proxmox.com Git - pve-client.git/blobdiff - PVE/APIClient/Commands/help.pm
implement help
[pve-client.git] / PVE / APIClient / Commands / help.pm
diff --git a/PVE/APIClient/Commands/help.pm b/PVE/APIClient/Commands/help.pm
new file mode 100644 (file)
index 0000000..076305a
--- /dev/null
@@ -0,0 +1,70 @@
+package PVE::APIClient::Commands::help;
+
+use strict;
+use warnings;
+
+use PVE::APIClient::Commands::help;
+use PVE::APIClient::Commands::lxc;
+use PVE::APIClient::Commands::remote;
+
+use PVE::CLIHandler;
+
+use base qw(PVE::CLIHandler);
+
+__PACKAGE__->register_method ({
+    name => 'help',
+    path => 'help',
+    method => 'GET',
+    description => "Print usage information.",
+    parameters => {
+       additionalProperties => 0,
+       properties => {
+           verbose => {
+               description => "Verbose output - list all options.",
+               type => 'boolean',
+               optional => 1,
+               default => 0,
+           },
+       },
+    },
+    returns => { type => 'null'},
+    code => sub {
+       my ($param) = @_;
+
+       my $text = "USAGE: pveclient <cmd> ...\n\n" if !$param->{verbose};
+
+       my $format = $param->{verbose} ? 'full' : 'short';
+
+       my $assemble_usage_string = sub {
+           my ($subcommand, $def) = @_;
+
+           my $sortfunc = sub { sort keys %{$_[0]} };
+
+           if (ref($def) eq 'HASH') {
+               foreach my $cmd (&$sortfunc($def)) {
+
+                   if (ref($def->{$cmd}) eq 'ARRAY') {
+                       my ($class, $name, $arg_param, $fixed_param) = @{$def->{$cmd}};
+                       $text .= $class->usage_str($name, "pveclient $subcommand $name", $arg_param, $fixed_param, $format);
+                   }
+               }
+           } else {
+               my ($class, $name, $arg_param, $fixed_param) = @$def;
+               $text .= $class->usage_str($name, "pveclient $name", $arg_param, $fixed_param, $format);
+           }
+       };
+
+       $assemble_usage_string->('help', $PVE::APIClient::Commands::help::cmddef);
+       $assemble_usage_string->('lxc', $PVE::APIClient::Commands::lxc::cmddef);
+       $assemble_usage_string->('remote', $PVE::APIClient::Commands::remote::cmddef);
+
+       $text .= "pveclient <get/set/create/delete> <path> {options}\n\n";
+
+       print STDERR $text;
+
+       return undef;
+    }});
+
+our $cmddef = [ __PACKAGE__, 'help', []];
+
+1;