]> git.proxmox.com Git - pve-manager-legacy.git/commitdiff
ui: MachineEdit: add option for machine version pinning
authorStefan Reiter <s.reiter@proxmox.com>
Thu, 4 Mar 2021 12:52:09 +0000 (13:52 +0100)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Fri, 5 Mar 2021 20:31:32 +0000 (21:31 +0100)
Hidden behind "Advanced" options, as to not confuse inexperienced users.

Signed-off-by: Stefan Reiter <s.reiter@proxmox.com>
Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
www/manager6/qemu/MachineEdit.js

index 8a3a6f7af21095c5f733cb2eefef2358044dd0e8..4eab6b8f11684405f578889441e03eac6af3700a 100644 (file)
@@ -2,8 +2,51 @@ Ext.define('PVE.qemu.MachineInputPanel', {
     extend: 'Proxmox.panel.InputPanel',
     xtype: 'pveMachineInputPanel',
 
+    controller: {
+       xclass: 'Ext.app.ViewController',
+       control: {
+           'combobox[name=machine]': {
+               change: 'onMachineChange',
+           },
+       },
+       onMachineChange: function(field, value) {
+           let me = this;
+           let version = me.lookup('version');
+           let store = version.getStore();
+           let type = value === 'q35' ? 'q35' : 'i440fx';
+           store.clearFilter();
+           store.addFilter(val =>
+               (val.data.name === 'latest' || val.data.name.indexOf(type) !== -1));
+           version.setValue('latest');
+       },
+    },
+
+    onGetValues: function(values) {
+       if (values.version && values.version !== 'latest') {
+           values.machine = values.version;
+           delete values.delete;
+       }
+       delete values.version;
+       return values;
+    },
+
+    setValues: function(values) {
+       let me = this;
+
+       if (values.machine !== '__default__' && values.machine !== 'q35') {
+           values.version = values.machine;
+           values.machine = values.version.match(/q35/) ? 'q35' : '__default__';
+
+           // avoid hiding a pinned version
+           Ext.ComponentQuery.query("#advancedcb")[0].setValue(true);
+       }
+
+       this.callParent(arguments);
+    },
+
     items: [{
        name: 'machine',
+       reference: 'machine',
        xtype: 'proxmoxKVComboBox',
        fieldLabel: gettext('Machine'),
        comboItems: [
@@ -11,6 +54,32 @@ Ext.define('PVE.qemu.MachineInputPanel', {
            ['q35', 'q35'],
        ],
     }],
+
+    advancedItems: [{
+       name: 'version',
+       reference: 'version',
+       xtype: 'combobox',
+       fieldLabel: gettext('Version'),
+       value: 'latest',
+       allowBlank: false,
+       editable: false,
+       valueField: 'name',
+       displayField: 'name',
+       queryParam: false,
+       store: {
+           autoLoad: true,
+           fields: ['name'],
+           proxy: {
+               type: 'proxmox',
+               url: "/api2/json/nodes/localhost/machine-types",
+           },
+           listeners: {
+               load: function(records) {
+                   this.insert(0, { name: 'latest' });
+               },
+           },
+       },
+    }],
 });
 
 Ext.define('PVE.qemu.MachineEdit', {