X-Git-Url: https://git.proxmox.com/?p=pve-common.git;a=blobdiff_plain;f=src%2FPVE%2FCLIHandler.pm;h=b24a0cc6583ccbfa97e190c96e4ed925b1a32480;hp=2fa7933ee00574baaf860cb87fcc0f34974d7e38;hb=ba49de85b9fbaded0da7997363af76f789fe9a72;hpb=85b9def289c52e768cc6aea99687f75211952646 diff --git a/src/PVE/CLIHandler.pm b/src/PVE/CLIHandler.pm index 2fa7933..b24a0cc 100644 --- a/src/PVE/CLIHandler.pm +++ b/src/PVE/CLIHandler.pm @@ -6,6 +6,7 @@ use warnings; use PVE::SafeSyslog; use PVE::Exception qw(raise raise_param_exc); use PVE::RESTHandler; +use PVE::PTY; use PVE::INotify; use base qw(PVE::RESTHandler); @@ -37,6 +38,34 @@ my $cmddef; my $exename; my $cli_handler_class; +my $standard_mappings = { + 'pve-password' => { + name => 'password', + desc => '', + interactive => 1, + func => sub { + my ($value) = @_; + return $value if $value; + return PVE::PTY::get_confirmed_password(); + }, + }, +}; +sub get_standard_mapping { + my ($name, $base) = @_; + + my $std = $standard_mappings->{$name}; + die "no such standard mapping '$name'\n" if !$std; + + my $res = $base || {}; + + foreach my $opt (keys %$std) { + next if defined($res->{$opt}); + $res->{$opt} = $std->{$opt}; + } + + return $res; +} + my $assert_initialized = sub { my @caller = caller; die "$caller[0]:$caller[2] - not initialized\n" @@ -414,12 +443,12 @@ sub print_text_table { my $last_col = $formatopts->[$#{$formatopts}]; foreach my $col ( @$formatopts ) { - my ($key, $title, $cutoff, $default) = @$col{qw(key title cutoff default)}; + my ($key, $title, $cutoff) = @$col{qw(key title cutoff)}; $title //= $key; push @keys, $key; push @titles, $title; - $defaults{$key} = $default; + $defaults{$key} = $col->{default} // ''; # calculate maximal print width and cutoff my $titlelen = length($title); @@ -466,6 +495,8 @@ sub print_entry { sub print_api_list { my ($props_to_print, $data, $returninfo) = @_; + die "can only print array result" if $returninfo->{type} ne 'array'; + my $returnprops = $returninfo->{items}->{properties}; my $formatopts = [];