On October 7, 2019 2:47 pm, Stefan Reiter wrote: > 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';
while this seems to work, IMHO it's would be better to merge both 'use base' into a single statement.. > 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 > > _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel