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 <[email protected]>
---
 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
[email protected]
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to