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 <f.gruenbich...@proxmox.com> --- Notes: v3: new PVE/QemuServer.pm | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index f5beb1b..be88385 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -2329,7 +2329,7 @@ sub destroy_vm { } sub parse_vm_config { - my ($filename, $raw) = @_; + my ($filename, $raw, $strict) = @_; return if !defined($raw); @@ -2339,6 +2339,16 @@ sub parse_vm_config { pending => {}, }; + my $handle_error = sub { + my ($msg) = @_; + + if ($strict) { + warn $msg; + } else { + die $msg; + } + }; + $filename =~ m|/qemu-server/(\d+)\.conf$| || die "got strange filename '$filename'"; @@ -2393,14 +2403,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}; @@ -2410,7 +2420,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; } } @@ -2418,7 +2428,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.30.2 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel