From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id 0A8386334F for ; Mon, 14 Feb 2022 15:02:11 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 036DD234EE for ; Mon, 14 Feb 2022 15:02:11 +0100 (CET) Received: from proxmox-new.maurer-it.com (proxmox-new.maurer-it.com [94.136.29.106]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS id 57D4F23344 for ; Mon, 14 Feb 2022 15:02:05 +0100 (CET) Received: from proxmox-new.maurer-it.com (localhost.localdomain [127.0.0.1]) by proxmox-new.maurer-it.com (Proxmox) with ESMTP id 2DC2B418DF for ; Mon, 14 Feb 2022 15:02:05 +0100 (CET) From: Matthias Heiserer To: pve-devel@lists.proxmox.com Date: Mon, 14 Feb 2022 15:01:44 +0100 Message-Id: <20220214140144.961041-8-m.heiserer@proxmox.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220214140144.961041-1-m.heiserer@proxmox.com> References: <20220214140144.961041-1-m.heiserer@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.003 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record T_SCC_BODY_TEXT_LINE -0.01 - Subject: [pve-devel] [RFC manager 5/5] GUI: QEMU Hardware: add comment fields to rows X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 14 Feb 2022 14:02:11 -0000 This patch adds comment support to all qemu/hardware items. Mostly, these are property-string based fields. As processor(sockets), memory, bios, machine, and scsihw are multikey fields, comments haev to be sent in separate fields. I tried to keep the number of changes minimal, which means that the various files differ to some extent in how comments are implemented (e.g. USBEdit). Streamlining them might be a good idea. Signed-off-by: Matthias Heiserer --- www/manager6/qemu/AudioEdit.js | 3 ++- www/manager6/qemu/CDEdit.js | 7 ++++--- www/manager6/qemu/CIDriveEdit.js | 2 ++ www/manager6/qemu/DisplayEdit.js | 2 +- www/manager6/qemu/HDEdit.js | 4 ++++ www/manager6/qemu/HDEfi.js | 3 +++ www/manager6/qemu/HDTPM.js | 2 ++ www/manager6/qemu/MachineEdit.js | 24 ++++++++++++++---------- www/manager6/qemu/MemoryEdit.js | 3 +++ www/manager6/qemu/NetworkEdit.js | 7 +++++-- www/manager6/qemu/PCIEdit.js | 1 + www/manager6/qemu/ProcessorEdit.js | 1 + www/manager6/qemu/QemuBiosEdit.js | 1 + www/manager6/qemu/RNGEdit.js | 1 + www/manager6/qemu/ScsiHwEdit.js | 15 +++++++++------ www/manager6/qemu/SerialEdit.js | 6 +++--- www/manager6/qemu/USBEdit.js | 13 ++++++++++++- 17 files changed, 68 insertions(+), 27 deletions(-) diff --git a/www/manager6/qemu/AudioEdit.js b/www/manager6/qemu/AudioEdit.js index e7861ceb..f657f8f6 100644 --- a/www/manager6/qemu/AudioEdit.js +++ b/www/manager6/qemu/AudioEdit.js @@ -36,7 +36,8 @@ Ext.define('PVE.qemu.AudioInputPanel', { ['spice', 'SPICE'], ['none', `${Proxmox.Utils.NoneText} (${gettext('Dummy Device')})`], ], - }], + }, + PVE.Utils.commentField()], }); Ext.define('PVE.qemu.AudioEdit', { diff --git a/www/manager6/qemu/CDEdit.js b/www/manager6/qemu/CDEdit.js index 72c01037..ec1f3388 100644 --- a/www/manager6/qemu/CDEdit.js +++ b/www/manager6/qemu/CDEdit.js @@ -17,7 +17,7 @@ Ext.define('PVE.qemu.CDInputPanel', { } else { me.drive.file = 'none'; } - + PVE.Utils.propertyStringSet(me.drive, values.comment, 'comment'); var params = {}; params[confid] = PVE.Parser.printQemuDrive(me.drive); @@ -49,9 +49,8 @@ Ext.define('PVE.qemu.CDInputPanel', { values.cdimage = drive.file; } } - + values.comment = PVE.Parser.parseComment(drive.comment); me.drive = drive; - me.setValues(values); }, @@ -140,6 +139,8 @@ Ext.define('PVE.qemu.CDInputPanel', { boxLabel: gettext('Do not use any media'), }); + items.push(PVE.Utils.commentField()); + me.items = items; me.callParent(); diff --git a/www/manager6/qemu/CIDriveEdit.js b/www/manager6/qemu/CIDriveEdit.js index 754b8353..1f5ee37b 100644 --- a/www/manager6/qemu/CIDriveEdit.js +++ b/www/manager6/qemu/CIDriveEdit.js @@ -13,6 +13,7 @@ Ext.define('PVE.qemu.CIDriveInputPanel', { var params = {}; drive.file = values.hdstorage + ":cloudinit"; drive.format = values.diskformat; + drive.comment = values.comment; params[values.controller + values.deviceid] = PVE.Parser.printQemuDrive(drive); return params; }, @@ -48,6 +49,7 @@ Ext.define('PVE.qemu.CIDriveInputPanel', { nodename: me.nodename, hideSize: true, }, + PVE.Utils.commentField(), ]; me.callParent(); }, diff --git a/www/manager6/qemu/DisplayEdit.js b/www/manager6/qemu/DisplayEdit.js index 82e6777e..0f03101a 100644 --- a/www/manager6/qemu/DisplayEdit.js +++ b/www/manager6/qemu/DisplayEdit.js @@ -83,7 +83,7 @@ Ext.define('PVE.qemu.DisplayInputPanel', { maxValue: 512, step: 4, name: 'memory', - }], + }, PVE.Utils.commentField()], }); Ext.define('PVE.qemu.DisplayEdit', { diff --git a/www/manager6/qemu/HDEdit.js b/www/manager6/qemu/HDEdit.js index c643ee73..bffdee48 100644 --- a/www/manager6/qemu/HDEdit.js +++ b/www/manager6/qemu/HDEdit.js @@ -93,6 +93,7 @@ Ext.define('PVE.qemu.HDInputPanel', { PVE.Utils.propertyStringSet(me.drive, values.readOnly, 'ro', 'on'); PVE.Utils.propertyStringSet(me.drive, values.cache, 'cache'); PVE.Utils.propertyStringSet(me.drive, values.aio, 'aio'); + PVE.Utils.propertyStringSet(me.drive, values.comment, 'comment'); ['mbps_rd', 'mbps_wr', 'iops_rd', 'iops_wr'].forEach(name => { let burst_name = `${name}_max`; @@ -153,6 +154,7 @@ Ext.define('PVE.qemu.HDInputPanel', { values.iothread = PVE.Parser.parseBoolean(drive.iothread); values.readOnly = PVE.Parser.parseBoolean(drive.ro); values.aio = drive.aio || '__default__'; + values.comment = PVE.Parser.parseComment(drive.comment) || ''; values.mbps_rd = drive.mbps_rd; values.mbps_wr = drive.mbps_wr; @@ -238,6 +240,8 @@ Ext.define('PVE.qemu.HDInputPanel', { }); } + column1.push(PVE.Utils.commentField()); + column2.push( { xtype: 'CacheTypeSelector', diff --git a/www/manager6/qemu/HDEfi.js b/www/manager6/qemu/HDEfi.js index a8ca8f56..7d16540b 100644 --- a/www/manager6/qemu/HDEfi.js +++ b/www/manager6/qemu/HDEfi.js @@ -17,6 +17,8 @@ Ext.define('PVE.qemu.EFIDiskInputPanel', { var confid = 'efidisk0'; + me.drive.comment = values.comment; + if (values.hdimage) { me.drive.file = values.hdimage; } else { @@ -76,6 +78,7 @@ Ext.define('PVE.qemu.EFIDiskInputPanel', { 'data-qtip': gettext('Use EFIvars image with standard distribution and Microsoft secure boot keys enrolled.'), }, }, + PVE.Utils.commentField(), { xtype: 'label', text: gettext("Warning: The VM currently does not uses 'OVMF (UEFI)' as BIOS."), diff --git a/www/manager6/qemu/HDTPM.js b/www/manager6/qemu/HDTPM.js index 87349aed..0b4a6431 100644 --- a/www/manager6/qemu/HDTPM.js +++ b/www/manager6/qemu/HDTPM.js @@ -13,6 +13,7 @@ Ext.define('PVE.qemu.TPMDiskInputPanel', { } var confid = 'tpmstate0'; + me.drive.comment = values.comment; if (values.hdimage) { me.drive.file = values.hdimage; @@ -68,6 +69,7 @@ Ext.define('PVE.qemu.TPMDiskInputPanel', { ['v2.0', 'v2.0'], ], }, + PVE.Utils.commentField(), ]; me.callParent(); diff --git a/www/manager6/qemu/MachineEdit.js b/www/manager6/qemu/MachineEdit.js index f928c80c..61540d55 100644 --- a/www/manager6/qemu/MachineEdit.js +++ b/www/manager6/qemu/MachineEdit.js @@ -69,16 +69,19 @@ Ext.define('PVE.qemu.MachineInputPanel', { this.callParent(arguments); }, - items: { - xtype: 'proxmoxKVComboBox', - name: 'machine', - reference: 'machine', - fieldLabel: gettext('Machine'), - comboItems: [ - ['__default__', PVE.Utils.render_qemu_machine('')], - ['q35', 'q35'], - ], - }, + items: [ + { + xtype: 'proxmoxKVComboBox', + name: 'machine', + reference: 'machine', + fieldLabel: gettext('Machine'), + comboItems: [ + ['__default__', PVE.Utils.render_qemu_machine('')], + ['q35', 'q35'], + ], + }, + PVE.Utils.commentField('machine_comment'), + ], advancedItems: [ { @@ -137,6 +140,7 @@ Ext.define('PVE.qemu.MachineEdit', { let conf = response.result.data; let values = { machine: conf.machine || '__default__', + machine_comment: conf.machine_comment, }; values.isWindows = PVE.Utils.is_windows(conf.ostype); me.setValues(values); diff --git a/www/manager6/qemu/MemoryEdit.js b/www/manager6/qemu/MemoryEdit.js index 5e91dc9b..aa5c6b4d 100644 --- a/www/manager6/qemu/MemoryEdit.js +++ b/www/manager6/qemu/MemoryEdit.js @@ -38,6 +38,7 @@ Ext.define('PVE.qemu.MemoryInputPanel', { res.memory = values.memory; res.balloon = values.balloon; + res.memory_comment = values.memory_comment; if (!values.ballooning) { res.balloon = 0; @@ -80,6 +81,7 @@ Ext.define('PVE.qemu.MemoryInputPanel', { }, }, }, + PVE.Utils.commentField('memory_comment'), ]; me.advancedItems= [ @@ -183,6 +185,7 @@ Ext.define('PVE.qemu.MemoryEdit', { shares: data.shares, memory: data.memory || '512', balloon: data.balloon > 0 ? data.balloon : data.memory || '512', + memory_comment: data.memory_comment, }; ipanel.setValues(values); diff --git a/www/manager6/qemu/NetworkEdit.js b/www/manager6/qemu/NetworkEdit.js index b39cffdc..074d3006 100644 --- a/www/manager6/qemu/NetworkEdit.js +++ b/www/manager6/qemu/NetworkEdit.js @@ -19,7 +19,7 @@ Ext.define('PVE.qemu.NetworkInputPanel', { me.network.macaddr = values.macaddr; me.network.disconnect = values.disconnect; me.network.queues = values.queues; - + me.network.comment = values.comment; if (values.rate) { me.network.rate = values.rate; } else { @@ -140,7 +140,10 @@ Ext.define('PVE.qemu.NetworkInputPanel', { vtype: 'MacAddress', allowBlank: true, emptyText: 'auto', - }); + }, + PVE.Utils.commentField(), + ); + me.advancedColumn2 = [ { xtype: 'numberfield', diff --git a/www/manager6/qemu/PCIEdit.js b/www/manager6/qemu/PCIEdit.js index f505e34f..ac556c7a 100644 --- a/www/manager6/qemu/PCIEdit.js +++ b/www/manager6/qemu/PCIEdit.js @@ -151,6 +151,7 @@ Ext.define('PVE.qemu.PCIInputPanel', { fieldLabel: gettext('All Functions'), name: 'multifunction', }, + PVE.Utils.commentField(), ]; me.column2 = [ diff --git a/www/manager6/qemu/ProcessorEdit.js b/www/manager6/qemu/ProcessorEdit.js index 539e3e7d..f7d1c2e2 100644 --- a/www/manager6/qemu/ProcessorEdit.js +++ b/www/manager6/qemu/ProcessorEdit.js @@ -121,6 +121,7 @@ Ext.define('PVE.qemu.ProcessorInputPanel', { value: '{coreCount}', }, }, + PVE.Utils.commentField('sockets_comment'), ], column2: [ diff --git a/www/manager6/qemu/QemuBiosEdit.js b/www/manager6/qemu/QemuBiosEdit.js index 70731a71..228375c2 100644 --- a/www/manager6/qemu/QemuBiosEdit.js +++ b/www/manager6/qemu/QemuBiosEdit.js @@ -25,6 +25,7 @@ Ext.define('PVE.qemu.BiosEdit', { bind: '{bios}', fieldLabel: 'BIOS', }, + PVE.Utils.commentField('bios_comment'), { xtype: 'displayfield', name: 'efidisk0', diff --git a/www/manager6/qemu/RNGEdit.js b/www/manager6/qemu/RNGEdit.js index e34e2c08..e9aa488f 100644 --- a/www/manager6/qemu/RNGEdit.js +++ b/www/manager6/qemu/RNGEdit.js @@ -77,6 +77,7 @@ Ext.define('PVE.qemu.RNGInputPanel', { labelWidth: 130, emptyText: '1000', }, + PVE.Utils.commentField(), { xtype: 'displayfield', reference: 'sourceWarning', diff --git a/www/manager6/qemu/ScsiHwEdit.js b/www/manager6/qemu/ScsiHwEdit.js index 70f09c17..edd66808 100644 --- a/www/manager6/qemu/ScsiHwEdit.js +++ b/www/manager6/qemu/ScsiHwEdit.js @@ -6,12 +6,15 @@ Ext.define('PVE.qemu.ScsiHwEdit', { Ext.applyIf(me, { subject: gettext('SCSI Controller Type'), - items: { - xtype: 'pveScsiHwSelector', - name: 'scsihw', - value: '__default__', - fieldLabel: gettext('Type'), - }, + items: [ + { + xtype: 'pveScsiHwSelector', + name: 'scsihw', + value: '__default__', + fieldLabel: gettext('Type'), + }, + PVE.Utils.commentField('scsihw_comment'), + ], }); me.callParent(); diff --git a/www/manager6/qemu/SerialEdit.js b/www/manager6/qemu/SerialEdit.js index 6ce18ec2..730fe2c3 100644 --- a/www/manager6/qemu/SerialEdit.js +++ b/www/manager6/qemu/SerialEdit.js @@ -17,12 +17,11 @@ Ext.define('PVE.qemu.SerialnputPanel', { }, onGetValues: function(values) { - var me = this; - var id = 'serial' + values.serialid; delete values.serialid; values[id] = 'socket'; - return values; + + return { [id]: PVE.Parser.printPropertyString(values, id) }; }, items: [ @@ -44,6 +43,7 @@ Ext.define('PVE.qemu.SerialnputPanel', { return true; }, }, + PVE.Utils.commentField(), ], }); diff --git a/www/manager6/qemu/USBEdit.js b/www/manager6/qemu/USBEdit.js index a2204584..817693ec 100644 --- a/www/manager6/qemu/USBEdit.js +++ b/www/manager6/qemu/USBEdit.js @@ -45,6 +45,8 @@ Ext.define('PVE.qemu.USBInputPanel', { val += ',usb3=1'; } values[me.confid] = val; + values[me.confid] += ',comment=' + PVE.Parser.encodeComment(values.comment); + delete values.comment; return values; }, @@ -107,6 +109,7 @@ Ext.define('PVE.qemu.USBInputPanel', { reference: 'usb3', fieldLabel: gettext('Use USB3'), }, + PVE.Utils.commentField(), ], }, ], @@ -145,7 +148,7 @@ Ext.define('PVE.qemu.USBEdit', { } var data = response.result.data[me.confid].split(','); - var port, hostdevice, usb3 = false; + var port, hostdevice, usb3, comment = false; var type = 'spice'; for (let i = 0; i < data.length; i++) { @@ -162,12 +165,20 @@ Ext.define('PVE.qemu.USBEdit', { if (/^usb3=(1|on|true)$/.test(data[i])) { usb3 = true; } + + // FIXME: use PVE.Parser.parsePropertyString + if (/comment=([^,]*)(,|$)/.test(data[i])) { + comment = data[i]; + comment = comment.replace('comment=', ''); + comment = PVE.Parser.parseComment(comment); + } } var values = { usb: type, hostdevice: hostdevice, port: port, usb3: usb3, + comment: comment, }; ipanel.setValues(values); -- 2.30.2