]> git.proxmox.com Git - pve-common.git/blobdiff - src/PVE/JSONSchema.pm
allow Regexp objects for strings in the schema
[pve-common.git] / src / PVE / JSONSchema.pm
index 5131e4dc07b7ed27c855950c681e4c81b79fffc5..b53736e4c63b0ec9975e2b385defcb71229e8597 100644 (file)
@@ -229,7 +229,9 @@ my $ipv4_mask_hash = {
     '255.255.255.224' => 27,
     '255.255.255.240' => 28,
     '255.255.255.248' => 29,
-    '255.255.255.252' => 30
+    '255.255.255.252' => 30,
+    '255.255.255.254' => 31,
+    '255.255.255.255' => 32,
 };
 
 register_format('ipv4mask', \&pve_verify_ipv4mask);
@@ -643,6 +645,9 @@ sub check_type {
                return undef;
            }
            return 1;
+       } elsif ($type eq 'string' && $vt eq 'Regexp') {
+           # qr// regexes can be used as strings and make sense for format=regex
+           return 1;
        } else {
            if ($vt) {
                add_error($errors, $path, "type check ('$type') failed - got $vt");
@@ -1601,7 +1606,7 @@ sub print_property_string {
     my $done = { map { $_ => 1 } @$skip };
 
     my $cond_add_key = sub {
-       my ($key) = @_;
+       my ($key, $isdefault) = @_;
 
        return if $done->{$key}; # avoid duplicates
 
@@ -1633,11 +1638,15 @@ sub print_property_string {
        die "internal error" if defined($phash->{alias});
 
        my $value_str = &$format_value($key, $value, $phash->{format});
-       &$add_option_string("$key=${value_str}");
+       if ($isdefault) {
+           &$add_option_string($value_str);
+       } else {
+           &$add_option_string("$key=${value_str}");
+       }
     };
 
     # add default key first
-    &$cond_add_key($default_key) if defined($default_key);
+    &$cond_add_key($default_key, 1) if defined($default_key);
 
     # add required keys first
     foreach my $key (sort keys %$data) {