[pve-devel] [PATCH v5 container 2/3] config: add strict parser

Fabian Grünbichler f.gruenbichler at proxmox.com
Wed Feb 9 14:07:32 CET 2022


as safeguard when migrating across clusters, which might have different
versions installed.

Signed-off-by: Fabian Grünbichler <f.gruenbichler at proxmox.com>
---

Notes:
    new in v5

 src/PVE/LXC/Config.pm | 22 ++++++++++++++++------
 1 file changed, 16 insertions(+), 6 deletions(-)

diff --git a/src/PVE/LXC/Config.pm b/src/PVE/LXC/Config.pm
index 6c2acd6..16739a8 100644
--- a/src/PVE/LXC/Config.pm
+++ b/src/PVE/LXC/Config.pm
@@ -877,7 +877,7 @@ for (my $i = 0; $i < $MAX_UNUSED_DISKS; $i++) {
 }
 
 sub parse_pct_config {
-    my ($filename, $raw) = @_;
+    my ($filename, $raw, $strict) = @_;
 
     return undef if !defined($raw);
 
@@ -887,6 +887,16 @@ sub parse_pct_config {
 	pending => {},
     };
 
+    my $handle_error = sub {
+	my ($msg) = @_;
+
+	if ($strict) {
+	    die $msg;
+	} else {
+	    warn $msg;
+	}
+    };
+
     $filename =~ m|/lxc/(\d+).conf$|
 	|| die "got strange filename '$filename'";
 
@@ -926,9 +936,9 @@ sub parse_pct_config {
 	    if ($validity eq 1) {
 		push @{$conf->{lxc}}, [$key, $value];
 	    } elsif (my $errmsg = $validity) {
-		warn "vm $vmid - $key: $errmsg\n";
+		$handle_error->("vm $vmid - $key: $errmsg\n");
 	    } else {
-		warn "vm $vmid - unable to parse config: $line\n";
+		$handle_error->("vm $vmid - unable to parse config: $line\n");
 	    }
 	} elsif ($line =~ m/^(description):\s*(.*\S)\s*$/) {
 	    $descr .= PVE::Tools::decode_text($2);
@@ -939,16 +949,16 @@ sub parse_pct_config {
 	    if ($section eq 'pending') {
 		$conf->{delete} = $value;
 	    } else {
-		warn "vm $vmid - property 'delete' is only allowed in [pve:pending]\n";
+		$handle_error->("vm $vmid - property 'delete' is only allowed in [pve:pending]\n");
 	    }
 	} elsif ($line =~ m/^([a-z][a-z_]*\d*):\s*(.+?)\s*$/) {
 	    my $key = $1;
 	    my $value = $2;
 	    eval { $value = PVE::LXC::Config->check_type($key, $value); };
-	    warn "vm $vmid - unable to parse value of '$key' - $@" if $@;
+	    $handle_error->("vm $vmid - unable to parse value of '$key' - $@") if $@;
 	    $conf->{$key} = $value;
 	} else {
-	    warn "vm $vmid - unable to parse config: $line\n";
+	    $handle_error->("vm $vmid - unable to parse config: $line\n");
 	}
     }
 
-- 
2.30.2






More information about the pve-devel mailing list