From: Matthias Heiserer <m.heiserer@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [pve-devel] [RFC manager 5/5] GUI: QEMU Hardware: add comment fields to rows
Date: Mon, 14 Feb 2022 15:01:44 +0100 [thread overview]
Message-ID: <20220214140144.961041-8-m.heiserer@proxmox.com> (raw)
In-Reply-To: <20220214140144.961041-1-m.heiserer@proxmox.com>
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 <m.heiserer@proxmox.com>
---
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
next prev parent reply other threads:[~2022-02-14 14:02 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-14 14:01 [pve-devel] [RFC manager 0/5] GUI: Hardware comments Matthias Heiserer
2022-02-14 14:01 ` [pve-devel] [RFC manager 1/5] GUI: Parser: add comment support Matthias Heiserer
2022-02-14 14:01 ` [pve-devel] [RFC qemu-server 1/2] QEMU: add comment helper Matthias Heiserer
2022-02-14 14:01 ` [pve-devel] [RFC manager 2/5] GUI: Utils: add comment renderer and field provider Matthias Heiserer
2022-02-14 14:01 ` [pve-devel] [RFC qemu-server 2/2] QEMU: add comment fields Matthias Heiserer
2022-02-14 14:01 ` [pve-devel] [RFC manager 3/5] GUI: QEMU Hardware: add comment column Matthias Heiserer
2022-02-14 14:01 ` [pve-devel] [RFC manager 4/5] GUI: QEMU Hardware: multikey support for comments Matthias Heiserer
2022-02-14 14:01 ` Matthias Heiserer [this message]
2022-02-14 14:27 ` [pve-devel] [RFC manager 0/5] GUI: Hardware comments Thomas Lamprecht
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220214140144.961041-8-m.heiserer@proxmox.com \
--to=m.heiserer@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.