mirror of
https://git.proxmox.com/git/qemu-server
synced 2025-06-22 18:57:50 +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 {
|
sub parse_vm_config {
|
||||||
my ($filename, $raw) = @_;
|
my ($filename, $raw, $strict) = @_;
|
||||||
|
|
||||||
return if !defined($raw);
|
return if !defined($raw);
|
||||||
|
|
||||||
@ -2322,6 +2322,16 @@ sub parse_vm_config {
|
|||||||
pending => {},
|
pending => {},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
my $handle_error = sub {
|
||||||
|
my ($msg) = @_;
|
||||||
|
|
||||||
|
if ($strict) {
|
||||||
|
die $msg;
|
||||||
|
} else {
|
||||||
|
warn $msg;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
$filename =~ m|/qemu-server/(\d+)\.conf$|
|
$filename =~ m|/qemu-server/(\d+)\.conf$|
|
||||||
|| die "got strange filename '$filename'";
|
|| die "got strange filename '$filename'";
|
||||||
|
|
||||||
@ -2376,14 +2386,14 @@ sub parse_vm_config {
|
|||||||
if ($section eq 'pending') {
|
if ($section eq 'pending') {
|
||||||
$conf->{delete} = $value; # we parse this later
|
$conf->{delete} = $value; # we parse this later
|
||||||
} else {
|
} 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*$/) {
|
} elsif ($line =~ m/^([a-z][a-z_]*\d*):\s*(.+?)\s*$/) {
|
||||||
my $key = $1;
|
my $key = $1;
|
||||||
my $value = $2;
|
my $value = $2;
|
||||||
eval { $value = check_type($key, $value); };
|
eval { $value = check_type($key, $value); };
|
||||||
if ($@) {
|
if ($@) {
|
||||||
warn "vm $vmid - unable to parse value of '$key' - $@";
|
$handle_error->("vm $vmid - unable to parse value of '$key' - $@");
|
||||||
} else {
|
} else {
|
||||||
$key = 'ide2' if $key eq 'cdrom';
|
$key = 'ide2' if $key eq 'cdrom';
|
||||||
my $fmt = $confdesc->{$key}->{format};
|
my $fmt = $confdesc->{$key}->{format};
|
||||||
@ -2393,7 +2403,7 @@ sub parse_vm_config {
|
|||||||
$v->{file} = $volid;
|
$v->{file} = $volid;
|
||||||
$value = print_drive($v);
|
$value = print_drive($v);
|
||||||
} else {
|
} else {
|
||||||
warn "vm $vmid - unable to parse value of '$key'\n";
|
$handle_error->("vm $vmid - unable to parse value of '$key'\n");
|
||||||
next;
|
next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2401,7 +2411,7 @@ sub parse_vm_config {
|
|||||||
$conf->{$key} = $value;
|
$conf->{$key} = $value;
|
||||||
}
|
}
|
||||||
} else {
|
} 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