Am 28.01.26 um 1:30 PM schrieb Dominik Csapak:
> 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'),

Maybe 'vCPU Architecture' to be explicit?

> +                    bind: {
> +                        value: '{current.architecture}',
> +                    },
> +                    comboItems: [
> +                        [
> +                            '__default__',
> +                            `${Proxmox.Utils.defaultText} (${gettext('Host 
> Architecture')})`,
> +                        ],
> +                        ['x86_64', gettext('x86 (64-bit)')],
> +                        ['aarch64', gettext('ARM (64-bit)')],
> +                    ],
> +                },
>              ],
>              advancedColumn2: [
>                  {

Everything around it is related to startup (order), so it seems a bit
off IMHO. Should we put it further below by itself?

> @@ -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

Maybe just reuse the CPU one?

I noticed that the Arch can be removed via the UI button. I guess it's
better to disable the button, to avoid any accidents (since it can't be
added back and is a very unusual change to begin with).

> +                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(),
>                  },



_______________________________________________
pve-devel mailing list
[email protected]
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to