]> git.proxmox.com Git - pve-manager.git/commitdiff
ui: machine: add viommu ComboBox
authorMarkus Frank <m.frank@proxmox.com>
Mon, 15 Apr 2024 08:50:01 +0000 (10:50 +0200)
committerDominik Csapak <d.csapak@proxmox.com>
Mon, 22 Apr 2024 12:51:43 +0000 (14:51 +0200)
Added a proxmoxKVComboBox for selecting a vIOMMU implementation for a VM.
If i440fx is selected, another ComboBox will be enabled/visible that does not
have the Intel option, as Intel-vIOMMU is not compatible with i440fx.

Uses the new machine property-string from the qemu-server's "config: define
machine schema as property-string" commit and the viommu option added in the
qemu-server's "fix #3784: config: Parameter for guest vIOMMU + test-cases"
commit.

Signed-off-by: Markus Frank <m.frank@proxmox.com>
www/manager6/qemu/MachineEdit.js

index f928c80c1650dfd0acc18e0334ab2f73f19156b3..48c72c1df749b1183725c2d75a5b270fa7cbcbdc 100644 (file)
@@ -2,6 +2,15 @@ Ext.define('PVE.qemu.MachineInputPanel', {
     extend: 'Proxmox.panel.InputPanel',
     xtype: 'pveMachineInputPanel',
 
+    viewModel: {
+       data: {
+           type: '__default__',
+       },
+       formulas: {
+           q35: get => get('type') === 'q35',
+       },
+    },
+
     controller: {
        xclass: 'Ext.app.ViewController',
        control: {
@@ -35,17 +44,29 @@ Ext.define('PVE.qemu.MachineInputPanel', {
     },
 
     onGetValues: function(values) {
+       if (values.delete === 'machine' && values.viommu) {
+           delete values.delete;
+           values.machine = 'pc';
+       }
        if (values.version && values.version !== 'latest') {
            values.machine = values.version;
            delete values.delete;
        }
        delete values.version;
-       return values;
+       if (values.delete === 'machine' && !values.viommu) {
+           return values;
+       }
+       let ret = {};
+       ret.machine = PVE.Parser.printPropertyString(values, 'machine');
+       return ret;
     },
 
     setValues: function(values) {
        let me = this;
 
+       let machineConf = PVE.Parser.parsePropertyString(values.machine, 'type');
+       values.machine = machineConf.type;
+
        me.isWindows = values.isWindows;
        if (values.machine === 'pc') {
            values.machine = '__default__';
@@ -58,6 +79,9 @@ Ext.define('PVE.qemu.MachineInputPanel', {
                values.version = 'pc-q35-5.1';
            }
        }
+
+       values.viommu = machineConf.viommu || '__default__';
+
        if (values.machine !== '__default__' && values.machine !== 'q35') {
            values.version = values.machine;
            values.machine = values.version.match(/q35/) ? 'q35' : '__default__';
@@ -78,6 +102,9 @@ Ext.define('PVE.qemu.MachineInputPanel', {
            ['__default__', PVE.Utils.render_qemu_machine('')],
            ['q35', 'q35'],
        ],
+       bind: {
+           value: '{type}',
+       },
     },
 
     advancedItems: [
@@ -113,6 +140,39 @@ Ext.define('PVE.qemu.MachineInputPanel', {
            fieldLabel: gettext('Note'),
            value: gettext('Machine version change may affect hardware layout and settings in the guest OS.'),
        },
+       {
+           xtype: 'proxmoxKVComboBox',
+           name: 'viommu',
+           fieldLabel: gettext('vIOMMU'),
+           reference: 'viommu-q35',
+           deleteEmpty: false,
+           value: '__default__',
+           comboItems: [
+               ['__default__', Proxmox.Utils.defaultText + ' (None)'],
+               ['intel', 'Intel'],
+               ['virtio', 'VirtIO'],
+           ],
+           bind: {
+               hidden: '{!q35}',
+               disabled: '{!q35}',
+           },
+       },
+       {
+           xtype: 'proxmoxKVComboBox',
+           name: 'viommu',
+           fieldLabel: gettext('vIOMMU'),
+           reference: 'viommu-i440fx',
+           deleteEmpty: false,
+           value: '__default__',
+           comboItems: [
+               ['__default__', Proxmox.Utils.defaultText + ' (None)'],
+               ['virtio', 'VirtIO'],
+           ],
+           bind: {
+               hidden: '{q35}',
+               disabled: '{q35}',
+           },
+       },
     ],
 });