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 <f.ebner@proxmox.com>
This commit is contained in:
Fiona Ebner 2022-11-10 15:37:47 +01:00 committed by Thomas Lamprecht
parent 7060a39316
commit 5a2e333c9e
6 changed files with 80 additions and 14 deletions

View File

@ -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: {

View File

@ -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,

View File

@ -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,

View File

@ -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: {

View File

@ -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',

View File

@ -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');