public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Dominik Csapak <d.csapak@proxmox.com>
To: Proxmox VE development discussion <pve-devel@lists.proxmox.com>,
	Stefan Hanreich <s.hanreich@proxmox.com>
Subject: Re: [pve-devel] [PATCH v4 pve-manager 19/33] sdn: subnet: add panel for editing dhcp ranges
Date: Mon, 20 Nov 2023 14:20:15 +0100	[thread overview]
Message-ID: <00b0eb49-a0e2-4bee-a408-969132ef92b5@proxmox.com> (raw)
In-Reply-To: <20231117114011.834002-20-s.hanreich@proxmox.com>

hi, a few issues here:

high level:

adding/modifying/deleting dhcp ranges does not trigger form 'isDirty'
check properly, leading to me unable to add dhcp ranges
to an existing subnet without also changing something else on
the first tab (there are probably some 'checkChange' triggers missing?)

also i can send invalid data because the 'getErrors' function is not implemented
i don't think we should be able to do this

also i'd show the dhcp ranges in the grid too, even if it's just
a hidden by default

remaining comments inline:

On 11/17/23 12:39, Stefan Hanreich wrote:
> Signed-off-by: Stefan Hanreich <s.hanreich@proxmox.com>
> ---
>   www/manager6/Makefile          |   1 +
>   www/manager6/sdn/SubnetEdit.js | 160 ++++++++++++++++++++++++++++++++-
>   2 files changed, 160 insertions(+), 1 deletion(-)
> 
> diff --git a/www/manager6/Makefile b/www/manager6/Makefile
> index dccd2ba1c..093452cd7 100644
> --- a/www/manager6/Makefile
> +++ b/www/manager6/Makefile
> @@ -274,6 +274,7 @@ JSSRC= 							\
>   	sdn/ZoneContentView.js				\
>   	sdn/ZoneContentPanel.js				\
>   	sdn/ZoneView.js					\
> +	sdn/IpamEdit.js					\
>   	sdn/OptionsPanel.js				\
>   	sdn/controllers/Base.js				\
>   	sdn/controllers/EvpnEdit.js			\
> diff --git a/www/manager6/sdn/SubnetEdit.js b/www/manager6/sdn/SubnetEdit.js
> index b9825d2a3..4fe16ab92 100644
> --- a/www/manager6/sdn/SubnetEdit.js
> +++ b/www/manager6/sdn/SubnetEdit.js
> @@ -56,6 +56,147 @@ Ext.define('PVE.sdn.SubnetInputPanel', {
>       ],
>   });
>   
> +Ext.define('PVE.sdn.SubnetDhcpRangePanel', {
> +    extend: 'Ext.form.FieldContainer',
> +    mixins: ['Ext.form.field.Field'],
> +
> +    initComponent: function() {
> +	let me = this;
> +
> +	me.callParent();
> +	me.initField();
> +    },
> +
> +    getValue: function() {
> +	let me = this;
> +	let store = me.lookup('grid').getStore();
> +
> +	let data = [];
> +
> +	store.getData()
> +	    .each((item) =>
> +		data.push(`start-address=${item.data['start-address']},end-address=${item.data['end-address']}`),
> +	    );

i'd not indent the 'each', because then you have one level less for the 'data.push'

> +
> +	return data;
> +    },
> +
> +    getSubmitData: function() {
> +	let me = this;
> +
> +	let data = {};
> +	let value = me.getValue();
> +
> +	if (value.length) {
> +	    data[me.getName()] = value;
> +	}
> +
> +	return data;
> +    },
> +
> +    setValue: function(dhcpRanges) {
> +	let me = this;
> +	let store = me.lookup('grid').getStore();
> +	store.setData(dhcpRanges);
> +    },

not sure if it's because of this, but it seems not to reset properly
the field always becomes empty but still has the reset enabled

> +
> +    getErrors: function() {
> +	let me = this;
> +        let errors = [];
> +
> +	return errors;
> +    },

please implement this (even if rudimentary) so users cannot send
invalid values

> +
> +    controller: {
> +	xclass: 'Ext.app.ViewController',
> +
> +	addRange: function() {
> +	    let me = this;
> +	    me.lookup('grid').getStore().add({});


i guess here would be a good place to add a 'me.getView().checkChange()'


> +	},
> +
> +	removeRange: function(field) {
> +	    let me = this;
> +	    let record = field.getWidgetRecord();
> +
> +	    me.lookup('grid').getStore().remove(record);


here too

> +	},
> +
> +	onValueChange: function(field, value) {
> +	    let me = this;
> +	    let record = field.getWidgetRecord();
> +	    let column = field.getWidgetColumn();
> +
> +	    record.set(column.dataIndex, value);
> +	    record.commit();


and here too


> +	},
> +
> +	control: {
> +	    'grid button': {
> +		click: 'removeRange',
> +	    },
> +	    'field': {
> +		change: 'onValueChange',
> +	    },
> +	},
> +    },
> +
> +    items: [
> +	{
> +	    xtype: 'grid',
> +	    reference: 'grid',
> +	    scrollable: true,
> +	    store: {
> +		fields: ['start-address', 'end-address'],
> +	    },
> +	    columns: [
> +		{
> +		    text: gettext('Start Address'),
> +		    xtype: 'widgetcolumn',
> +		    dataIndex: 'start-address',
> +		    flex: 1,
> +		    widget: {
> +			xtype: 'textfield',
> +			vtype: 'IP64Address',
> +		    },
> +		},
> +		{
> +		    text: gettext('End Address'),
> +		    xtype: 'widgetcolumn',
> +		    dataIndex: 'end-address',
> +		    flex: 1,
> +		    widget: {
> +			xtype: 'textfield',
> +			vtype: 'IP64Address',
> +		    },
> +		},
> +		{
> +		    xtype: 'widgetcolumn',
> +		    width: 40,
> +		    widget: {
> +			xtype: 'button',
> +			iconCls: 'fa fa-trash-o',
> +		    },
> +		},
> +	    ],
> +	},
> +	{
> +	    xtype: 'container',
> +	    layout: {
> +		type: 'hbox',
> +	    },
> +	    items: [
> +		{
> +		    xtype: 'button',
> +		    text: gettext('Add'),
> +		    iconCls: 'fa fa-plus-circle',
> +		    handler: 'addRange',
> +		},
> +	    ],
> +	},
> +    ],
> +});
> +
>   Ext.define('PVE.sdn.SubnetEdit', {
>       extend: 'Proxmox.window.Edit',
>   
> @@ -67,6 +208,8 @@ Ext.define('PVE.sdn.SubnetEdit', {
>   
>       base_url: undefined,
>   
> +    bodyPadding: 0,
> +
>       initComponent: function() {
>   	var me = this;
>   
> @@ -82,11 +225,22 @@ Ext.define('PVE.sdn.SubnetEdit', {
>   
>   	let ipanel = Ext.create('PVE.sdn.SubnetInputPanel', {
>   	    isCreate: me.isCreate,
> +	    title: gettext('General'),
> +	});
> +
> +	let dhcpPanel = Ext.create('PVE.sdn.SubnetDhcpRangePanel', {
> +	    isCreate: me.isCreate,
> +	    title: gettext('DHCP Ranges'),
> +	    name: 'dhcp-range',
>   	});
>   
>   	Ext.apply(me, {
>   	    items: [
> -		ipanel,
> +		{
> +		    xtype: 'tabpanel',
> +		    bodyPadding: 10,
> +		    items: [ipanel, dhcpPanel],
> +		},
>   	    ],
>   	});
>   
> @@ -97,6 +251,10 @@ Ext.define('PVE.sdn.SubnetEdit', {
>   		success: function(response, options) {
>   		    let values = response.result.data;
>   		    ipanel.setValues(values);
> +
> +		    if (values['dhcp-range']) {
> +			dhcpPanel.setValue(values['dhcp-range']);
> +		    }
>   		},
>   	    });
>   	}





  reply	other threads:[~2023-11-20 13:20 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-11-17 11:39 [pve-devel] [PATCH v4 cluster/network/manager/qemu-server/container/docs 00/33] Add support for DHCP servers to SDN Stefan Hanreich
2023-11-17 11:39 ` [pve-devel] [PATCH v4 pve-cluster 01/33] add priv/macs.db Stefan Hanreich
2023-11-17 13:54   ` [pve-devel] applied: " Thomas Lamprecht
2023-11-17 11:39 ` [pve-devel] [PATCH v4 pve-network 02/33] sdn: preparations for DHCP plugin Stefan Hanreich
2023-11-17 11:39 ` [pve-devel] [PATCH v4 pve-network 03/33] subnet: add dhcp options Stefan Hanreich
2023-11-17 11:39 ` [pve-devel] [PATCH v4 pve-network 04/33] sdn: zone: add dhcp option Stefan Hanreich
2023-11-17 11:39 ` [pve-devel] [PATCH v4 pve-network 05/33] ipam: plugins: preparations for DHCP Stefan Hanreich
2023-11-17 11:39 ` [pve-devel] [PATCH v4 pve-network 06/33] subnet: vnet: refactor IPAM related methods Stefan Hanreich
2023-11-17 14:13   ` Stefan Lendl
2023-11-17 15:12     ` Stefan Hanreich
2023-11-17 11:39 ` [pve-devel] [PATCH v4 pve-network 07/33] dhcp: add abstract class for DHCP plugins Stefan Hanreich
2023-11-17 11:39 ` [pve-devel] [PATCH v4 pve-network 08/33] sdn: dhcp: add dnsmasq plugin Stefan Hanreich
2023-11-17 11:39 ` [pve-devel] [PATCH v4 pve-network 09/33] sdn: dhcp: add helper for creating DHCP leases Stefan Hanreich
2023-11-17 11:39 ` [pve-devel] [PATCH v4 pve-network 10/33] api: add endpoints for managing PVE IPAM Stefan Hanreich
2023-11-18 16:27   ` Thomas Lamprecht
2023-11-20 10:55     ` Stefan Hanreich
2023-11-20 12:28       ` DERUMIER, Alexandre
2023-11-20 12:34         ` Stefan Hanreich
2023-11-20 12:50           ` Stefan Hanreich
2023-11-20 16:25           ` DERUMIER, Alexandre
2023-11-17 11:39 ` [pve-devel] [PATCH v4 pve-network 11/33] api: subnet: add dhcp ranges Stefan Hanreich
2023-11-17 11:39 ` [pve-devel] [PATCH v4 pve-network 12/33] api: zone: add dhcp option Stefan Hanreich
2023-11-17 11:39 ` [pve-devel] [PATCH v4 pve-network 13/33] dhcp: regenerate config for DHCP plugins on applying configuration Stefan Hanreich
2023-11-17 11:39 ` [pve-devel] [PATCH v4 pve-network 14/33] sdn: fix tests Stefan Hanreich
2023-11-17 11:39 ` [pve-devel] [PATCH v4 pve-network 15/33] sdn: fix subnets && netbox ipam tests Stefan Hanreich
2023-11-17 11:39 ` [pve-devel] [PATCH v4 pve-network 16/33] add add_dhcp_mapping Stefan Hanreich
2023-11-17 11:39 ` [pve-devel] [PATCH v4 pve-manager 17/33] sdn: regenerate DHCP config on reload Stefan Hanreich
2023-11-21 21:15   ` [pve-devel] applied: " Thomas Lamprecht
2023-11-17 11:39 ` [pve-devel] [PATCH v4 pve-manager 18/33] sdn: add DHCP option to Zone dialogue Stefan Hanreich
2023-11-17 11:39 ` [pve-devel] [PATCH v4 pve-manager 19/33] sdn: subnet: add panel for editing dhcp ranges Stefan Hanreich
2023-11-20 13:20   ` Dominik Csapak [this message]
2023-11-17 11:39 ` [pve-devel] [PATCH v4 pve-manager 20/33] sdn: ipam: add ipam panel Stefan Hanreich
2023-11-17 15:04   ` DERUMIER, Alexandre
2023-11-17 15:15     ` Stefan Hanreich
2023-11-18 14:25       ` DERUMIER, Alexandre
2023-11-20 13:44   ` Dominik Csapak
2023-11-17 11:39 ` [pve-devel] [PATCH v4 qemu-server 21/33] vmnic add|remove : add|del ip in ipam Stefan Hanreich
2023-11-21 13:53   ` [pve-devel] applied-series: " Wolfgang Bumiller
2023-11-17 11:40 ` [pve-devel] [PATCH v4 qemu-server 22/33] vm_start : vm-network-scripts: add_dhcp_reservation Stefan Hanreich
2023-11-17 11:40 ` [pve-devel] [PATCH v4 qemu-server 23/33] api2: create|restore|clone: add_free_ip Stefan Hanreich
2023-11-17 11:40 ` [pve-devel] [PATCH v4 qemu-server 24/33] vm_destroy: delete ip from ipam Stefan Hanreich
2023-11-17 11:40 ` [pve-devel] [PATCH v4 qemu-server 25/33] nic hotplug: add_dhcp_mapping Stefan Hanreich
2023-11-17 11:40 ` [pve-devel] [PATCH v4 qemu-server 26/33] nic online bridge/vlan change: link disconnect/reconnect Stefan Hanreich
2023-11-17 11:40 ` [pve-devel] [PATCH v4 pve-container 27/33] nic hotplug : add|del ips in ipam Stefan Hanreich
2023-11-21 13:47   ` [pve-devel] applied-series: " Wolfgang Bumiller
2023-11-17 11:40 ` [pve-devel] [PATCH v4 pve-container 28/33] vm_destroy: remove ips from ipam for all interfaces Stefan Hanreich
2023-11-17 11:40 ` [pve-devel] [PATCH v4 pve-container 29/33] vm_create|restore: create ips in ipam Stefan Hanreich
2023-11-17 11:40 ` [pve-devel] [PATCH v4 pve-container 30/33] vm_clone : create ips in ipams Stefan Hanreich
2023-11-17 11:40 ` [pve-devel] [PATCH v4 pve-container 31/33] vm_apply_pending: add|del ips from ipam for offline changes Stefan Hanreich
2023-11-17 11:40 ` [pve-devel] [PATCH v4 pve-container 32/33] lxc-pve-prestart-hook : add_dhcp_mapping Stefan Hanreich
2023-11-17 11:40 ` [pve-devel] [PATCH v4 pve-docs 33/33] sdn: dhcp: Add documentation for DHCP Stefan Hanreich
2023-11-21 19:03   ` [pve-devel] applied: " Thomas Lamprecht
2023-11-17 15:47 ` [pve-devel] [PATCH v4 cluster/network/manager/qemu-server/container/docs 00/33] Add support for DHCP servers to SDN DERUMIER, Alexandre
2023-11-17 16:05   ` Stefan Hanreich
2023-11-17 16:07     ` Stefan Hanreich
2023-11-17 16:09     ` DERUMIER, Alexandre
2023-11-17 20:44       ` DERUMIER, Alexandre
2023-11-21 11:23   ` Stefan Lendl
2023-11-21 13:02     ` DERUMIER, Alexandre
2023-11-21 13:25     ` DERUMIER, Alexandre
2023-11-21 13:28     ` DERUMIER, Alexandre
2023-11-21 16:34       ` Stefan Lendl
2023-11-21 18:15         ` DERUMIER, Alexandre
2023-11-22  8:06         ` DERUMIER, Alexandre
2023-11-18 14:38 ` DERUMIER, Alexandre
2023-11-20 16:42 ` 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=00b0eb49-a0e2-4bee-a408-969132ef92b5@proxmox.com \
    --to=d.csapak@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    --cc=s.hanreich@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal