ui: CPUModelSelector: use API call for store

CPU models are retrieved from the new /nodes/X/cpu call and ordered by
vendor to approximate the previous sort order (less change for accustomed
users).

With this, custom CPU models are now selectable via the GUI.

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
This commit is contained in:
Stefan Reiter 2020-05-04 12:58:42 +02:00 committed by Thomas Lamprecht
parent b839766e7d
commit 4546808caa
2 changed files with 82 additions and 139 deletions

View File

@ -1455,6 +1455,20 @@ Ext.define('PVE.Utils', { utilities: {
} }
}); });
}, },
cpu_vendor_map: {
'default': 'QEMU',
'AuthenticAMD': 'AMD',
'GenuineIntel': 'Intel'
},
cpu_vendor_order: {
"AMD": 1,
"Intel": 2,
"QEMU": 3,
"Host": 4,
"_default_": 5, // includes custom models
},
}, },
singleton: true, singleton: true,

View File

@ -1,9 +1,19 @@
Ext.define('PVE.data.CPUModel', {
extend: 'Ext.data.Model',
fields: [
{name: 'name'},
{name: 'vendor'},
{name: 'custom'},
{name: 'displayname'}
]
});
Ext.define('PVE.form.CPUModelSelector', { Ext.define('PVE.form.CPUModelSelector', {
extend: 'Proxmox.form.ComboGrid', extend: 'Proxmox.form.ComboGrid',
alias: ['widget.CPUModelSelector'], alias: ['widget.CPUModelSelector'],
valueField: 'value', valueField: 'name',
displayField: 'value', displayField: 'displayname',
emptyText: Proxmox.Utils.defaultText + ' (kvm64)', emptyText: Proxmox.Utils.defaultText + ' (kvm64)',
allowBlank: true, allowBlank: true,
@ -19,157 +29,76 @@ Ext.define('PVE.form.CPUModelSelector', {
columns: [ columns: [
{ {
header: gettext('Model'), header: gettext('Model'),
dataIndex: 'value', dataIndex: 'displayname',
hideable: false, hideable: false,
sortable: true, sortable: true,
flex: 2 flex: 3
}, },
{ {
header: gettext('Vendor'), header: gettext('Vendor'),
dataIndex: 'vendor', dataIndex: 'vendor',
hideable: false, hideable: false,
sortable: true, sortable: true,
flex: 1 flex: 2
} }
], ],
width: 320 width: 360
}, },
store: { store: {
fields: [ 'value', 'vendor' ], autoLoad: true,
data: [ model: 'PVE.data.CPUModel',
{ proxy: {
value: 'athlon', type: 'proxmox',
vendor: 'AMD' url: '/api2/json/nodes/localhost/cpu'
}, },
sorters: [
{ {
value: 'phenom', sorterFn: function(recordA, recordB) {
vendor: 'AMD' let a = recordA.data;
}, let b = recordB.data;
{
value: 'Opteron_G1', let vendorOrder = PVE.Utils.cpu_vendor_order;
vendor: 'AMD' let orderA = vendorOrder[a.vendor] || vendorOrder['_default_'];
}, let orderB = vendorOrder[b.vendor] || vendorOrder['_default_'];
{
value: 'Opteron_G2', if (orderA > orderB) {
vendor: 'AMD' return 1;
}, } else if (orderA < orderB) {
{ return -1;
value: 'Opteron_G3', }
vendor: 'AMD'
}, // Within same vendor, sort alphabetically
{ return a.name.localeCompare(b.name);
value: 'Opteron_G4', },
vendor: 'AMD' direction: 'ASC'
}, }
{ ],
value: 'Opteron_G5', listeners: {
vendor: 'AMD' load: function(store, records, success) {
}, if (success) {
{ records.forEach(rec => {
value: 'EPYC', rec.data.displayname = rec.data.name.replace(/^custom-/, '');
vendor: 'AMD'
}, let vendor = rec.data.vendor;
{
value: '486', if (rec.data.name === 'host') {
vendor: 'Intel' vendor = 'Host';
}, }
{
value: 'core2duo', // We receive vendor names as given to QEMU as CPUID
vendor: 'Intel' vendor = PVE.Utils.cpu_vendor_map[vendor] || vendor;
},
{ if (rec.data.custom) {
value: 'coreduo', vendor = gettext('Custom') + ` (${vendor})`;
vendor: 'Intel' }
},
{ rec.data.vendor = vendor;
value: 'pentium', });
vendor: 'Intel'
}, store.sort();
{ }
value: 'pentium2', }
vendor: 'Intel'
},
{
value: 'pentium3',
vendor: 'Intel'
},
{
value: 'Conroe',
vendor: 'Intel'
},
{
value: 'Penryn',
vendor: 'Intel'
},
{
value: 'Nehalem',
vendor: 'Intel'
},
{
value: 'Westmere',
vendor: 'Intel'
},
{
value: 'SandyBridge',
vendor: 'Intel'
},
{
value: 'IvyBridge',
vendor: 'Intel'
},
{
value: 'Haswell',
vendor: 'Intel'
},
{
value: 'Haswell-noTSX',
vendor: 'Intel'
},
{
value: 'Broadwell',
vendor: 'Intel'
},
{
value: 'Broadwell-noTSX',
vendor: 'Intel'
},
{
value: 'Skylake-Client',
vendor: 'Intel'
},
{
value: 'Skylake-Server',
vendor: 'Intel'
},
{
value: 'Cascadelake-Server',
vendor: 'Intel'
},
{
value: 'KnightsMill',
vendor: 'Intel'
},
{
value: 'kvm32',
vendor: 'QEMU'
},
{
value: 'kvm64',
vendor: 'QEMU'
},
{
value: 'qemu32',
vendor: 'QEMU'
},
{
value: 'qemu64',
vendor: 'QEMU'
},
{
value: 'host',
vendor: 'Host'
} }
]
} }
}); });