X-Git-Url: https://git.proxmox.com/?p=pve-common.git;a=blobdiff_plain;f=src%2FPVE%2FSectionConfig.pm;h=f6646f3398a1ec69e9e6c3ae1a71025641d4fbc4;hp=d4d2ed57e43437db4a73b231862f25452d07d2fc;hb=a3530f55edbec70e6c428a0924f89a6906a44d41;hpb=516dfb55e1d1e542cafe72c09798f658db950fd2 diff --git a/src/PVE/SectionConfig.pm b/src/PVE/SectionConfig.pm index d4d2ed5..f6646f3 100644 --- a/src/PVE/SectionConfig.pm +++ b/src/PVE/SectionConfig.pm @@ -52,11 +52,52 @@ sub createSchema { my $pdata = $class->private(); my $propertyList = $pdata->{propertyList}; + my $plugins = $pdata->{plugins}; + + my $props = {}; + + my $copy_property = sub { + my ($src) = @_; + + my $res = {}; + foreach my $k (keys %$src) { + $res->{$k} = $src->{$k}; + } + + return $res; + }; + + foreach my $p (keys %$propertyList) { + next if $p eq 'type'; + if (!$propertyList->{$p}->{optional}) { + $props->{$p} = $propertyList->{$p}; + next; + } + + my $required = 1; + + my $copts = $class->options(); + $required = 0 if defined($copts->{$p}) && $copts->{$p}->{optional}; + + foreach my $t (keys %$plugins) { + my $opts = $pdata->{options}->{$t} || {}; + $required = 0 if !defined($opts->{$p}) || $opts->{$p}->{optional}; + } + + if ($required) { + # make a copy, because we modify the optional property + my $res = &$copy_property($propertyList->{$p}); + $res->{optional} = 0; + $props->{$p} = $res; + } else { + $props->{$p} = $propertyList->{$p}; + } + } return { type => "object", additionalProperties => 0, - properties => $propertyList, + properties => $props, }; }