}
my $handle_cmd = sub {
- my ($def, $cmdname, $cmd, $args, $pwcallback, $podfn, $preparefunc) = @_;
+ my ($def, $cmdname, $cmd, $args, $pwcallback, $podfn, $preparefunc, $stringfilemap) = @_;
$cmddef = $def;
$exename = $cmdname;
}
my $prefix = "$exename $cmd";
- my $res = $class->cli_handler($prefix, $name, \@ARGV, $arg_param, $uri_param, $pwcallback);
+ my $res = $class->cli_handler($prefix, $name, \@ARGV, $arg_param, $uri_param, $pwcallback, $stringfilemap);
&$outsub($res) if $outsub;
};
my $handle_simple_cmd = sub {
- my ($def, $args, $pwcallback, $podfn, $preparefunc) = @_;
+ my ($def, $args, $pwcallback, $podfn, $preparefunc, $stringfilemap) = @_;
my ($class, $name, $arg_param, $uri_param, $outsub) = @{$def};
die "no class specified" if !$class;
&$preparefunc() if $preparefunc;
- my $res = $class->cli_handler($name, $name, \@ARGV, $arg_param, $uri_param, $pwcallback);
+ my $res = $class->cli_handler($name, $name, \@ARGV, $arg_param, $uri_param, $pwcallback, $stringfilemap);
&$outsub($res) if $outsub;
};
my $no_init = $params{no_init};
my $pwcallback = $class->can('read_password');
+ my $stringfilemap = $class->can('string_param_file_mapping');
$exename = &$get_exe_name($class);
my $def = ${"${class}::cmddef"};
if (ref($def) eq 'ARRAY') {
- &$handle_simple_cmd($def, \@ARGV, $pwcallback, $podfn, $preparefunc);
+ &$handle_simple_cmd($def, \@ARGV, $pwcallback, $podfn, $preparefunc, $stringfilemap);
} else {
$cmddef = $def;
my $cmd = shift @ARGV;
- &$handle_cmd($cmddef, $exename, $cmd, \@ARGV, $pwcallback, $podfn, $preparefunc);
+ &$handle_cmd($cmddef, $exename, $cmd, \@ARGV, $pwcallback, $podfn, $preparefunc, $stringfilemap);
}
exit 0;
return $raw;
}
+my $replace_file_names_with_contents = sub {
+ my ($param, $mapping) = @_;
+
+ if ($mapping) {
+ foreach my $elem ( @$mapping ) {
+ $param->{$elem} = PVE::Tools::file_get_contents($param->{$elem})
+ if defined($param->{$elem});
+ }
+ }
+
+ return $param;
+};
+
sub cli_handler {
- my ($self, $prefix, $name, $args, $arg_param, $fixed_param, $pwcallback) = @_;
+ my ($self, $prefix, $name, $args, $arg_param, $fixed_param, $pwcallback, $stringfilemap) = @_;
my $info = $self->map_method_by_name($name);
my $res;
eval {
my $param = PVE::JSONSchema::get_options($info->{parameters}, $args, $arg_param, $fixed_param, $pwcallback);
+ &$replace_file_names_with_contents($param, &$stringfilemap($name))
+ if defined($stringfilemap);
$res = $self->handle($info, $param);
};
if (my $err = $@) {