]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/qemu/MachineEdit.js
ui: MachineEdit: add option for machine version pinning
[pve-manager.git] / www / manager6 / qemu / MachineEdit.js
CommitLineData
9dbddec7
SR
1Ext.define('PVE.qemu.MachineInputPanel', {
2 extend: 'Proxmox.panel.InputPanel',
3 xtype: 'pveMachineInputPanel',
4
a51b2c33
SR
5 controller: {
6 xclass: 'Ext.app.ViewController',
7 control: {
8 'combobox[name=machine]': {
9 change: 'onMachineChange',
10 },
11 },
12 onMachineChange: function(field, value) {
13 let me = this;
14 let version = me.lookup('version');
15 let store = version.getStore();
16 let type = value === 'q35' ? 'q35' : 'i440fx';
17 store.clearFilter();
18 store.addFilter(val =>
19 (val.data.name === 'latest' || val.data.name.indexOf(type) !== -1));
20 version.setValue('latest');
21 },
22 },
23
24 onGetValues: function(values) {
25 if (values.version && values.version !== 'latest') {
26 values.machine = values.version;
27 delete values.delete;
28 }
29 delete values.version;
30 return values;
31 },
32
33 setValues: function(values) {
34 let me = this;
35
36 if (values.machine !== '__default__' && values.machine !== 'q35') {
37 values.version = values.machine;
38 values.machine = values.version.match(/q35/) ? 'q35' : '__default__';
39
40 // avoid hiding a pinned version
41 Ext.ComponentQuery.query("#advancedcb")[0].setValue(true);
42 }
43
44 this.callParent(arguments);
45 },
46
9dbddec7
SR
47 items: [{
48 name: 'machine',
a51b2c33 49 reference: 'machine',
9dbddec7
SR
50 xtype: 'proxmoxKVComboBox',
51 fieldLabel: gettext('Machine'),
52 comboItems: [
53 ['__default__', PVE.Utils.render_qemu_machine('')],
54 ['q35', 'q35'],
55 ],
56 }],
a51b2c33
SR
57
58 advancedItems: [{
59 name: 'version',
60 reference: 'version',
61 xtype: 'combobox',
62 fieldLabel: gettext('Version'),
63 value: 'latest',
64 allowBlank: false,
65 editable: false,
66 valueField: 'name',
67 displayField: 'name',
68 queryParam: false,
69 store: {
70 autoLoad: true,
71 fields: ['name'],
72 proxy: {
73 type: 'proxmox',
74 url: "/api2/json/nodes/localhost/machine-types",
75 },
76 listeners: {
77 load: function(records) {
78 this.insert(0, { name: 'latest' });
79 },
80 },
81 },
82 }],
9dbddec7
SR
83});
84
85Ext.define('PVE.qemu.MachineEdit', {
86 extend: 'Proxmox.window.Edit',
87
88 subject: gettext('Machine'),
89
90 items: [{
91 xtype: 'pveMachineInputPanel',
92 }],
93
94 initComponent: function() {
95 let me = this;
96
97 me.callParent();
98
99 me.load({
100 success: function(response) {
101 let vmconfig = response.result.data;
102 let machine = vmconfig.machine || '__default__';
103 me.setValues({ machine: machine });
104 },
105 });
106 },
107});