From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id A17A51FF137 for ; Tue, 03 Feb 2026 11:22:53 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 58B2619F89; Tue, 3 Feb 2026 11:22:26 +0100 (CET) From: Dominik Csapak To: pve-devel@lists.proxmox.com Subject: [PATCH manager v2 09/17] ui: qemu: make os type selector architecture aware Date: Tue, 3 Feb 2026 11:00:14 +0100 Message-ID: <20260203102118.1430545-10-d.csapak@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260203102118.1430545-1-d.csapak@proxmox.com> References: <20260203102118.1430545-1-d.csapak@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.032 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: D3MB4BHFQWB4ZPXJ2UBAT25WPI43GRLI X-Message-ID-Hash: D3MB4BHFQWB4ZPXJ2UBAT25WPI43GRLI 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: A list of valid ostypes for each architecture is defined in PVE.Utils, and this is used for the os type selector to only show relevant os types. Use a setter for 'arch' so we can bind the values again in the wizard, similar to how the scsi selector is done. Also update 'me.nodename' in 'setNodename'. This was never necessary until now, but it is with the 'setArch' logic. Signed-off-by: Dominik Csapak --- www/manager6/qemu/OSPanel.js | 10 ++++++++-- www/manager6/qemu/OSTypeEdit.js | 26 ++++++++++++++++++++++++++ www/manager6/qemu/Options.js | 4 +++- 3 files changed, 37 insertions(+), 3 deletions(-) diff --git a/www/manager6/qemu/OSPanel.js b/www/manager6/qemu/OSPanel.js index dd44c865..136c0316 100644 --- a/www/manager6/qemu/OSPanel.js +++ b/www/manager6/qemu/OSPanel.js @@ -36,7 +36,9 @@ Ext.define('PVE.qemu.OSPanel', { onOSTypeChange: function (field) { var me = this, ostype = field.getValue(); - var targetValues = PVE.qemu.OSDefaults.getDefaults(ostype); + + let arch = me.getViewModel().get('current.architecture'); + var targetValues = PVE.qemu.OSDefaults.getDefaults(ostype, arch); me.setWidget('pveBusSelector', targetValues.busType); me.setWidget('pveNetworkCardSelector', targetValues.networkCard); @@ -77,7 +79,8 @@ Ext.define('PVE.qemu.OSPanel', { updateVMConfig(); me.setWidget('pveBusSelector', 'scsi'); let ostype = me.getView().down('[name=ostype]').getValue(); - let targetValues = PVE.qemu.OSDefaults.getDefaults(ostype); + let arch = vm.get('current.architecture'); + let targetValues = PVE.qemu.OSDefaults.getDefaults(ostype, arch); me.setWidget('pveBusSelector', targetValues.busType); } }, @@ -110,6 +113,9 @@ Ext.define('PVE.qemu.OSPanel', { { xtype: 'pveQemuOSTypePanel', insideWizard: true, + bind: { + arch: '{current.architecture}', + }, }, { xtype: 'inputpanel', diff --git a/www/manager6/qemu/OSTypeEdit.js b/www/manager6/qemu/OSTypeEdit.js index a9508539..dd84d40e 100644 --- a/www/manager6/qemu/OSTypeEdit.js +++ b/www/manager6/qemu/OSTypeEdit.js @@ -17,6 +17,25 @@ Ext.define('PVE.qemu.OSTypeInputPanel', { }, }, + setArch: function (arch) { + let me = this; + me.arch = arch; + + let osbaseStore = me.lookup('osbase').getStore(); + osbaseStore.clearFilter(); + let list = PVE.qemu.Architecture.kvmOSTypes[arch]?.bases; + if (list) { + osbaseStore.addFilter((rec) => list.indexOf(rec.data.field1) !== -1); + } + + let ostypeStore = me.lookup('ostype').getStore(); + ostypeStore.clearFilter(); + list = PVE.qemu.Architecture.kvmOSTypes[arch]?.ostypes; + if (list) { + ostypeStore.addFilter((rec) => list.indexOf(rec.data.val) !== -1); + } + }, + onGetValues: function (values) { if (values.ide0) { let drive = { @@ -36,6 +55,7 @@ Ext.define('PVE.qemu.OSTypeInputPanel', { xtype: 'combobox', submitValue: false, name: 'osbase', + reference: 'osbase', fieldLabel: gettext('Type'), editable: false, queryMode: 'local', @@ -77,6 +97,7 @@ Ext.define('PVE.qemu.OSTypeInputPanel', { Ext.define('PVE.qemu.OSTypeEdit', { extend: 'Proxmox.window.Edit', + alias: 'widget.pveQemuOSTypeEdit', subject: 'OS Type', @@ -92,6 +113,11 @@ Ext.define('PVE.qemu.OSTypeEdit', { var value = response.result.data.ostype || 'other'; var osinfo = PVE.Utils.get_kvm_osinfo(value); me.setValues({ ostype: value, osbase: osinfo.base }); + let arch = PVE.qemu.Architecture.getNodeArchitecture( + response.result.data.arch, + me.nodename, + ); + me.down('pveQemuOSTypePanel').setArch(arch); }, }); }, diff --git a/www/manager6/qemu/Options.js b/www/manager6/qemu/Options.js index 0c0de699..8a4721a0 100644 --- a/www/manager6/qemu/Options.js +++ b/www/manager6/qemu/Options.js @@ -86,7 +86,9 @@ Ext.define('PVE.qemu.Options', { }, ostype: { header: gettext('OS Type'), - editor: caps.vms['VM.Config.Options'] ? 'PVE.qemu.OSTypeEdit' : undefined, + editor: caps.vms['VM.Config.Options'] + ? { xtype: 'pveQemuOSTypeEdit', nodename } + : undefined, renderer: PVE.Utils.render_kvm_ostype, defaultValue: 'other', }, -- 2.47.3