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