From ad5812d8fb304f1025c32f3d3e56b0c402a5e66c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Fabian=20Gr=C3=BCnbichler?= Date: Wed, 9 Feb 2022 14:07:39 +0100 Subject: [PATCH] parse_config: optional strict mode MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit when passing a config from one cluster to another, we want to be strict when parsing - it's better to fail the migration early and upgrade the target node instead of failing the migration later (when significant work for transferring disks and/or state has already been done) or not at all, but silently lose config settings that the target doesn't understand. this also might be helpful in other cases - e.g. when restoring from a backup. Signed-off-by: Fabian Grünbichler --- PVE/QemuServer.pm | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index 8893f86e..2b7ac404 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -2312,7 +2312,7 @@ sub destroy_vm { } sub parse_vm_config { - my ($filename, $raw) = @_; + my ($filename, $raw, $strict) = @_; return if !defined($raw); @@ -2322,6 +2322,16 @@ sub parse_vm_config { pending => {}, }; + my $handle_error = sub { + my ($msg) = @_; + + if ($strict) { + die $msg; + } else { + warn $msg; + } + }; + $filename =~ m|/qemu-server/(\d+)\.conf$| || die "got strange filename '$filename'"; @@ -2376,14 +2386,14 @@ sub parse_vm_config { if ($section eq 'pending') { $conf->{delete} = $value; # we parse this later } else { - warn "vm $vmid - propertry 'delete' is only allowed in [PENDING]\n"; + $handle_error->("vm $vmid - property 'delete' is only allowed in [PENDING]\n"); } } elsif ($line =~ m/^([a-z][a-z_]*\d*):\s*(.+?)\s*$/) { my $key = $1; my $value = $2; eval { $value = check_type($key, $value); }; if ($@) { - warn "vm $vmid - unable to parse value of '$key' - $@"; + $handle_error->("vm $vmid - unable to parse value of '$key' - $@"); } else { $key = 'ide2' if $key eq 'cdrom'; my $fmt = $confdesc->{$key}->{format}; @@ -2393,7 +2403,7 @@ sub parse_vm_config { $v->{file} = $volid; $value = print_drive($v); } else { - warn "vm $vmid - unable to parse value of '$key'\n"; + $handle_error->("vm $vmid - unable to parse value of '$key'\n"); next; } } @@ -2401,7 +2411,7 @@ sub parse_vm_config { $conf->{$key} = $value; } } else { - warn "vm $vmid - unable to parse config: $line\n"; + $handle_error->("vm $vmid - unable to parse config: $line\n"); } } -- 2.39.5