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 A9D091FF14F for ; Fri, 08 May 2026 15:41:45 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 8493A1A21B; Fri, 8 May 2026 15:41:45 +0200 (CEST) From: Dominik Csapak To: pve-devel@lists.proxmox.com Subject: [PATCH manager v2 1/3] ui: utils: factor out 'media=cdrom' check Date: Fri, 8 May 2026 15:38:04 +0200 Message-ID: <20260508134110.4001168-2-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: KRD2M6A2FZIBLP6BODYFJURCHAOVWZED X-Message-ID-Hash: KRD2M6A2FZIBLP6BODYFJURCHAOVWZED 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: this is a check we have all over the place and is prone to typos when one tries to check it in a new place. introduce a 'diskIsCdrom' check in Utils and use that in every place. Signed-off-by: Dominik Csapak --- www/manager6/Utils.js | 9 ++++++++- www/manager6/qemu/BootOrderEdit.js | 6 +++--- www/manager6/qemu/CreateWizard.js | 4 ++-- www/manager6/qemu/HardwareView.js | 6 +++--- www/manager6/window/GuestImport.js | 2 +- 5 files changed, 17 insertions(+), 10 deletions(-) diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js index be95d216..6a27f253 100644 --- a/www/manager6/Utils.js +++ b/www/manager6/Utils.js @@ -1962,6 +1962,13 @@ Ext.define('PVE.Utils', { return true; }, + diskIsCdrom: function (value) { + if (!value) { + return false; + } + return !!value.toString().match(/media=cdrom/); + }, + sortByPreviousUsage: function (vmconfig, nodename) { let controllerList = ['ide', 'virtio', 'scsi', 'sata']; let usedControllers = {}; @@ -1972,7 +1979,7 @@ Ext.define('PVE.Utils', { for (const property of Object.keys(vmconfig)) { if ( property.match(PVE.Utils.bus_match) && - !vmconfig[property].match(/media=cdrom/) + !PVE.Utils.diskIsCdrom(vmconfig[property]) ) { const foundController = property.match(PVE.Utils.bus_match)[1]; usedControllers[foundController]++; diff --git a/www/manager6/qemu/BootOrderEdit.js b/www/manager6/qemu/BootOrderEdit.js index 521a3d6e..c7117c1a 100644 --- a/www/manager6/qemu/BootOrderEdit.js +++ b/www/manager6/qemu/BootOrderEdit.js @@ -51,7 +51,7 @@ Ext.define('PVE.qemu.BootOrderPanel', { }, }, - isCloudinit: (v) => v.match(/media=cdrom/) && v.match(/[:/]vm-\d+-cloudinit/), + isCloudinit: (v) => PVE.Utils.diskIsCdrom(v) && v.match(/[:/]vm-\d+-cloudinit/), isDisk: function (value) { return PVE.Utils.bus_match.test(value); @@ -97,7 +97,7 @@ Ext.define('PVE.qemu.BootOrderPanel', { Ext.Object.each(me.vmconfig, function (key, value) { if ( me.isDisk(key) && - value.match(/media=cdrom/) && + PVE.Utils.diskIsCdrom(value) && !me.isCloudinit(value) ) { list.push(key); @@ -196,7 +196,7 @@ Ext.define('PVE.qemu.BootOrderPanel', { iconCls; if (value.match(/^net\d+$/)) { iconCls = 'exchange'; - } else if (desc.match(/media=cdrom/)) { + } else if (PVE.Utils.diskIsCdrom(desc)) { metaData.tdCls = 'pve-itype-icon-cdrom'; } else { iconCls = 'hdd-o'; diff --git a/www/manager6/qemu/CreateWizard.js b/www/manager6/qemu/CreateWizard.js index 5eb784c4..2ee209da 100644 --- a/www/manager6/qemu/CreateWizard.js +++ b/www/manager6/qemu/CreateWizard.js @@ -33,14 +33,14 @@ Ext.define('PVE.qemu.CreateWizard', { // cannot know which one is a bootable iso and hardcodes the known values (ide0/2, net0) calculateBootOrder: function (values) { // user selected windows + second cdrom - if (values.ide0 && values.ide0.match(/media=cdrom/)) { + if (values.ide0 && PVE.Utils.diskIsCdrom(values.ide0)) { let disk; PVE.Utils.forEachBus(['ide', 'scsi', 'virtio', 'sata'], (type, id) => { let confId = type + id; if (!values[confId]) { return undefined; } - if (values[confId].match(/media=cdrom/)) { + if (PVE.Utils.diskIsCdrom(values[confId])) { return undefined; } disk = confId; diff --git a/www/manager6/qemu/HardwareView.js b/www/manager6/qemu/HardwareView.js index 64cb4a7b..471e3a8f 100644 --- a/www/manager6/qemu/HardwareView.js +++ b/www/manager6/qemu/HardwareView.js @@ -22,7 +22,7 @@ Ext.define('PVE.qemu.HardwareView', { if (value.match(/vm-.*-cloudinit/)) { iconCls = 'cloud'; txt = rowdef.cloudheader; - } else if (value.match(/media=cdrom/)) { + } else if (PVE.Utils.diskIsCdrom(value)) { metaData.tdCls = 'pve-itype-icon-cdrom'; return rowdef.cdheader; } @@ -417,7 +417,7 @@ Ext.define('PVE.qemu.HardwareView', { let value = me.getObjectValue(rec.data.key, '', true); if (isCloudInitKey(value)) { return; - } else if (value.match(/media=cdrom/)) { + } else if (PVE.Utils.diskIsCdrom(value)) { editor = 'PVE.qemu.CDEdit'; } else if (!diskCap) { return; @@ -757,7 +757,7 @@ Ext.define('PVE.qemu.HardwareView', { const isRunning = me.pveSelNode.data.running; const isCloudInit = isCloudInitKey(value); - const isCDRom = value && !!value.toString().match(/media=cdrom/); + const isCDRom = value && PVE.Utils.diskIsCdrom(value); const isUnusedDisk = key.match(/^unused\d+/); const isUsedDisk = !isUnusedDisk && row.isOnStorageBus && !isCDRom; diff --git a/www/manager6/window/GuestImport.js b/www/manager6/window/GuestImport.js index 9c9b0f1b..9a01e81d 100644 --- a/www/manager6/window/GuestImport.js +++ b/www/manager6/window/GuestImport.js @@ -1065,7 +1065,7 @@ Ext.define('PVE.window.GuestImport', { let cdroms = []; for (const [id, value] of Object.entries(me.vmConfig)) { - if (!Ext.isString(value) || !value.match(/media=cdrom/)) { + if (!Ext.isString(value) || !PVE.Utils.diskIsCdrom(value)) { continue; } cdroms.push({ -- 2.47.3