Ext.define('PVE.qemu.MachineInputPanel', {
extend: 'Proxmox.panel.InputPanel',
xtype: 'pveMachineInputPanel',
+ onlineHelp: 'qm_machine_type',
+
+ viewModel: {
+ data: {
+ type: '__default__',
+ },
+ formulas: {
+ q35: get => get('type') === 'q35',
+ },
+ },
controller: {
xclass: 'Ext.app.ViewController',
let oldRec = store.findRecord('id', version.getValue(), 0, false, false, true);
let type = value === 'q35' ? 'q35' : 'i440fx';
store.clearFilter();
- store.addFilter(val => (val.data.id === 'latest' || val.data.type === type));
+ store.addFilter(val => val.data.id === 'latest' || val.data.type === type);
if (!me.getView().isWindows) {
version.setValue('latest');
} else {
},
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__';
+ }
+
+ if (me.isWindows) {
+ if (values.machine === '__default__') {
+ values.version = 'pc-i440fx-5.1';
+ } else if (values.machine === 'q35') {
+ values.version = 'pc-q35-5.1';
+ }
+ }
+
+ values.viommu = machineConf.viommu || '__default__';
if (values.machine !== '__default__' && values.machine !== 'q35') {
values.version = values.machine;
// avoid hiding a pinned version
me.setAdvancedVisible(true);
}
- if (me.isWindows) {
- if (values.machine === '__default__' || values.machine === 'pc') {
- values.version = 'pc-i440fx-5.1';
- } else if (values.machine === 'q35') {
- values.version = 'pc-q35-5.1';
- }
- }
this.callParent(arguments);
},
['__default__', PVE.Utils.render_qemu_machine('')],
['q35', 'q35'],
],
+ bind: {
+ value: '{type}',
+ },
},
advancedItems: [
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', gettext('Intel (AMD Compatible)')],
+ ['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}',
+ },
+ },
],
});
let values = {
machine: conf.machine || '__default__',
};
- if (conf.ostype && conf.ostype.match(/^(win|wvista|wxp|w2k)/i)) {
- values.isWindows = true;
- }
+ values.isWindows = PVE.Utils.is_windows(conf.ostype);
me.setValues(values);
},
});