[pve-devel] [PATCH manager] ui: vm: allow to add socket backed serial devices
Thomas Lamprecht
t.lamprecht at proxmox.com
Wed May 16 15:30:59 CEST 2018
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.lamprecht at 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
More information about the pve-devel
mailing list