]> git.proxmox.com Git - pve-common.git/blobdiff - src/PVE/CLIHandler.pm
rename $can_read_pass to $read_password_func
[pve-common.git] / src / PVE / CLIHandler.pm
index 1af9987c56c65d6b12a239df14177ae29627d632..5e2d3b8d193acb664b0c62555e7d0b17bd1ea151 100644 (file)
@@ -10,6 +10,29 @@ use PVE::INotify;
 
 use base qw(PVE::RESTHandler);
 
+# $cmddef defines which (sub)commands are available in a specific CLI class.
+# A real command is always an array consisting of its class, name, array of
+# position fixed (required) parameters and hash of predefined parameters when
+# mapping a CLI command t o an API call. Optionally an output method can be
+# passed at the end, e.g., for formatting or transformation purpose.
+#
+# [class, name, fixed_params, API_pre-set params, output_sub ]
+#
+# In case of so called 'simple commands', the $cmddef can be also just an
+# array.
+#
+# Examples:
+# $cmddef = {
+#     command => [ 'PVE::API2::Class', 'command', [ 'arg1', 'arg2' ], { node => $nodename } ],
+#     do => {
+#         this => [ 'PVE::API2::OtherClass', 'method', [ 'arg1' ], undef, sub {
+#             my ($res) = @_;
+#             print "$res\n";
+#         }],
+#         that => [ 'PVE::API2::OtherClass', 'subroutine' [] ],
+#     },
+#     dothat => { alias => 'do that' },
+# }
 my $cmddef;
 my $exename;
 my $cli_handler_class;
@@ -94,8 +117,8 @@ sub generate_usage_str {
     $separator //= '';
     $indent //= '';
 
-    my $can_read_pass = $cli_handler_class->can('read_password');
-    my $can_str_param_fmap = $cli_handler_class->can('string_param_file_mapping');
+    my $read_password_func = $cli_handler_class->can('read_password');
+    my $param_mapping_func = $cli_handler_class->can('string_param_file_mapping');
 
     my ($subcmd, $def) = resolve_cmd($cmd);
 
@@ -115,7 +138,7 @@ sub generate_usage_str {
                    $str .= $indent;
                    $str .= $class->usage_str($name, "$prefix $cmd", $arg_param,
                                              $fixed_param, $format,
-                                             $can_read_pass, $can_str_param_fmap);
+                                             $read_password_func, $param_mapping_func);
                    $oldclass = $class;
 
                } elsif (defined($def->{$cmd}->{alias}) && ($format eq 'asciidoc')) {
@@ -139,7 +162,7 @@ sub generate_usage_str {
 
            $str .= $indent;
            $str .= $class->usage_str($name, $prefix, $arg_param, $fixed_param, $format,
-                                     $can_read_pass, $can_str_param_fmap);
+                                     $read_password_func, $param_mapping_func);
        }
        return $str;
     };
@@ -434,7 +457,7 @@ sub setup_environment {
 }
 
 my $handle_cmd  = sub {
-    my ($args, $pwcallback, $preparefunc, $stringfilemap) = @_;
+    my ($args, $read_password_func, $preparefunc, $param_mapping_func) = @_;
 
     $cmddef->{help} = [ __PACKAGE__, 'help', ['extra-args'] ];
 
@@ -462,17 +485,17 @@ my $handle_cmd  = sub {
 
     &$preparefunc() if $preparefunc;
 
-    my ($class, $name, $arg_param, $uri_param, $outsub) = @{$cmddef->{$cmd} || []};
+    my ($class, $name, $arg_param, $uri_param, $outsub) = @{$def || []};
     $abort->("unknown command '$cmd_str'") if !$class;
 
     my $prefix = "$exename $cmd_str";
-    my $res = $class->cli_handler($prefix, $name, $cmd_args, $arg_param, $uri_param, $pwcallback, $stringfilemap);
+    my $res = $class->cli_handler($prefix, $name, $cmd_args, $arg_param, $uri_param, $read_password_func, $param_mapping_func);
 
     &$outsub($res) if $outsub;
 };
 
 my $handle_simple_cmd = sub {
-    my ($args, $pwcallback, $preparefunc, $stringfilemap) = @_;
+    my ($args, $read_password_func, $preparefunc, $param_mapping_func) = @_;
 
     my ($class, $name, $arg_param, $uri_param, $outsub) = @{$cmddef};
     die "no class specified" if !$class;
@@ -501,7 +524,7 @@ my $handle_simple_cmd = sub {
 
     &$preparefunc() if $preparefunc;
 
-    my $res = $class->cli_handler($name, $name, \@ARGV, $arg_param, $uri_param, $pwcallback, $stringfilemap);
+    my $res = $class->cli_handler($name, $name, \@ARGV, $arg_param, $uri_param, $read_password_func, $param_mapping_func);
 
     &$outsub($res) if $outsub;
 };
@@ -522,8 +545,8 @@ sub run_cli_handler {
 
     my $preparefunc = $params{prepare};
 
-    my $pwcallback = $class->can('read_password');
-    my $stringfilemap = $class->can('string_param_file_mapping');
+    my $read_password_func = $class->can('read_password');
+    my $param_mapping_func = $class->can('string_param_file_mapping');
 
     $exename = &$get_exe_name($class);
 
@@ -533,9 +556,9 @@ sub run_cli_handler {
     $cmddef = ${"${class}::cmddef"};
 
     if (ref($cmddef) eq 'ARRAY') {
-       &$handle_simple_cmd(\@ARGV, $pwcallback, $preparefunc, $stringfilemap);
+       &$handle_simple_cmd(\@ARGV, $read_password_func, $preparefunc, $param_mapping_func);
     } else {
-       &$handle_cmd(\@ARGV, $pwcallback, $preparefunc, $stringfilemap);
+       &$handle_cmd(\@ARGV, $read_password_func, $preparefunc, $param_mapping_func);
     }
 
     exit 0;