From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 279861FF14F for ; Fri, 08 May 2026 15:41:51 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id B55031A338; Fri, 8 May 2026 15:41:50 +0200 (CEST) From: Dominik Csapak To: pve-devel@lists.proxmox.com Subject: [PATCH manager v2 2/3] ui: factor out the guest key nic regex check Date: Fri, 8 May 2026 15:38:05 +0200 Message-ID: <20260508134110.4001168-3-d.csapak@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260508134110.4001168-1-d.csapak@proxmox.com> References: <20260508134110.4001168-1-d.csapak@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.050 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: 4KOKX7RL4VQD7MV6SB6ZYY76VR5SM23A X-Message-ID-Hash: 4KOKX7RL4VQD7MV6SB6ZYY76VR5SM23A X-MailFrom: d.csapak@proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: It's better to have these regexes in one place, otherwise they're easily typoed. I noticed that some of the checks were not anchored at the end, but all valid values these can have, should match the new check as well. Signed-off-by: Dominik Csapak --- www/manager6/Utils.js | 7 +++++++ www/manager6/lxc/Network.js | 4 ++-- www/manager6/qemu/BootOrderEdit.js | 6 +++--- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js index 6a27f253..035539fb 100644 --- a/www/manager6/Utils.js +++ b/www/manager6/Utils.js @@ -1969,6 +1969,13 @@ Ext.define('PVE.Utils', { return !!value.toString().match(/media=cdrom/); }, + keyIsNic: function (value) { + if (!value) { + return false; + } + return !!value.toString().match(/^net\d+$/); + }, + sortByPreviousUsage: function (vmconfig, nodename) { let controllerList = ['ide', 'virtio', 'scsi', 'sata']; let usedControllers = {}; diff --git a/www/manager6/lxc/Network.js b/www/manager6/lxc/Network.js index e56d47c0..b2737471 100644 --- a/www/manager6/lxc/Network.js +++ b/www/manager6/lxc/Network.js @@ -89,7 +89,7 @@ Ext.define('PVE.lxc.NetworkInputPanel', { value: cdata.name, validator: function (value) { for (const [key, netRaw] of Object.entries(me.dataCache)) { - if (!key.match(/^net\d+/) || key === me.ifname) { + if (!PVE.Utils.keyIsNic(key) || key === me.ifname) { continue; } let net = PVE.Parser.parseLxcNetwork(netRaw); @@ -385,7 +385,7 @@ Ext.define( let records = []; me.dataCache = confResponse.result.data || {}; for (const [key, value] of Object.entries(confResponse.result.data)) { - if (!key.match(/^net\d+/)) { + if (!PVE.Utils.keyIsNic(key)) { continue; } let config = PVE.Parser.parseLxcNetwork(value); diff --git a/www/manager6/qemu/BootOrderEdit.js b/www/manager6/qemu/BootOrderEdit.js index c7117c1a..12f3b672 100644 --- a/www/manager6/qemu/BootOrderEdit.js +++ b/www/manager6/qemu/BootOrderEdit.js @@ -60,7 +60,7 @@ Ext.define('PVE.qemu.BootOrderPanel', { isBootdev: function (dev, value) { return ( (this.isDisk(dev) && !this.isCloudinit(value)) || - /^net\d+/.test(dev) || + PVE.Utils.keyIsNic(dev) || /^hostpci\d+/.test(dev) || (/^usb\d+/.test(dev) && !/spice/.test(value)) ); @@ -105,7 +105,7 @@ Ext.define('PVE.qemu.BootOrderPanel', { }); } else if (orderList[i] === 'n') { Ext.Object.each(me.vmconfig, function (key, value) { - if (/^net\d+/.test(key)) { + if (PVE.Utils.keyIsNic(key)) { list.push(key); } }); @@ -194,7 +194,7 @@ Ext.define('PVE.qemu.BootOrderPanel', { let icon = '', iconCls; - if (value.match(/^net\d+$/)) { + if (PVE.Utils.keyIsNic(value)) { iconCls = 'exchange'; } else if (PVE.Utils.diskIsCdrom(desc)) { metaData.tdCls = 'pve-itype-icon-cdrom'; -- 2.47.3