From 4b32ef6e2cc0c6c9719b2ef160bd51b1dd0f7683 Mon Sep 17 00:00:00 2001 From: Fabian Ebner Date: Mon, 21 Dec 2020 14:48:19 +0100 Subject: [PATCH] SectionConfig: parse_config: add errors to result 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 Signed-off-by: Fabian Ebner Signed-off-by: Thomas Lamprecht --- src/PVE/SectionConfig.pm | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/src/PVE/SectionConfig.pm b/src/PVE/SectionConfig.pm index b46b59e..af0af03 100644 --- a/src/PVE/SectionConfig.pm +++ b/src/PVE/SectionConfig.pm @@ -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; }