We show and can remove serial devices but couldn't add new ones through the WebUI. Add a simple component to allow adding serial ports backed by a socket, which can be especially useful now with xterm.js
Passing through serial devices from /dev isn't possible with this, as it is normally a root only operation and not that often used. Signed-off-by: Thomas Lamprecht <t.lampre...@proxmox.com> --- www/manager6/Makefile | 1 + www/manager6/qemu/HardwareView.js | 13 +++++++ www/manager6/qemu/SerialEdit.js | 81 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 95 insertions(+) create mode 100644 www/manager6/qemu/SerialEdit.js diff --git a/www/manager6/Makefile b/www/manager6/Makefile index 7e9877b2..a2bd4576 100644 --- a/www/manager6/Makefile +++ b/www/manager6/Makefile @@ -129,6 +129,7 @@ JSSRC= \ qemu/Config.js \ qemu/CreateWizard.js \ qemu/USBEdit.js \ + qemu/SerialEdit.js \ qemu/AgentIPView.js \ qemu/CloudInit.js \ qemu/CIDriveEdit.js \ diff --git a/www/manager6/qemu/HardwareView.js b/www/manager6/qemu/HardwareView.js index 17e755a8..a87a9df1 100644 --- a/www/manager6/qemu/HardwareView.js +++ b/www/manager6/qemu/HardwareView.js @@ -570,6 +570,19 @@ Ext.define('PVE.qemu.HardwareView', { win.show(); } }, + { + text: gettext('Serial Port'), + itemId: 'addserial', + iconCls: 'pve-itype-icon-serial', + disabled: !caps.vms['VM.Config.Options'], + handler: function() { + var win = Ext.create('PVE.qemu.SerialEdit', { + url: '/api2/extjs/' + baseurl + }); + win.on('destroy', reload); + win.show(); + } + }, { text: gettext('CloudInit Drive'), itemId: 'addci', diff --git a/www/manager6/qemu/SerialEdit.js b/www/manager6/qemu/SerialEdit.js new file mode 100644 index 00000000..794c7fa2 --- /dev/null +++ b/www/manager6/qemu/SerialEdit.js @@ -0,0 +1,81 @@ +/*jslint confusion: true */ +Ext.define('PVE.qemu.SerialnputPanel', { + extend: 'Proxmox.panel.InputPanel', + + autoComplete: false, + + setVMConfig: function(vmconfig) { + var me = this, i; + me.vmconfig = vmconfig; + + for (i = 0; i < 4; i++) { + var port = 'serial' + i.toString(); + if (!me.vmconfig[port]) { + me.down('field[name=serialid]').setValue(i); + break; + } + } + + }, + + onGetValues: function(values) { + var me = this; + + var id = 'serial' + values.serialid; + delete values.serialid; + values[id] = 'socket'; + return values; + }, + + items: [ + { + xtype: 'proxmoxintegerfield', + name: 'serialid', + fieldLabel: gettext('Serial Port'), + minValue: 0, + maxValue: 3, + allowBlank: false, + validator: function(id) { + if (!this.rendered) { + return true; + } + var me = this.up('panel'); + if (me.vmconfig !== undefined && Ext.isDefined(me.vmconfig['serial' + id])) { + return "This device is already in use."; + } + return true; + } + } + ] +}); + +Ext.define('PVE.qemu.SerialEdit', { + extend: 'Proxmox.window.Edit', + + vmconfig: undefined, + + isAdd: true, + + subject: gettext('Serial Port'), + + initComponent : function() { + var me = this; + + // for now create of (socket) serial port only + me.isCreate = true; + + var ipanel = Ext.create('PVE.qemu.SerialnputPanel', {}); + + Ext.apply(me, { + items: [ ipanel ] + }); + + me.callParent(); + + me.load({ + success: function(response, options) { + ipanel.setVMConfig(response.result.data); + } + }); + } +}); -- 2.14.2 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel