]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/qemu/MachineEdit.js
update shipped appliance info index
[pve-manager.git] / www / manager6 / qemu / MachineEdit.js
CommitLineData
9dbddec7
SR
1Ext.define('PVE.qemu.MachineInputPanel', {
2 extend: 'Proxmox.panel.InputPanel',
3 xtype: 'pveMachineInputPanel',
592d9172 4 onlineHelp: 'qm_machine_type',
9dbddec7 5
10df2d5a
MF
6 viewModel: {
7 data: {
8 type: '__default__',
9 },
10 formulas: {
11 q35: get => get('type') === 'q35',
12 },
13 },
14
a51b2c33
SR
15 controller: {
16 xclass: 'Ext.app.ViewController',
17 control: {
18 'combobox[name=machine]': {
19 change: 'onMachineChange',
20 },
21 },
22 onMachineChange: function(field, value) {
23 let me = this;
24 let version = me.lookup('version');
25 let store = version.getStore();
6c2bc326 26 let oldRec = store.findRecord('id', version.getValue(), 0, false, false, true);
a51b2c33
SR
27 let type = value === 'q35' ? 'q35' : 'i440fx';
28 store.clearFilter();
cfdb6ac6 29 store.addFilter(val => val.data.id === 'latest' || val.data.type === type);
c0cb5eee
TL
30 if (!me.getView().isWindows) {
31 version.setValue('latest');
32 } else {
33 store.isWindows = true;
6c2bc326
TL
34 if (!oldRec) {
35 return;
36 }
37 let oldVers = oldRec.data.version;
38 // we already filtered by correct type, so just check version property
39 let rec = store.findRecord('version', oldVers, 0, false, false, true);
40 if (rec) {
41 version.select(rec);
42 }
c0cb5eee 43 }
a51b2c33
SR
44 },
45 },
46
47 onGetValues: function(values) {
10df2d5a
MF
48 if (values.delete === 'machine' && values.viommu) {
49 delete values.delete;
50 values.machine = 'pc';
51 }
a51b2c33
SR
52 if (values.version && values.version !== 'latest') {
53 values.machine = values.version;
54 delete values.delete;
55 }
56 delete values.version;
10df2d5a
MF
57 if (values.delete === 'machine' && !values.viommu) {
58 return values;
59 }
60 let ret = {};
61 ret.machine = PVE.Parser.printPropertyString(values, 'machine');
62 return ret;
a51b2c33
SR
63 },
64
65 setValues: function(values) {
66 let me = this;
67
10df2d5a
MF
68 let machineConf = PVE.Parser.parsePropertyString(values.machine, 'type');
69 values.machine = machineConf.type;
70
c0cb5eee 71 me.isWindows = values.isWindows;
34aec351
SR
72 if (values.machine === 'pc') {
73 values.machine = '__default__';
74 }
c0cb5eee 75
34aec351
SR
76 if (me.isWindows) {
77 if (values.machine === '__default__') {
78 values.version = 'pc-i440fx-5.1';
79 } else if (values.machine === 'q35') {
80 values.version = 'pc-q35-5.1';
81 }
82 }
10df2d5a
MF
83
84 values.viommu = machineConf.viommu || '__default__';
85
a51b2c33
SR
86 if (values.machine !== '__default__' && values.machine !== 'q35') {
87 values.version = values.machine;
88 values.machine = values.version.match(/q35/) ? 'q35' : '__default__';
89
90 // avoid hiding a pinned version
aeb61a52 91 me.setAdvancedVisible(true);
a51b2c33
SR
92 }
93
94 this.callParent(arguments);
95 },
96
60cc233a
TL
97 items: {
98 xtype: 'proxmoxKVComboBox',
9dbddec7 99 name: 'machine',
a51b2c33 100 reference: 'machine',
9dbddec7
SR
101 fieldLabel: gettext('Machine'),
102 comboItems: [
103 ['__default__', PVE.Utils.render_qemu_machine('')],
104 ['q35', 'q35'],
105 ],
10df2d5a
MF
106 bind: {
107 value: '{type}',
108 },
60cc233a 109 },
a51b2c33 110
432639a8
TL
111 advancedItems: [
112 {
113 xtype: 'combobox',
114 name: 'version',
115 reference: 'version',
116 fieldLabel: gettext('Version'),
117 emptyText: gettext('Latest'),
118 value: 'latest',
119 editable: false,
120 valueField: 'id',
121 displayField: 'version',
122 queryParam: false,
123 store: {
124 autoLoad: true,
125 fields: ['id', 'type', 'version'],
126 proxy: {
127 type: 'proxmox',
128 url: "/api2/json/nodes/localhost/capabilities/qemu/machines",
129 },
130 listeners: {
131 load: function(records) {
132 if (!this.isWindows) {
133 this.insert(0, { id: 'latest', type: 'any', version: gettext('Latest') });
134 }
135 },
a51b2c33
SR
136 },
137 },
138 },
432639a8
TL
139 {
140 xtype: 'displayfield',
141 fieldLabel: gettext('Note'),
142 value: gettext('Machine version change may affect hardware layout and settings in the guest OS.'),
143 },
10df2d5a
MF
144 {
145 xtype: 'proxmoxKVComboBox',
146 name: 'viommu',
147 fieldLabel: gettext('vIOMMU'),
148 reference: 'viommu-q35',
149 deleteEmpty: false,
150 value: '__default__',
151 comboItems: [
152 ['__default__', Proxmox.Utils.defaultText + ' (None)'],
21639845 153 ['intel', gettext('Intel (AMD Compatible)')],
10df2d5a
MF
154 ['virtio', 'VirtIO'],
155 ],
156 bind: {
157 hidden: '{!q35}',
158 disabled: '{!q35}',
159 },
160 },
161 {
162 xtype: 'proxmoxKVComboBox',
163 name: 'viommu',
164 fieldLabel: gettext('vIOMMU'),
165 reference: 'viommu-i440fx',
166 deleteEmpty: false,
167 value: '__default__',
168 comboItems: [
169 ['__default__', Proxmox.Utils.defaultText + ' (None)'],
170 ['virtio', 'VirtIO'],
171 ],
172 bind: {
173 hidden: '{q35}',
174 disabled: '{q35}',
175 },
176 },
432639a8 177 ],
9dbddec7
SR
178});
179
180Ext.define('PVE.qemu.MachineEdit', {
181 extend: 'Proxmox.window.Edit',
182
183 subject: gettext('Machine'),
184
60cc233a 185 items: {
9dbddec7 186 xtype: 'pveMachineInputPanel',
60cc233a 187 },
9dbddec7 188
432639a8
TL
189 width: 400,
190
9dbddec7
SR
191 initComponent: function() {
192 let me = this;
193
194 me.callParent();
195
196 me.load({
197 success: function(response) {
c0cb5eee
TL
198 let conf = response.result.data;
199 let values = {
200 machine: conf.machine || '__default__',
201 };
43798244 202 values.isWindows = PVE.Utils.is_windows(conf.ostype);
c0cb5eee 203 me.setValues(values);
9dbddec7
SR
204 },
205 });
206 },
207});