mirror of
https://git.proxmox.com/git/qemu-server
synced 2025-05-01 09:33:24 +00:00
parse_config: optional strict mode
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.gruenbichler@proxmox.com>
This commit is contained in:
parent
dbdcc5cde0
commit
ad5812d8fb
@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user