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 286981FF13B for ; Wed, 28 Jan 2026 13:31:06 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 8515710F2C; Wed, 28 Jan 2026 13:31:09 +0100 (CET) From: Dominik Csapak To: pve-devel@lists.proxmox.com Date: Wed, 28 Jan 2026 13:18:04 +0100 Message-ID: <20260128123035.2576774-4-d.csapak@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260128123035.2576774-1-d.csapak@proxmox.com> References: <20260128123035.2576774-1-d.csapak@proxmox.com> MIME-Version: 1.0 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 Subject: [pve-devel] [PATCH manager 03/10] ui: qemu: add architecture field in wizard and hardware view X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" adds a new architecture field to the wizard to select the target architecture for the virtual machine. When the selected architecture does not match the host architecture of the selected node, disable kvm. Also show the architecture in the hardware view when it does not match the host architecture (and add it automatically to the editors so we can access it there). Signed-off-by: Dominik Csapak --- www/manager6/Utils.js | 11 +++++++++++ www/manager6/qemu/CreateWizard.js | 26 ++++++++++++++++++++++++++ www/manager6/qemu/HardwareView.js | 16 ++++++++++++++++ 3 files changed, 53 insertions(+) diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js index 2992f655..d8b212bc 100644 --- a/www/manager6/Utils.js +++ b/www/manager6/Utils.js @@ -2067,6 +2067,17 @@ Ext.define('PVE.Utils', { ); return Ext.htmlEncode(description); }, + + // returns if the given architecture is the native host architecture of the given nodename + isHostArchitecture: function (architecture, nodename) { + if (architecture === '__default__') { + architecture = undefined; + } + + let hostArchitecture = PVE.data.ResourceStore.getNodeById(nodename)?.data.architecture; + + return (architecture ?? 'x86_64') === (hostArchitecture ?? 'x86_64'); + }, }, singleton: true, diff --git a/www/manager6/qemu/CreateWizard.js b/www/manager6/qemu/CreateWizard.js index 341324c8..d01c77e9 100644 --- a/www/manager6/qemu/CreateWizard.js +++ b/www/manager6/qemu/CreateWizard.js @@ -8,6 +8,7 @@ Ext.define('PVE.qemu.CreateWizard', { nodename: '', current: { scsihw: '', + architecture: '__default__', }, }, formulas: { @@ -122,6 +123,23 @@ Ext.define('PVE.qemu.CreateWizard', { deleteDefaultValue: true, fieldLabel: gettext('Start at boot'), }, + { + xtype: 'proxmoxKVComboBox', + name: 'arch', + value: '__default__', + fieldLabel: gettext('Architecture'), + bind: { + value: '{current.architecture}', + }, + comboItems: [ + [ + '__default__', + `${Proxmox.Utils.defaultText} (${gettext('Host Architecture')})`, + ], + ['x86_64', gettext('x86 (64-bit)')], + ['aarch64', gettext('ARM (64-bit)')], + ], + }, ], advancedColumn2: [ { @@ -280,6 +298,10 @@ Ext.define('PVE.qemu.CreateWizard', { kv.boot = boot; } + if (kv.arch && !PVE.Utils.isHostArchitecture(kv.arch, kv.nodename)) { + kv.kvm = 0; + } + Ext.Object.each(kv, function (key, value) { if (key === 'delete') { // ignore @@ -310,6 +332,10 @@ Ext.define('PVE.qemu.CreateWizard', { kv.boot = boot; } + if (kv.arch && !PVE.Utils.isHostArchitecture(kv.arch, nodename)) { + kv.kvm = 0; + } + Proxmox.Utils.API2Request({ url: '/nodes/' + nodename + '/qemu', waitMsgTarget: wizard, diff --git a/www/manager6/qemu/HardwareView.js b/www/manager6/qemu/HardwareView.js index cf5e2a0f..b7cc7856 100644 --- a/www/manager6/qemu/HardwareView.js +++ b/www/manager6/qemu/HardwareView.js @@ -66,6 +66,21 @@ Ext.define('PVE.qemu.HardwareView', { }; let rows = { + arch: { + header: gettext('Architecture'), + iconCls: 'university', // TODO: find/design better icon + renderer: function (value) { + switch (value ?? '') { + case '': + case 'x86_64': + return gettext('x86 (64-bit)'); + case 'aarch64': + return gettext('ARM (64-bit)'); + default: + return Proxmox.Utils.unknownText; + } + }, + }, memory: { header: gettext('Memory'), editor: caps.vms['VM.Config.Memory'] ? 'PVE.qemu.MemoryEdit' : undefined, @@ -419,6 +434,7 @@ Ext.define('PVE.qemu.HardwareView', { pveSelNode: me.pveSelNode, confid: rec.data.key, url: `/api2/extjs/${baseurl}`, + arch: me.getObjectValue('arch'), listeners: { destroy: () => me.reload(), }, -- 2.47.3 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel