X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=src%2FPVE%2FJSONSchema.pm;h=c925ecbad664164e4670d51e2a5002fa48d0725e;hb=5851be88ad2a1187c949045541b37c442cc18221;hp=d9d254af6e886df4168eed6113c28e1d63d4d8c3;hpb=3c4d612a70d9521345a54f520f183c8551ff3ad4;p=pve-common.git diff --git a/src/PVE/JSONSchema.pm b/src/PVE/JSONSchema.pm index d9d254a..c925ecb 100644 --- a/src/PVE/JSONSchema.pm +++ b/src/PVE/JSONSchema.pm @@ -42,7 +42,7 @@ sub get_standard_option { my $res = $base || {}; foreach my $opt (keys %$std) { - next if $res->{$opt}; + next if defined($res->{$opt}); $res->{$opt} = $std->{$opt}; } @@ -83,6 +83,13 @@ PVE::JSONSchema::register_standard_option('pve-config-digest', { maxLength => 40, # sha1 hex digest lenght is 40 }); +PVE::JSONSchema::register_standard_option('extra-args', { + description => "Extra arguments as array", + type => 'array', + items => { type => 'string' }, + optional => 1 +}); + my $format_list = {}; sub register_format { @@ -1074,16 +1081,24 @@ sub get_options { raise("unable to parse option\n", code => HTTP_BAD_REQUEST) if !Getopt::Long::GetOptionsFromArray($args, $opts, @getopt); - if (my $acount = scalar(@$args)) { + if (@$args) { if ($list_param) { $opts->{$list_param} = $args; $args = []; } elsif (ref($arg_param)) { - raise("wrong number of arguments\n", code => HTTP_BAD_REQUEST) - if scalar(@$arg_param) != $acount; - foreach my $p (@$arg_param) { - $opts->{$p} = shift @$args; + foreach my $arg_name (@$arg_param) { + if ($opts->{'extra-args'}) { + raise("internal error: extra-args must be the last argument\n", code => HTTP_BAD_REQUEST); + } + if ($arg_name eq 'extra-args') { + $opts->{'extra-args'} = $args; + $args = []; + next; + } + raise("not enough arguments\n", code => HTTP_BAD_REQUEST) if !@$args; + $opts->{$arg_name} = shift @$args; } + raise("too many arguments\n", code => HTTP_BAD_REQUEST) if @$args; } else { raise("too many arguments\n", code => HTTP_BAD_REQUEST) if scalar(@$args) != 0;