Add two overrides to avoid writing redundant information to the config file.
get_model_by_name is used to return a cpu config with default values filled out. Signed-off-by: Stefan Reiter <s.rei...@proxmox.com> --- v2 -> v3: * add validity checks to write_config PVE/QemuServer/CPUConfig.pm | 61 +++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/PVE/QemuServer/CPUConfig.pm b/PVE/QemuServer/CPUConfig.pm index 6e2fb49..d335733 100644 --- a/PVE/QemuServer/CPUConfig.pm +++ b/PVE/QemuServer/CPUConfig.pm @@ -157,6 +157,67 @@ sub type { return 'cpu-model'; } +sub parse_section_header { + my ($class, $line) = @_; + + my ($type, $sectionId, $errmsg, $config) = + $class->SUPER::parse_section_header($line); + + return undef if !$type; + return ($type, $sectionId, $errmsg, { + # to avoid duplicate model name in config file, parse id as cputype + cputype => $sectionId, + # models parsed from file are by definition always custom + 'built-in' => 0, + }); +} + +sub write_config { + my ($class, $filename, $cfg) = @_; + + for my $model (keys %{$cfg->{ids}}) { + my $model_conf = $cfg->{ids}->{$model}; + + die "internal error: tried saving custom cpumodel with cputype != cfg->ids entry\n" + if $model != $model_conf->{cputype}; + + die "internal error: tried saving custom cpumodel with built-in set\n" + if $model_conf->{'built-in'}; + + # models written to file must be custom anyway + delete $model_conf->{'built-in'}; + # saved in section header + delete $model_conf->{cputype}; + } + + $class->SUPER::write_config($filename, $cfg); +} + +# Use this to get a single model in the format described by $cpu_fmt. +# Fills in defaults from schema if value is not set in config. +# Returns undef for unknown $name. +sub get_model_by_name { + my ($conf, $name) = @_; + + my $entry = $conf->{ids}->{$name}; + return undef if !defined($entry); + + my $propList = $defaultData->{propertyList}; + + my $model = {}; + for my $property (keys %$propList) { + next if $property eq 'type'; + + if (my $value = $entry->{$property}) { + $model->{$property} = $value; + } elsif (my $default = $propList->{$property}->{default}) { + $model->{$property} = $default; + } + } + + return $model; +} + # Print a QEMU device node for a given VM configuration for hotplugging CPUs sub print_cpu_device { my ($conf, $id) = @_; -- 2.20.1 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel