public inbox for pve-devel@lists.proxmox.com
 help / color / mirror / Atom feed
From: Dominik Csapak <d.csapak@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [PATCH manager v2 05/17] ui: qemu: add architecture specific defaults and helpers
Date: Tue,  3 Feb 2026 11:00:10 +0100	[thread overview]
Message-ID: <20260203102118.1430545-6-d.csapak@proxmox.com> (raw)
In-Reply-To: <20260203102118.1430545-1-d.csapak@proxmox.com>

Introduce a new singleton 'PVE.qemu.Architecture', that contains nearly all
architecture specific settings such as renderers, defaults and filters.

This provides a single place to modify architecture specific behavior,
or add new architectures the gui should handle.

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
---
 www/manager6/Makefile             |   1 +
 www/manager6/qemu/Architecture.js | 104 ++++++++++++++++++++++++++++++
 2 files changed, 105 insertions(+)
 create mode 100644 www/manager6/qemu/Architecture.js

diff --git a/www/manager6/Makefile b/www/manager6/Makefile
index 8857045c..8f9c53c4 100644
--- a/www/manager6/Makefile
+++ b/www/manager6/Makefile
@@ -5,6 +5,7 @@ BIOME ?= proxmox-biome
 JSSRC= 							\
 	Parser.js					\
 	StateProvider.js				\
+	qemu/Architecture.js				\
 	Utils.js					\
 	UIOptions.js					\
 	Toolkit.js					\
diff --git a/www/manager6/qemu/Architecture.js b/www/manager6/qemu/Architecture.js
new file mode 100644
index 00000000..21aabd26
--- /dev/null
+++ b/www/manager6/qemu/Architecture.js
@@ -0,0 +1,104 @@
+/* This file defines the helpers, defaults and limtis for various vCPU architectures, such
+ * as x86_64, and aarch64.
+ *
+ * To add a new architecture, add the respective entry in the defaults/renderers and selection.
+ */
+Ext.define('PVE.qemu.Architecture', {
+    singleton: true,
+
+    selection: [
+        ['__default__', `${Proxmox.Utils.defaultText} (${gettext('Host Architecture')})`],
+        ['x86_64', gettext('x86 (64-bit)')],
+        ['aarch64', gettext('ARM (64-bit)')],
+    ],
+
+    // filter for PVE.Utils.kvm_ostypes
+    kvmOSTypes: {
+        x86_64: {
+            bases: undefined, // include all
+            ostypes: undefined, // include all
+        },
+        aarch64: {
+            bases: ['Linux', 'Other'],
+            ostypes: ['l26', 'other'],
+        },
+    },
+
+    defaultProcessorModel: {
+        x86_64: 'x86-64-v2-AES',
+        aarch64: 'cortex-a57',
+    },
+
+    defaultMachines: {
+        x86_64: 'pc',
+        aarch64: 'virt',
+    },
+
+    defaultCDDrive: {
+        x86_64: ['ide', 2],
+        aarch64: ['scsi', 2],
+    },
+
+    allowedScsiHw: {
+        x86_64: [
+            '__default__',
+            'lsi',
+            'lsi53c810',
+            'megasas',
+            'virtio-scsi-pci',
+            'virtio-scsi-single',
+            'pvscsi',
+        ],
+        aarch64: ['virtio-scsi-pci', 'virtio-scsi-single'],
+    },
+
+    allowedMachines: {
+        x86_64: ['__default__', 'q35'], // __default__ is i440fx
+        aarch64: ['__default__'], // __default__ is virt
+    },
+
+    allowedBusses: {
+        x86_64: ['ide', 'sata', 'virtio', 'scsi', 'unused'],
+        aarch64: ['sata', 'virtio', 'scsi', 'unused'],
+    },
+
+    allowedFirmware: {
+        x86_64: ['__default__', 'seabios', 'ovmf'], // default is seabios
+        aarch64: ['ovmf'],
+    },
+
+    render_vcpu_architecture: 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;
+        }
+    },
+
+    // returns the resulting architecture from a given arch and
+    // the nodename, in case the architecture is set to default or empty
+    getNodeArchitecture: function (architecture, nodename) {
+        if (architecture === '__default__') {
+            architecture = undefined;
+        }
+
+        let hostArchitecture = PVE.data.ResourceStore.getNodeById(nodename)?.data.architecture;
+
+        return architecture ?? hostArchitecture ?? 'x86_64';
+    },
+
+    // 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');
+    },
+});
-- 
2.47.3





  parent reply	other threads:[~2026-02-03 10:22 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-03 10:00 [PATCH manager v2 00/17] enable qemu vm architecture selection Dominik Csapak
2026-02-03 10:00 ` [PATCH manager v2 01/17] api/pvestatd: broadcast and expose non-x86 host architecture Dominik Csapak
2026-02-03 13:56   ` Thomas Lamprecht
2026-02-03 15:07   ` Thomas Lamprecht
2026-02-03 10:00 ` [PATCH manager v2 02/17] ui: qemu: wizard: refactor ostype and cd selector into an OSPanel Dominik Csapak
2026-02-03 10:00 ` [PATCH manager v2 03/17] ui: form: add filtered KVComboBox Dominik Csapak
2026-02-03 10:00 ` [PATCH manager v2 04/17] ui: resource store: add architecture field Dominik Csapak
2026-02-03 10:00 ` Dominik Csapak [this message]
2026-02-03 10:00 ` [PATCH manager v2 06/17] ui: qemu: add architecture field in wizard and hardware view Dominik Csapak
2026-02-03 10:00 ` [PATCH manager v2 07/17] ui: qemu: make scsi hw selector architecture aware Dominik Csapak
2026-02-03 10:00 ` [PATCH manager v2 08/17] ui: qemu: make osdefaults " Dominik Csapak
2026-02-03 10:00 ` [PATCH manager v2 09/17] ui: qemu: make os type selector " Dominik Csapak
2026-02-03 10:00 ` [PATCH manager v2 10/17] ui: qemu: make machine panels/fields " Dominik Csapak
2026-02-03 10:00 ` [PATCH manager v2 11/17] ui: qemu: make bios selector " Dominik Csapak
2026-02-03 10:00 ` [PATCH manager v2 12/17] ui: qemu: make sortByPreviousUsage " Dominik Csapak
2026-02-03 10:00 ` [PATCH manager v2 13/17] ui: qemu: wizard: use defaults to populate machine and bios Dominik Csapak
2026-02-03 10:00 ` [PATCH manager v2 14/17] ui: qemu: wizard: make iso confid architecture specific Dominik Csapak
2026-02-03 10:00 ` [PATCH manager v2 15/17] ui: qemu: make bus selector architecture aware Dominik Csapak
2026-02-03 10:00 ` [PATCH manager v2 16/17] ui: qemu: make processor edit " Dominik Csapak
2026-02-03 10:00 ` [PATCH manager v2 17/17] ui: qemu: change ui default for cpu model Dominik Csapak
2026-02-03 10:56 ` [PATCH manager v2 00/17] enable qemu vm architecture selection Dominik Csapak
2026-02-03 13:34 ` Thomas Lamprecht

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260203102118.1430545-6-d.csapak@proxmox.com \
    --to=d.csapak@proxmox.com \
    --cc=pve-devel@lists.proxmox.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal