my $res = $base || {};
foreach my $opt (keys %$std) {
- next if $res->{$opt};
+ next if defined($res->{$opt});
$res->{$opt} = $std->{$opt};
}
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 {
sub pve_verify_email {
my ($email, $noerr) = @_;
- # we use same regex as extjs Ext.form.VTypes.email
- if ($email !~ /^(\w+)([\-+.][\w]+)*@(\w[\-\w]*\.){1,5}([A-Za-z]){2,6}$/) {
+ # we use same regex as in Utils.js
+ if ($email !~ /^(\w+)([\-+.][\w]+)*@(\w[\-\w]*\.){1,5}([A-Za-z]){2,63}$/) {
return undef if $noerr;
die "value does not look like a valid email address\n";
}
optional => 1,
description => "This indicates the default for the instance property."
},
+ completion => {
+ type => 'coderef',
+ description => "Bash completion function. This function should return a list of possible values.",
+ optional => 1,
+ },
disallow => {
type => "object",
optional => 1,
description => "JSON Schema for parameters.",
optional => 1,
},
+ formatter => {
+ type => 'object',
+ description => "Used to store page formatter information (set by PVE::RESTHandler->register_page_formatter).",
+ optional => 1,
+ },
returns => {
type => 'object',
description => "JSON Schema for return value.",
}
}
+ Getopt::Long::Configure('prefix_pattern=(--|-)');
+
my $opts = {};
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;
if ($pd->{format} =~ m/-list/) {
# allow --vmid 100 --vmid 101 and --vmid 100,101
# allow --dow mon --dow fri and --dow mon,fri
- $opts->{$p} = join(",", @{$opts->{$p}});
+ $opts->{$p} = join(",", @{$opts->{$p}}) if ref($opts->{$p}) eq 'ARRAY';
} elsif ($pd->{format} =~ m/-alist/) {
# we encode array as \0 separated strings
# Note: CGI.pm also use this encoding