From 5a2e333c9edbcd33f00f97ca65a6ecdecf1fb550 Mon Sep 17 00:00:00 2001 From: Fiona Ebner Date: Thu, 10 Nov 2022 15:37:47 +0100 Subject: [PATCH] ui: lxc/qemu: cpu edit: make cpuunits depend on node's cgroup version so that the default value and limits actually correspond to what will be used. Defaults to values for cgroup v2, because that is the more common scenario. Signed-off-by: Fiona Ebner --- www/manager6/lxc/CreateWizard.js | 8 ++++++++ www/manager6/lxc/ResourceEdit.js | 31 +++++++++++++++++++++++++----- www/manager6/lxc/Resources.js | 8 +++++++- www/manager6/qemu/CreateWizard.js | 8 ++++++++ www/manager6/qemu/HardwareView.js | 8 +++++++- www/manager6/qemu/ProcessorEdit.js | 31 +++++++++++++++++++++++------- 6 files changed, 80 insertions(+), 14 deletions(-) diff --git a/www/manager6/lxc/CreateWizard.js b/www/manager6/lxc/CreateWizard.js index 1f902c2c..0b82cc1c 100644 --- a/www/manager6/lxc/CreateWizard.js +++ b/www/manager6/lxc/CreateWizard.js @@ -8,6 +8,14 @@ Ext.define('PVE.lxc.CreateWizard', { storage: '', unprivileged: true, }, + formulas: { + cgroupMode: function(get) { + const nodeInfo = PVE.data.ResourceStore.getNodes().find( + node => node.node === get('nodename'), + ); + return nodeInfo ? nodeInfo['cgroup-mode'] : 2; + }, + }, }, cbindData: { diff --git a/www/manager6/lxc/ResourceEdit.js b/www/manager6/lxc/ResourceEdit.js index 42357d85..9f4f7e08 100644 --- a/www/manager6/lxc/ResourceEdit.js +++ b/www/manager6/lxc/ResourceEdit.js @@ -20,9 +20,17 @@ Ext.define('PVE.lxc.MemoryEdit', { Ext.define('PVE.lxc.CPUEdit', { extend: 'Proxmox.window.Edit', + alias: 'widget.pveLxcCPUEdit', + + viewModel: { + data: { + cgroupMode: 2, + }, + }, initComponent: function() { - var me = this; + let me = this; + me.getViewModel().set('cgroupMode', me.cgroupMode); Ext.apply(me, { subject: gettext('CPU'), @@ -35,6 +43,7 @@ Ext.define('PVE.lxc.CPUEdit', { }, }); +// The view model of the parent shoul contain a 'cgroupMode' variable (or params for v2 are used). Ext.define('PVE.lxc.CPUInputPanel', { extend: 'Proxmox.panel.InputPanel', alias: 'widget.pveLxcCPUInputPanel', @@ -43,11 +52,19 @@ Ext.define('PVE.lxc.CPUInputPanel', { insideWizard: false, + viewModel: { + formulas: { + cpuunitsDefault: (get) => get('cgroupMode') === 1 ? 1024 : 100, + cpuunitsMax: (get) => get('cgroupMode') === 1 ? 500000 : 10000, + }, + }, + onGetValues: function(values) { - var me = this; + let me = this; + let cpuunitsDefault = me.getViewModel().get('cpuunitsDefault'); PVE.Utils.delete_if_default(values, 'cpulimit', '0', me.insideWizard); - PVE.Utils.delete_if_default(values, 'cpuunits', '1024', me.insideWizard); + PVE.Utils.delete_if_default(values, 'cpuunits', `${cpuunitsDefault}`, me.insideWizard); return values; }, @@ -72,8 +89,12 @@ Ext.define('PVE.lxc.CPUInputPanel', { fieldLabel: gettext('CPU units'), value: '', minValue: 8, - maxValue: 500000, - emptyText: '1024', + maxValue: '10000', + emptyText: '100', + bind: { + emptyText: '{cpuunitsDefault}', + maxValue: '{cpuunitsMax}', + }, labelWidth: labelWidth, deleteEmpty: true, allowBlank: true, diff --git a/www/manager6/lxc/Resources.js b/www/manager6/lxc/Resources.js index 4b2ae95e..85112345 100644 --- a/www/manager6/lxc/Resources.js +++ b/www/manager6/lxc/Resources.js @@ -45,6 +45,12 @@ Ext.define('PVE.lxc.RessourceView', { var mpeditor = caps.vms['VM.Config.Disk'] ? 'PVE.lxc.MountPointEdit' : undefined; + const nodeInfo = PVE.data.ResourceStore.getNodes().find(node => node.node === nodename); + let cpuEditor = { + xtype: 'pveLxcCPUEdit', + cgroupMode: nodeInfo['cgroup-mode'], + }; + var rows = { memory: { header: gettext('Memory'), @@ -68,7 +74,7 @@ Ext.define('PVE.lxc.RessourceView', { }, cores: { header: gettext('Cores'), - editor: caps.vms['VM.Config.CPU'] ? 'PVE.lxc.CPUEdit' : undefined, + editor: caps.vms['VM.Config.CPU'] ? cpuEditor : undefined, defaultValue: '', tdCls: 'pmx-itype-icon-processor', group: 3, diff --git a/www/manager6/qemu/CreateWizard.js b/www/manager6/qemu/CreateWizard.js index a785a882..a65067ea 100644 --- a/www/manager6/qemu/CreateWizard.js +++ b/www/manager6/qemu/CreateWizard.js @@ -10,6 +10,14 @@ Ext.define('PVE.qemu.CreateWizard', { scsihw: '', }, }, + formulas: { + cgroupMode: function(get) { + const nodeInfo = PVE.data.ResourceStore.getNodes().find( + node => node.node === get('nodename'), + ); + return nodeInfo ? nodeInfo['cgroup-mode'] : 2; + }, + }, }, cbindData: { diff --git a/www/manager6/qemu/HardwareView.js b/www/manager6/qemu/HardwareView.js index 96fd37e9..6b05d7a5 100644 --- a/www/manager6/qemu/HardwareView.js +++ b/www/manager6/qemu/HardwareView.js @@ -59,6 +59,12 @@ Ext.define('PVE.qemu.HardwareView', { let isCloudInitKey = v => v && v.toString().match(/vm-.*-cloudinit/); + const nodeInfo = PVE.data.ResourceStore.getNodes().find(node => node.node === nodename); + let processorEditor = { + xtype: 'pveQemuProcessorEdit', + cgroupMode: nodeInfo['cgroup-mode'], + }; + let rows = { memory: { header: gettext('Memory'), @@ -93,7 +99,7 @@ Ext.define('PVE.qemu.HardwareView', { header: gettext('Processors'), never_delete: true, editor: caps.vms['VM.Config.CPU'] || caps.vms['VM.Config.HWType'] - ? 'PVE.qemu.ProcessorEdit' : undefined, + ? processorEditor : undefined, tdCls: 'pve-itype-icon-cpu', group: 3, defaultValue: '1', diff --git a/www/manager6/qemu/ProcessorEdit.js b/www/manager6/qemu/ProcessorEdit.js index fe67c7f5..8e9f94aa 100644 --- a/www/manager6/qemu/ProcessorEdit.js +++ b/www/manager6/qemu/ProcessorEdit.js @@ -1,3 +1,4 @@ +// The view model of the parent shoul contain a 'cgroupMode' variable (or params for v2 are used). Ext.define('PVE.qemu.ProcessorInputPanel', { extend: 'Proxmox.panel.InputPanel', alias: 'widget.pveQemuProcessorPanel', @@ -13,6 +14,9 @@ Ext.define('PVE.qemu.ProcessorInputPanel', { }, formulas: { totalCoreCount: get => get('socketCount') * get('coreCount'), + cpuunitsDefault: (get) => get('cgroupMode') === 1 ? 1024 : 100, + cpuunitsMin: (get) => get('cgroupMode') === 1 ? 2 : 1, + cpuunitsMax: (get) => get('cgroupMode') === 1 ? 262144 : 10000, }, }, @@ -21,7 +25,8 @@ Ext.define('PVE.qemu.ProcessorInputPanel', { }, onGetValues: function(values) { - var me = this; + let me = this; + let cpuunitsDefault = me.getViewModel().get('cpuunitsDefault'); if (Array.isArray(values.delete)) { values.delete = values.delete.join(','); @@ -39,7 +44,7 @@ Ext.define('PVE.qemu.ProcessorInputPanel', { } PVE.Utils.delete_if_default(values, 'cpulimit', '0', me.insideWizard); - PVE.Utils.delete_if_default(values, 'cpuunits', '1024', me.insideWizard); + PVE.Utils.delete_if_default(values, 'cpuunits', `${cpuunitsDefault}`, me.insideWizard); // build the cpu options: me.cpu.cputype = values.cputype; @@ -210,11 +215,15 @@ Ext.define('PVE.qemu.ProcessorInputPanel', { xtype: 'proxmoxintegerfield', name: 'cpuunits', fieldLabel: gettext('CPU units'), - // FIXME: change to [1, 1000] once cgroup v1 support gets removed (PVE 8 ?) - minValue: 2, - maxValue: 262144, + minValue: '1', + maxValue: '10000', value: '', - emptyText: '1024', + emptyText: '100', + bind: { + minValue: '{cpuunitsMin}', + maxValue: '{cpuunitsMax}', + emptyText: '{cpuunitsDefault}', + }, deleteEmpty: true, allowBlank: true, }, @@ -239,11 +248,19 @@ Ext.define('PVE.qemu.ProcessorInputPanel', { Ext.define('PVE.qemu.ProcessorEdit', { extend: 'Proxmox.window.Edit', + alias: 'widget.pveQemuProcessorEdit', width: 700, + viewModel: { + data: { + cgroupMode: 2, + }, + }, + initComponent: function() { - var me = this; + let me = this; + me.getViewModel().set('cgroupMode', me.cgroupMode); var ipanel = Ext.create('PVE.qemu.ProcessorInputPanel');