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 1AAF21FF142 for ; Mon, 02 Mar 2026 14:30:00 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id CE85832C24; Mon, 2 Mar 2026 14:29:58 +0100 (CET) From: Dominik Csapak To: pve-devel@lists.proxmox.com Subject: [PATCH manager v3 09/18] ui: qemu: make os type selector architecture aware Date: Mon, 2 Mar 2026 14:20:57 +0100 Message-ID: <20260302132913.3169037-10-d.csapak@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260302132913.3169037-1-d.csapak@proxmox.com> References: <20260302132913.3169037-1-d.csapak@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL 0.035 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: SL2W4DJZ7IIGAU4CNIMUQNOV5RXOD7P2 X-Message-ID-Hash: SL2W4DJZ7IIGAU4CNIMUQNOV5RXOD7P2 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..5c79164f 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.getGuestArchitecture( + 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