From baf8bb7941a924f66c0a7c15c5720326c49b6070 Mon Sep 17 00:00:00 2001 From: Michal Fox Date: Tue, 29 Sep 2026 16:23:31 +0200 Subject: [PATCH] fix #7108: ui: ipset: do not offer aliases that are already added When adding an entry to an IPSet, the alias selector lists all aliases, including those that are already part of the IPSet. Selecting one of them only results in an "already exists" error from the API. Pass the current entries of the IPSet to the add window and filter the matching aliases out of the selector. Aliases are stored in the IPSet with the same scoped reference the selector uses as value, so an exact comparison is sufficient. Signed-off-by: Michal Fox Reviewed-by: Arthur Bied-Charreton Tested-by: Arthur Bied-Charreton Link: https://lore.proxmox.com/20260929142331.2990690-1-me@dualfroz.com --- www/manager6/form/IPRefSelector.js | 4 ++++ www/manager6/panel/IPSet.js | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/www/manager6/form/IPRefSelector.js b/www/manager6/form/IPRefSelector.js index 08fafd9..7be09b6 100644 --- a/www/manager6/form/IPRefSelector.js +++ b/www/manager6/form/IPRefSelector.js @@ -8,6 +8,9 @@ Ext.define('PVE.form.IPRefSelector', { ref_type: undefined, // undefined = any [undefined, 'ipset' or 'alias'] + // list of references that should not be offered, e.g. because they are already in use + excludeRefs: [], + valueField: 'scopedref', displayField: 'ref', notFoundIsValid: true, @@ -54,6 +57,7 @@ Ext.define('PVE.form.IPRefSelector', { property: 'ref', direction: 'ASC', }, + filters: [(rec) => !me.excludeRefs.includes(rec.data.scopedref)], }); var columns = []; diff --git a/www/manager6/panel/IPSet.js b/www/manager6/panel/IPSet.js index 9e0203a..d510ae6 100644 --- a/www/manager6/panel/IPSet.js +++ b/www/manager6/panel/IPSet.js @@ -187,6 +187,9 @@ Ext.define('PVE.IPSetCidrEdit', { cidr: undefined, + // entries already in the IPSet, not offered again when adding a new one + existingCidrs: [], + initComponent: function () { var me = this; @@ -211,6 +214,7 @@ Ext.define('PVE.IPSetCidrEdit', { xtype: 'pveIPRefSelector', name: 'cidr', ref_type: 'alias', + excludeRefs: me.existingCidrs, autoSelect: false, editable: true, base_url: me.list_refs_url, @@ -359,6 +363,7 @@ Ext.define( var win = Ext.create('PVE.IPSetCidrEdit', { base_url: me.base_url, list_refs_url: me.list_refs_url, + existingCidrs: store.collect('cidr'), }); win.show(); win.on('destroy', reload);