From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [IPv6:2a0f:8001:1:32::40]) by lore.proxmox.com (Postfix) with ESMTPS id 58EDC1FF0B7 for ; Tue, 25 Aug 2026 15:02:24 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id 1CFB2215E6; Tue, 25 Aug 2026 15:02:23 +0200 (CEST) From: Maximiliano Sandoval To: Nicolas Frey Subject: Re: [PATCH pve-manager 1/4] ui: iso selector: add option to warn about virtio versions with issues In-Reply-To: <20260825110238.215790-2-n.frey@proxmox.com> (Nicolas Frey's message of "Tue, 25 Aug 2026 13:02:35 +0200") References: <20260825110238.215790-1-n.frey@proxmox.com> <20260825110238.215790-2-n.frey@proxmox.com> User-Agent: mu4e 1.12.9; emacs 30.1 Date: Tue, 25 Aug 2026 15:02:17 +0200 Message-ID: MIME-Version: 1.0 Content-Type: text/plain X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1787662907203 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.901 Adjusted score from AWL reputation of From: address DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment (newer systems) RCVD_IN_DNSWL_MED -2.3 Sender listed at https://www.dnswl.org/, medium trust 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: VPF4V6TZLWYRSHXWNB2B2X2G75MCMADN X-Message-ID-Hash: VPF4V6TZLWYRSHXWNB2B2X2G75MCMADN X-MailFrom: m.sandoval@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 CC: pve-devel@lists.proxmox.com X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Nicolas Frey writes: > based on the known issues as seen on the wiki. If warnVirtio is true, > the filename is matched against "virtio-win-x.x.x.iso" and checks > whether the version number in the filename is in any "from - to" version > range in `virtioIssues`. > > Signed-off-by: Nicolas Frey > --- > www/manager6/form/IsoSelector.js | 68 +++++++++++++++++++++++++++++++- > 1 file changed, 66 insertions(+), 2 deletions(-) > > diff --git a/www/manager6/form/IsoSelector.js b/www/manager6/form/IsoSelector.js > index b2d94ed3..ae6b8d65 100644 > --- a/www/manager6/form/IsoSelector.js > +++ b/www/manager6/form/IsoSelector.js > @@ -10,6 +10,7 @@ Ext.define('PVE.form.IsoSelector', { > > nodename: undefined, > insideWizard: false, > + warnVirtio: false, > labelWidth: undefined, > labelAlign: 'right', > > @@ -63,6 +64,61 @@ Ext.define('PVE.form.IsoSelector', { > return me.callParent([disabled]); > }, > > + virtioIssues: [ > + { > + from: '0.1.215', > + to: '0.1.262', > + message: gettext('Upgrading to version 0.1.266 or newer is recommended.'), > + }, > + { > + from: '0.1.285', > + to: '0.1.285', > + message: gettext('Downgrading to version 0.1.271 is recommended.'), > + }, > + ], > + > + checkVirtioVersion: function (filename) { > + let me = this; > + let warningBox = me.lookup('virtioWarning'); > + > + const compareVersions = (a, b) => { > + let pa = a.split('.').map(Number); > + let pb = b.split('.').map(Number); > + let max = Math.max(pa.length, pb.length); > + for (let i = 0; i < max; i++) { > + let cmp = (pa[i] || 0) - (pb[i] || 0); > + if (cmp !== 0) { > + return cmp; > + } > + } > + return 0; > + }; > + > + let match = (filename || '').match(/virtio-win[_-](\d+\.\d+\.\d+)/i); > + let version = match && match[1]; > + let issue = > + version && > + me.virtioIssues.find( > + (i) => compareVersions(version, i.from) >= 0 && compareVersions(version, i.to) <= 0, > + ); > + > + if (!issue) { > + warningBox.setHtml(''); > + return; > + } > + > + warningBox.setHtml( > + ' ' + > + gettext('This VirtIO driver version is known to') + > + ' ' + > + `${gettext( > + 'cause issues', > + )}` + > + '. ' + Please use a single gettext call in conjunction with format, e.g. something like Ext.String.format(gettext('Version {0} of the VirtIO drivers is known to causes issues. See {1} for more details), version, uri_with_html_blocks) > + issue.message, > + ); > + }, > + > referenceHolder: true, > > items: [ > @@ -105,10 +161,18 @@ Ext.define('PVE.form.IsoSelector', { > }, > allowBlank: false, > listeners: { > - change: function () { > - this.up('pveIsoSelector').checkChange(); > + change: function (_field, value) { > + let selector = this.up('pveIsoSelector'); > + if (selector.warnVirtio) { > + selector.checkVirtioVersion(value); > + } > + selector.checkChange(); > }, > }, > }, > + { > + xtype: 'displayfield', > + reference: 'virtioWarning', > + }, > ], > }); -- Maximiliano