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> --- v4: Use "custom-" prefix instead of distinct property for namespacing as suggested by Thomas. Left the v3 message below, but this fixes that issue. v3: I changed the "custom" property to "built-in" and negated its uses, as Thomas suggested. I'm not sure I like this too much compared to "custom" (with "built-in", you have to explicitly set a value in the config to 0, which looks weird - basically "unsetting" something to use a feature), but I'm very much fine with either. PVE/QemuServer/CPUConfig.pm | 46 +++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/PVE/QemuServer/CPUConfig.pm b/PVE/QemuServer/CPUConfig.pm index c55128f..6ea5811 100644 --- a/PVE/QemuServer/CPUConfig.pm +++ b/PVE/QemuServer/CPUConfig.pm @@ -4,6 +4,8 @@ use strict; use warnings; use PVE::JSONSchema; +use PVE::Cluster qw(cfs_register_file cfs_read_file); +use base qw(PVE::SectionConfig); use base 'Exporter'; our @EXPORT_OK = qw( @@ -12,6 +14,15 @@ get_cpu_options qemu_machine_feature_enabled ); +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', @@ -83,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.", @@ -113,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) = @_; @@ -251,4 +289,8 @@ sub qemu_machine_feature_enabled { $current_minor >= $version_minor); } + +__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