SectionConfig: parse_config: add errors to result master
authorFabian Ebner <f.ebner@proxmox.com>
Mon, 21 Dec 2020 13:48:19 +0000 (14:48 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Mon, 21 Dec 2020 14:48:16 +0000 (15:48 +0100)
so that callers can know about them. This is useful in places where we'd rather
abort then continue with a faulty configuration. For example, when reading the
storage configuration before executing a backup job.

Originally-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Signed-off-by: Fabian Ebner <f.ebner@proxmox.com>
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
src/PVE/SectionConfig.pm

index b46b59e..af0af03 100644 (file)
@@ -311,6 +311,7 @@ sub parse_config {
        }
     };
 
+    my $errors = [];
     while (@lines) {
        my $line = $nextline->();
        next if !$line;
@@ -349,7 +350,15 @@ sub parse_config {
                        die "duplicate attribute\n" if defined($config->{$k});
                        $config->{$k} = $plugin->check_value($type, $k, $v, $sectionId);
                    };
-                   warn "$errprefix (section '$sectionId') - unable to parse value of '$k': $@" if $@;
+                   if (my $err = $@) {
+                       warn "$errprefix (section '$sectionId') - unable to parse value of '$k': $err";
+                       push @$errors, {
+                           context => $errprefix,
+                           section => $sectionId,
+                           key => $k,
+                           err => $err,
+                       };
+                   }
 
                } else {
                    warn "$errprefix (section '$sectionId') - ignore config line: $line\n";
@@ -368,8 +377,12 @@ sub parse_config {
        }
     }
 
-
-    my $cfg = { ids => $ids, order => $order, digest => $digest};
+    my $cfg = {
+       ids => $ids,
+       order => $order,
+       digest => $digest
+    };
+    $cfg->{errors} = $errors if scalar(@$errors) > 0;
 
     return $cfg;
 }