[pve-devel] applied: [PATCH manager] ui: vm: allow to add socket backed serial devices

Wolfgang Bumiller w.bumiller at proxmox.com
Thu May 17 10:18:56 CEST 2018


applied

On Wed, May 16, 2018 at 03:30:59PM +0200, Thomas Lamprecht wrote:
> 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