* [pve-devel] [PATCH pve-manager 0/2] change unit of memory for ct/vm @ 2023-07-27 10:30 Noel Ullreich 2023-07-27 10:30 ` [pve-devel] [PATCH pve-manager 1/2] ui: fix #3760: change unit of memory of a VM Noel Ullreich 2023-07-27 10:30 ` [pve-devel] [PATCH pve-manager 2/2] ui: fix: change units of memory/swap for containers Noel Ullreich 0 siblings, 2 replies; 4+ messages in thread From: Noel Ullreich @ 2023-07-27 10:30 UTC (permalink / raw) To: pve-devel WORK IN PROGRESS! Today is my last day and I wanted to send what I have. This patch utilizes the changes in `BandwidthSelector.js` (see https://lists.proxmox.com/pipermail/pve-devel/2023-July/058538.html) to streamline the implementation of a unit-changing widget. Noel Ullreich (2): ui: fix #3760: change unit of memory of a VM ui: fix: change units of memory/swap for containers www/manager6/lxc/ResourceEdit.js | 59 ++++++++++++++------- www/manager6/qemu/MemoryEdit.js | 91 +++++++++++++------------------- 2 files changed, 77 insertions(+), 73 deletions(-) -- 2.39.2 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [pve-devel] [PATCH pve-manager 1/2] ui: fix #3760: change unit of memory of a VM 2023-07-27 10:30 [pve-devel] [PATCH pve-manager 0/2] change unit of memory for ct/vm Noel Ullreich @ 2023-07-27 10:30 ` Noel Ullreich 2023-07-27 10:30 ` [pve-devel] [PATCH pve-manager 2/2] ui: fix: change units of memory/swap for containers Noel Ullreich 1 sibling, 0 replies; 4+ messages in thread From: Noel Ullreich @ 2023-07-27 10:30 UTC (permalink / raw) To: pve-devel This patch adds a dropdown-menu (in the web interface) of units, MiB, GiB, and TiB, (although PiB could easily be added in the future) for ram and balloonsize of VMs. Signed-off-by: Noel Ullreich <n.ullreich@proxmox.com> --- www/manager6/qemu/MemoryEdit.js | 91 ++++++++++++++------------------- 1 file changed, 38 insertions(+), 53 deletions(-) diff --git a/www/manager6/qemu/MemoryEdit.js b/www/manager6/qemu/MemoryEdit.js index 5e91dc9b..906d3d84 100644 --- a/www/manager6/qemu/MemoryEdit.js +++ b/www/manager6/qemu/MemoryEdit.js @@ -23,18 +23,20 @@ Ext.define('PVE.qemu.MemoryInputPanel', { let memory = view.down('pveMemoryField[name=memory]'); // NOTE: we only set memory but that then sets balloon in its change handler if (viewModel.get('current.ostype') === 'win11') { - memory.setValue('4096'); + memory.setValue(4); } else { - memory.setValue('2048'); + memory.setValue(2); } + memory.setMinValue(1); + memory.step=1; } }, }, onGetValues: function(values) { - var me = this; + let me = this; - var res = {}; + let res = {}; res.memory = values.memory; res.balloon = values.balloon; @@ -42,7 +44,7 @@ Ext.define('PVE.qemu.MemoryInputPanel', { if (!values.ballooning) { res.balloon = 0; res.delete = 'shares'; - } else if (values.memory === values.balloon) { + } else if (res.memory===res.balloon) { delete res.balloon; res.delete = 'balloon,shares'; } else if (Ext.isDefined(values.shares) && values.shares !== "") { @@ -55,52 +57,30 @@ Ext.define('PVE.qemu.MemoryInputPanel', { }, initComponent: function() { - var me = this; - var labelWidth = 160; + let me = this; + let labelWidth = 160; - me.items= [ + me.items = [ { - xtype: 'pveMemoryField', - labelWidth: labelWidth, - fieldLabel: gettext('Memory') + ' (MiB)', + xtype: 'pmxSizeField', + fieldLabel: gettext('Memory'), name: 'memory', - value: '512', // better defaults get set via the view controllers afterrender - minValue: 1, - step: 32, - hotplug: me.hotplug, - listeners: { - change: function(f, value, old) { - var bf = me.down('field[name=balloon]'); - var balloon = bf.getValue(); - bf.setMaxValue(value); - if (balloon === old) { - bf.setValue(value); - } - bf.validate(); - }, - }, + unitname: 'memunit', + steparray: [32, 1, 1], + minarray: [16, 1, 1], + datastore: Object.keys(Proxmox.Utils.SizeUnits).slice(2, 5), + backendUnit: 'MiB', }, ]; me.advancedItems= [ { - xtype: 'pveMemoryField', + xtype: 'pmxSizeField', + fieldLabel: gettext('Swap'), name: 'balloon', - minValue: 1, - maxValue: me.insideWizard ? 2048 : 512, - value: '512', // better defaults get set (indirectly) via the view controllers afterrender - step: 32, - fieldLabel: gettext('Minimum memory') + ' (MiB)', - hotplug: me.hotplug, - labelWidth: labelWidth, - allowBlank: false, - listeners: { - change: function(f, value) { - var memory = me.down('field[name=memory]').getValue(); - var shares = me.down('field[name=shares]'); - shares.setDisabled(value === memory); - }, - }, + unitname: 'balloonunit', + datastore: Object.keys(Proxmox.Utils.SizeUnits).slice(2, 5), + backendUnit: 'MiB', }, { xtype: 'proxmoxintegerfield', @@ -124,10 +104,13 @@ Ext.define('PVE.qemu.MemoryInputPanel', { fieldLabel: gettext('Ballooning Device'), listeners: { change: function(f, value) { - var bf = me.down('field[name=balloon]'); - var shares = me.down('field[name=shares]'); - var memory = me.down('field[name=memory]'); + let bf = me.down('field[name=balloon]'); + let shares = me.down('field[name=shares]'); + let memory = me.down('field[name=memory]'); + let bsf = me.down('field[name=balloonSize]'); + bf.setDisabled(!value); + bsf.setDisabled(!value); shares.setDisabled(!value || bf.getValue() === memory.getValue()); }, }, @@ -149,9 +132,9 @@ Ext.define('PVE.qemu.MemoryEdit', { extend: 'Proxmox.window.Edit', initComponent: function() { - var me = this; + let me = this; - var memoryhotplug; + let memoryhotplug; if (me.hotplug) { Ext.each(me.hotplug.split(','), function(el) { if (el === 'memory') { @@ -160,7 +143,7 @@ Ext.define('PVE.qemu.MemoryEdit', { }); } - var ipanel = Ext.create('PVE.qemu.MemoryInputPanel', { + let ipanel = Ext.create('PVE.qemu.MemoryInputPanel', { hotplug: memoryhotplug, }); @@ -176,13 +159,15 @@ Ext.define('PVE.qemu.MemoryEdit', { me.load({ success: function(response, options) { - var data = response.result.data; + let data = response.result.data; - var values = { - ballooning: data.balloon === 0 ? '0' : '1', + let values = { + ballooning: data.balloon === 0 ? 0 : 1, shares: data.shares, - memory: data.memory || '512', - balloon: data.balloon > 0 ? data.balloon : data.memory || '512', + memory: data.memory || 512, + //memorySize: data.memorySize || scalingFactor[0], + balloon: data.balloon > 0 ? data.balloon : data.memory || 512, + //balloonSize: data.balloonSize || scalingFactor[0], }; ipanel.setValues(values); -- 2.39.2 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [pve-devel] [PATCH pve-manager 2/2] ui: fix: change units of memory/swap for containers 2023-07-27 10:30 [pve-devel] [PATCH pve-manager 0/2] change unit of memory for ct/vm Noel Ullreich 2023-07-27 10:30 ` [pve-devel] [PATCH pve-manager 1/2] ui: fix #3760: change unit of memory of a VM Noel Ullreich @ 2023-07-27 10:30 ` Noel Ullreich 1 sibling, 0 replies; 4+ messages in thread From: Noel Ullreich @ 2023-07-27 10:30 UTC (permalink / raw) To: pve-devel This patch adds a dropdown-menu (in the web interface) of units, MiB, GiB, and TiB, (although PiB could easily be added in the future) for ram and swapsize of containers. Signed-off-by: Noel Ullreich <n.ullreich@proxmox.com> --- www/manager6/lxc/ResourceEdit.js | 59 +++++++++++++++++++++----------- 1 file changed, 39 insertions(+), 20 deletions(-) diff --git a/www/manager6/lxc/ResourceEdit.js b/www/manager6/lxc/ResourceEdit.js index 9f4f7e08..8c1f57c3 100644 --- a/www/manager6/lxc/ResourceEdit.js +++ b/www/manager6/lxc/ResourceEdit.js @@ -1,10 +1,10 @@ -var labelWidth = 120; +let labelWidth = 100; Ext.define('PVE.lxc.MemoryEdit', { extend: 'Proxmox.window.Edit', initComponent: function() { - var me = this; + let me = this; Ext.apply(me, { subject: gettext('Memory'), @@ -69,7 +69,7 @@ Ext.define('PVE.lxc.CPUInputPanel', { return values; }, - advancedColumn1: [ + advancedColumn1: [ { xtype: 'numberfield', name: 'cpulimit', @@ -102,7 +102,7 @@ Ext.define('PVE.lxc.CPUInputPanel', { ], initComponent: function() { - var me = this; + let me = this; me.column1 = [ { @@ -130,29 +130,48 @@ Ext.define('PVE.lxc.MemoryInputPanel', { insideWizard: false, + onGetValues: function(values) { + let ret = {}; + + ret.memory = values.memory; + ret.swap = values.swap; + + return ret; + }, + +/* + onSetValues: function(values) { + // TODO: I would have thought that manually setting the combobox here + // might make it possible to set `ok` on the selector when changing the + // unit in the combobox + values.memunit = 'GiB'; + values.swapunit = 'TiB'; + + return values; + }, +*/ + initComponent: function() { - var me = this; + let me = this; - var items = [ + let items = [ { - xtype: 'proxmoxintegerfield', + xtype: 'pmxSizeField', + fieldLabel: gettext('Memory'), name: 'memory', - minValue: 16, - value: '512', - step: 32, - fieldLabel: gettext('Memory') + ' (MiB)', - labelWidth: labelWidth, - allowBlank: false, + unitname: 'memunit', + steparray: [32, 1, 1], + minarray: [16, 1, 1], + datastore: Object.keys(Proxmox.Utils.SizeUnits).slice(2, 5), + backendUnit: 'MiB', }, { - xtype: 'proxmoxintegerfield', + xtype: 'pmxSizeField', + fieldLabel: gettext('Swap'), name: 'swap', - minValue: 0, - value: '512', - step: 32, - fieldLabel: gettext('Swap') + ' (MiB)', - labelWidth: labelWidth, - allowBlank: false, + unitname: 'swapunit', + datastore: Object.keys(Proxmox.Utils.SizeUnits).slice(2, 5), + backendUnit: 'MiB', }, ]; -- 2.39.2 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [pve-devel] [PATCH pve-manager 0/2] ui: fix #3760: change units of ram/swap @ 2023-06-16 9:54 Noel Ullreich 2023-06-16 9:54 ` [pve-devel] [PATCH pve-manager 2/2] ui: fix: change units of memory/swap for containers Noel Ullreich 0 siblings, 1 reply; 4+ messages in thread From: Noel Ullreich @ 2023-06-16 9:54 UTC (permalink / raw) To: pve-devel Up until now, ram, balloonsize and swap were set in MiB, meaning if you wanted to create or change a VMs/CTs memory, you would first have to do the math to convert from GiB to MiB. This patch adds a dropdown-menu of units, MiB, GiB, and TiB, (although PiB could easily be added in the future) for ram and swap. A future patch in line with this could add units in the API, allowing for improved usability from the commandline (e.g. `qm create <id> --memory 2GiB`). having `scalingFactor` list in MemoryEdit and Resource Edits might not be the most elegant solution, the other option was sticking them in `proxmox-widget-toolkit/src/Utils.js` or using the units from there. However, if we want to use the units from there, we need to scale them and trim the unneeded units. So I thought the least invasive solution was to put the `scalingFactor` right in the Files. Noel Ullreich (2): ui: fix #3760: change unit of memory of a VM ui: fix: change units of memory/swap for containers www/manager6/lxc/ResourceEdit.js | 136 ++++++++++++++++--- www/manager6/qemu/MemoryEdit.js | 221 +++++++++++++++++++++++-------- 2 files changed, 285 insertions(+), 72 deletions(-) -- 2.30.2 ^ permalink raw reply [flat|nested] 4+ messages in thread
* [pve-devel] [PATCH pve-manager 2/2] ui: fix: change units of memory/swap for containers 2023-06-16 9:54 [pve-devel] [PATCH pve-manager 0/2] ui: fix #3760: change units of ram/swap Noel Ullreich @ 2023-06-16 9:54 ` Noel Ullreich 0 siblings, 0 replies; 4+ messages in thread From: Noel Ullreich @ 2023-06-16 9:54 UTC (permalink / raw) To: pve-devel This patch adds a dropdown-menu (in the web interface) of units, MiB, GiB, and TiB, (although PiB could easily be added in the future) for ram and swapsize of containers. Signed-off-by: Noel Ullreich <n.ullreich@proxmox.com> --- www/manager6/lxc/ResourceEdit.js | 136 ++++++++++++++++++++++++++----- 1 file changed, 117 insertions(+), 19 deletions(-) diff --git a/www/manager6/lxc/ResourceEdit.js b/www/manager6/lxc/ResourceEdit.js index 9f4f7e08d..a5437e292 100644 --- a/www/manager6/lxc/ResourceEdit.js +++ b/www/manager6/lxc/ResourceEdit.js @@ -1,10 +1,10 @@ -var labelWidth = 120; +let labelWidth = 100; Ext.define('PVE.lxc.MemoryEdit', { extend: 'Proxmox.window.Edit', initComponent: function() { - var me = this; + let me = this; Ext.apply(me, { subject: gettext('Memory'), @@ -102,7 +102,7 @@ Ext.define('PVE.lxc.CPUInputPanel', { ], initComponent: function() { - var me = this; + let me = this; me.column1 = [ { @@ -122,6 +122,12 @@ Ext.define('PVE.lxc.CPUInputPanel', { }, }); +let unitScalingFactor = [ + { 'name': gettext('MiB'), 'factor': 1 }, + { 'name': gettext('GiB'), 'factor': 1024 }, + { 'name': gettext('TiB'), 'factor': 1024**2 }, +]; + Ext.define('PVE.lxc.MemoryInputPanel', { extend: 'Proxmox.panel.InputPanel', alias: 'widget.pveLxcMemoryInputPanel', @@ -130,29 +136,121 @@ Ext.define('PVE.lxc.MemoryInputPanel', { insideWizard: false, + onGetValues: function(values) { + let me = this; + let ret = {}; + + ret.memory = values.memory*values.memorySize; + ret.swap = values.swap*values.swapSize; + + return ret; + }, + + onSetValues: function(values) { + let me = this; + let ret = structuredClone(values); + + for (let i in unitScalingFactor) { + if (Object.prototype.hasOwnProperty.call(unitScalingFactor, i)) { + if (values.memory%unitScalingFactor[i].factor===0) { + ret.memory = values.memory/unitScalingFactor[i].factor; + ret.memorySize = unitScalingFactor[i]; + } + if (values.swap%unitScalingFactor[i].factor===0 && values.swap) { + ret.swap = values.swap/unitScalingFactor[i].factor; + ret.swapSize = unitScalingFactor[i]; + } + } + } + + return ret; + }, + initComponent: function() { - var me = this; + let me = this; - var items = [ + let items = [ { - xtype: 'proxmoxintegerfield', - name: 'memory', - minValue: 16, - value: '512', - step: 32, - fieldLabel: gettext('Memory') + ' (MiB)', + xtype: 'fieldcontainer', + layout: 'hbox', labelWidth: labelWidth, - allowBlank: false, + fieldLabel: gettext('Memory'), + items: [ + { + xtype: 'proxmoxintegerfield', + name: 'memory', + flex: 2, + minValue: 16, + value: '512', + step: 32, + labelWidth: labelWidth, + allowBlank: false, + }, + { + xtype: 'combobox', + name: 'memorySize', + itemId: 'memorySize', + value: unitScalingFactor[0], //set to MiB by default + flex: 1, + editable: false, + allowBlank: false, + store: unitScalingFactor, + displayField: 'name', + valueField: 'factor', + listeners: { + change: function(f, value) { + let mf = me.down('field[name=memory]'); + if (value===1) { + mf.setMinValue(16); + mf.step=32; + } else { + mf.setMinValue(1); + mf.step=1; + } + mf.validate(); + }, + }, + }, + ], }, { - xtype: 'proxmoxintegerfield', - name: 'swap', - minValue: 0, - value: '512', - step: 32, - fieldLabel: gettext('Swap') + ' (MiB)', + xtype: 'fieldcontainer', + layout: 'hbox', labelWidth: labelWidth, - allowBlank: false, + fieldLabel: gettext('Swap'), + items: [ + { + xtype: 'proxmoxintegerfield', + name: 'swap', + flex: 2, + minValue: 0, + value: '512', + step: 32, + labelWidth: labelWidth, + allowBlank: false, + }, + { + xtype: 'combobox', + name: 'swapSize', + itemId: 'swapSize', + value: unitScalingFactor[0], //set to MiB by default + flex: 1, + editable: false, + allowBlank: false, + store: unitScalingFactor, + displayField: 'name', + valueField: 'factor', + listeners: { + change: function(f, value) { + let sf = me.down('field[name=swap]'); + + sf.step = value===1 ? 32 : 1; + + sf.validate(); + }, + }, + }, + ], }, ]; -- 2.30.2 ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-07-27 10:31 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2023-07-27 10:30 [pve-devel] [PATCH pve-manager 0/2] change unit of memory for ct/vm Noel Ullreich 2023-07-27 10:30 ` [pve-devel] [PATCH pve-manager 1/2] ui: fix #3760: change unit of memory of a VM Noel Ullreich 2023-07-27 10:30 ` [pve-devel] [PATCH pve-manager 2/2] ui: fix: change units of memory/swap for containers Noel Ullreich -- strict thread matches above, loose matches on Subject: below -- 2023-06-16 9:54 [pve-devel] [PATCH pve-manager 0/2] ui: fix #3760: change units of ram/swap Noel Ullreich 2023-06-16 9:54 ` [pve-devel] [PATCH pve-manager 2/2] ui: fix: change units of memory/swap for containers Noel Ullreich
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox