[pve-devel] [PATCH manager v2] fix #3994: Options menu entry in the System menu

Markus Frank m.frank at proxmox.com
Wed May 11 14:27:45 CEST 2022


I tested it on a vm-cluster.
GUI works as intended and only allows input which can be handled by the
backend. Node-Config-Files get updated on change in GUI, and vice versa.
I can also verify that startall-on-boot-delay works fine.

Tested-by: Markus Frank <m.frank at proxmox.com>

On 5/6/22 14:39, Daniel Tschlatscher wrote:
> Add the subentry "Options" in the "System" menu to expose some options
> in the GUI which were not exposed before.
> 
> Added a new file for displaying and editing the node config options
> which were not exposed through the GUI yet. Namely those are the
> settings for wakeonlan and startall-on-boot-delay. Edited the Makefile
> to include the newly created file.
> 
> Signed-off-by: Daniel Tschlatscher <d.tschlatscher at proxmox.com>
> ---
> Changes from v2:
> 
> - Moved the file from the widget-toolkit to the pve-manager repository
>    because it implements PVE specific functionality.
> - I originally rewrote this class to use a ViewController, but then
>    found out that the ObjectGrid does most of what I wanted already, I
>    just had to address it correctly.
>    This means the code is now a bit shorter and a lot more concise.
> 
>   www/manager6/Makefile                |  1 +
>   www/manager6/node/Config.js          |  9 ++++
>   www/manager6/node/NodeOptionsView.js | 67 ++++++++++++++++++++++++++++
>   3 files changed, 77 insertions(+)
>   create mode 100644 www/manager6/node/NodeOptionsView.js
> 
> diff --git a/www/manager6/Makefile b/www/manager6/Makefile
> index 2c7b1e70..d16770b1 100644
> --- a/www/manager6/Makefile
> +++ b/www/manager6/Makefile
> @@ -195,6 +195,7 @@ JSSRC= 							\
>   	node/Subscription.js				\
>   	node/Summary.js					\
>   	node/ZFS.js					\
> +	node/NodeOptionsView.js				\
>   	pool/Config.js					\
>   	pool/StatusView.js				\
>   	pool/Summary.js					\
> diff --git a/www/manager6/node/Config.js b/www/manager6/node/Config.js
> index 52357df8..7e7d45f7 100644
> --- a/www/manager6/node/Config.js
> +++ b/www/manager6/node/Config.js
> @@ -195,6 +195,15 @@ Ext.define('PVE.node.Config', {
>   		    nodename: nodename,
>   		    onlineHelp: 'sysadmin_network_configuration',
>   		},
> +		{
> +		    xtype: 'proxmoxNodeOptionsView',
> +		    title: gettext('Options'),
> +		    iconCls: 'fa fa-gear',
> +		    groups: ['services'],
> +		    itemId: 'options',
> +		    nodename: nodename,
> +		    onlineHelp: 'proxmox_node_management',
> +		},
>   		{
>   		    xtype: 'proxmoxNodeHostsView',
>   		    title: gettext('Hosts'),
> diff --git a/www/manager6/node/NodeOptionsView.js b/www/manager6/node/NodeOptionsView.js
> new file mode 100644
> index 00000000..b841b7b0
> --- /dev/null
> +++ b/www/manager6/node/NodeOptionsView.js
> @@ -0,0 +1,67 @@
> +Ext.define('Proxmox.node.NodeOptionsView', {
> +    extend: 'Proxmox.grid.ObjectGrid',
> +    alias: ['widget.proxmoxNodeOptionsView'],
> +    mixins: ['Proxmox.Mixin.CBind'],
> +
> +    cbindData: function(_initialconfig) {
> +	let me = this;
> +
> +	let baseUrl = `/nodes/${me.nodename}/config`;
> +	me.url = `/api2/json${baseUrl}`;
> +	me.editorConfig = {
> +	    url: `/api2/extjs/${baseUrl}`,
> +	};
> +
> +	return {};
> +    },
> +
> +    listeners: {
> +	itemdblclick: function() { this.run_editor(); },
> +	activate: function() { this.rstore.startUpdate(); },
> +	destroy: function() { this.rstore.stopUpdate(); },
> +	deactivate: function() { this.rstore.stopUpdate(); },
> +    },
> +
> +    tbar: [
> +	{
> +	    text: gettext('Edit'),
> +	    xtype: 'proxmoxButton',
> +	    disabled: true,
> +	    handler: btn => btn.up('grid').run_editor(),
> +	},
> +    ],
> +
> +    gridRows: [
> +	{
> +	    xtype: 'integer',
> +	    name: 'startall-onboot-delay',
> +	    text: gettext('Start on boot delay'),
> +	    minValue: 0,
> +	    maxValue: 300,
> +	    labelWidth: 130,
> +	    deleteEmpty: true,
> +	    renderer: function(value) {
> +		if (value === undefined) {
> +		    return Proxmox.Utils.defaultText;
> +		}
> +
> +		let secString = value === '1' ? gettext('Second') : gettext('Seconds');
> +		return `${value} ${secString}`;
> +	    },
> +	},
> +	{
> +	    xtype: 'text',
> +	    name: 'wakeonlan',
> +	    text: gettext('Wake on LAN'),
> +	    vtype: 'MacAddress',
> +	    deleteEmpty: true,
> +	    renderer: function(value) {
> +		if (value === undefined) {
> +		    return Proxmox.Utils.NoneText;
> +		}
> +
> +		return value;
> +	    },
> +	},
> +    ],
> +});




More information about the pve-devel mailing list