Turn CPUConfig into a SectionConfig with parsing/writing support for custom CPU models. IO is handled using cfs.
Namespacing will be provided using "custom-" prefix for custom model names (in VM config only, cpu-models.conf will contain unprefixed names). Signed-off-by: Stefan Reiter <s.rei...@proxmox.com> --- Depends on updated pve-cluster. PVE/QemuServer/CPUConfig.pm | 46 ++++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/PVE/QemuServer/CPUConfig.pm b/PVE/QemuServer/CPUConfig.pm index 86febe8..be16eba 100644 --- a/PVE/QemuServer/CPUConfig.pm +++ b/PVE/QemuServer/CPUConfig.pm @@ -4,15 +4,25 @@ use strict; use warnings; use PVE::JSONSchema; +use PVE::Cluster qw(cfs_register_file cfs_read_file); use PVE::QemuServer::Helpers qw(min_version); -use base qw(Exporter); +use base qw(PVE::SectionConfig Exporter); our @EXPORT_OK = qw( print_cpu_device get_cpu_options ); +my $default_filename = "cpu-models.conf"; +cfs_register_file($default_filename, + sub { PVE::QemuServer::CPUConfig->parse_config(@_); }, + sub { PVE::QemuServer::CPUConfig->write_config(@_); }); + +sub load_custom_model_conf { + return cfs_read_file($default_filename); +} + my $cpu_vendor_list = { # Intel CPUs 486 => 'GenuineIntel', @@ -84,11 +94,20 @@ my $cpu_flag = qr/[+-](@{[join('|', @supported_cpu_flags)]})/; our $cpu_fmt = { cputype => { - description => "Emulated CPU type.", + description => "Emulated CPU type. Can be default or custom name (custom model names must be prefixed with 'custom-').", type => 'string', - enum => [ sort { "\L$a" cmp "\L$b" } keys %$cpu_vendor_list ], + format_description => 'string', default => 'kvm64', default_key => 1, + optional => 1, + }, + 'reported-model' => { + description => "CPU model and vendor to report to the guest. Must be a QEMU/KVM supported model." + . " Only valid for custom CPU model definitions, default models will always report themselves to the guest OS.", + type => 'string', + enum => [ sort { lc("$a") cmp lc("$b") } keys %$cpu_vendor_list ], + default => 'kvm64', + optional => 1, }, hidden => { description => "Do not identify as a KVM virtual machine.", @@ -114,6 +133,24 @@ our $cpu_fmt = { }, }; +# Section config settings +my $defaultData = { + # shallow copy, since SectionConfig modifies propertyList internally + propertyList => { %$cpu_fmt }, +}; + +sub private { + return $defaultData; +} + +sub options { + return { %$cpu_fmt }; +} + +sub type { + return 'cpu-model'; +} + # Print a QEMU device node for a given VM configuration for hotplugging CPUs sub print_cpu_device { my ($conf, $id) = @_; @@ -229,4 +266,7 @@ sub add_hyperv_enlightenments { } } +__PACKAGE__->register(); +__PACKAGE__->init(); + 1; -- 2.20.1 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel