Ext.define('PVE.qemu.CreateWizard', {
extend: 'PVE.window.Wizard',
alias: 'widget.pveQemuCreateWizard',
- qemuScsiController: undefined,
+ mixins: ['Proxmox.Mixin.CBind'],
- initComponent: function() {
- var me = this;
+ viewModel: {
+ data: {
+ nodename: '',
+ current: {
+ scsihw: '',
+ },
+ },
+ },
+
+ cbindData: {
+ nodename: undefined,
+ },
+
+ subject: gettext('Virtual Machine'),
- var summarystore = Ext.create('Ext.data.Store', {
- model: 'KeyValue',
- sorters: [
+ items: [
+ {
+ xtype: 'inputpanel',
+ title: gettext('General'),
+ onlineHelp: 'qm_general_settings',
+ column1: [
{
- property : 'key',
- direction: 'ASC'
- }
- ]
- });
+ xtype: 'pveNodeSelector',
+ name: 'nodename',
+ cbind: {
+ selectCurNode: '{!nodename}',
+ preferredValue: '{nodename}',
+ },
+ bind: {
+ value: '{nodename}',
+ },
+ fieldLabel: gettext('Node'),
+ allowBlank: false,
+ onlineValidator: true,
+ },
+ {
+ xtype: 'pveGuestIDSelector',
+ name: 'vmid',
+ guestType: 'qemu',
+ value: '',
+ loadNextFreeID: true,
+ validateExists: false,
+ },
+ {
+ xtype: 'textfield',
+ name: 'name',
+ vtype: 'DnsName',
+ value: '',
+ fieldLabel: gettext('Name'),
+ allowBlank: true,
+ },
+ ],
+ column2: [
+ {
+ xtype: 'pvePoolSelector',
+ fieldLabel: gettext('Resource Pool'),
+ name: 'pool',
+ value: '',
+ allowBlank: true,
+ },
+ ],
+ advancedColumn1: [
+ {
+ xtype: 'proxmoxcheckbox',
+ name: 'onboot',
+ uncheckedValue: 0,
+ defaultValue: 0,
+ deleteDefaultValue: true,
+ fieldLabel: gettext('Start at boot'),
+ },
+ ],
+ advancedColumn2: [
+ {
+ xtype: 'textfield',
+ name: 'order',
+ defaultValue: '',
+ emptyText: 'any',
+ labelWidth: 120,
+ fieldLabel: gettext('Start/Shutdown order'),
+ },
+ {
+ xtype: 'textfield',
+ name: 'up',
+ defaultValue: '',
+ emptyText: 'default',
+ labelWidth: 120,
+ fieldLabel: gettext('Startup delay'),
+ },
+ {
+ xtype: 'textfield',
+ name: 'down',
+ defaultValue: '',
+ emptyText: 'default',
+ labelWidth: 120,
+ fieldLabel: gettext('Shutdown timeout'),
+ },
+ ],
+ onGetValues: function(values) {
+ ['name', 'pool', 'onboot', 'agent'].forEach(function(field) {
+ if (!values[field]) {
+ delete values[field];
+ }
+ });
- var cdpanel = Ext.create('PVE.qemu.CDInputPanel', {
- title: gettext('CD/DVD'),
- confid: 'ide2',
- fieldDefaults: {
- labelWidth: 160
- },
- insideWizard: true
- });
+ var res = PVE.Parser.printStartup({
+ order: values.order,
+ up: values.up,
+ down: values.down,
+ });
- var hdpanel = Ext.create('PVE.qemu.HDInputPanel', {
- title: gettext('Hard Disk'),
- isCreate: true,
- insideWizard: true
- });
+ if (res) {
+ values.startup = res;
+ }
- var networkpanel = Ext.create('PVE.qemu.NetworkInputPanel', {
- title: gettext('Network'),
- insideWizard: true
- });
+ delete values.order;
+ delete values.up;
+ delete values.down;
- Ext.applyIf(me, {
- subject: gettext('Virtual Machine'),
+ return values;
+ },
+ },
+ {
+ xtype: 'container',
+ layout: 'hbox',
+ defaults: {
+ flex: 1,
+ padding: '0 10',
+ },
+ title: gettext('OS'),
items: [
{
- xtype: 'inputpanel',
- title: gettext('General'),
- onlineHelp: 'qm_general_settings',
- column1: [
- {
- xtype: 'pveNodeSelector',
- name: 'nodename',
- selectCurNode: true,
- fieldLabel: gettext('Node'),
- allowBlank: false,
- onlineValidator: true,
- listeners: {
- change: function(f, value) {
- networkpanel.setNodename(value);
- hdpanel.setNodename(value);
- cdpanel.setNodename(value);
- }
- }
- },
- {
- xtype: 'pveGuestIDSelector',
- name: 'vmid',
- guestType: 'qemu',
- value: '',
- loadNextFreeID: true,
- validateExists: false
- },
- {
- xtype: 'textfield',
- name: 'name',
- vtype: 'DnsName',
- value: '',
- fieldLabel: gettext('Name'),
- allowBlank: true
- }
- ],
- column2: [
- {
- xtype: 'pvePoolSelector',
- fieldLabel: gettext('Resource Pool'),
- name: 'pool',
- value: '',
- allowBlank: true
- }
- ],
- onGetValues: function(values) {
- if (!values.name) {
- delete values.name;
- }
- if (!values.pool) {
- delete values.pool;
- }
- return values;
- }
+ xtype: 'pveQemuCDInputPanel',
+ bind: {
+ nodename: '{nodename}',
+ },
+ confid: 'ide2',
+ insideWizard: true,
},
{
- title: gettext('OS'),
xtype: 'pveQemuOSTypePanel',
- insideWizard: true
+ insideWizard: true,
},
- cdpanel,
- hdpanel,
+ ],
+ },
+ {
+ xtype: 'pveQemuSystemPanel',
+ title: gettext('System'),
+ isCreate: true,
+ insideWizard: true,
+ },
+ {
+ xtype: 'pveQemuHDInputPanel',
+ bind: {
+ nodename: '{nodename}',
+ },
+ title: gettext('Hard Disk'),
+ isCreate: true,
+ insideWizard: true,
+ },
+ {
+ xtype: 'pveQemuProcessorPanel',
+ insideWizard: true,
+ title: gettext('CPU'),
+ },
+ {
+ xtype: 'pveQemuMemoryPanel',
+ insideWizard: true,
+ title: gettext('Memory'),
+ },
+ {
+ xtype: 'pveQemuNetworkInputPanel',
+ bind: {
+ nodename: '{nodename}',
+ },
+ title: gettext('Network'),
+ insideWizard: true,
+ },
+ {
+ title: gettext('Confirm'),
+ layout: 'fit',
+ items: [
{
- xtype: 'pveQemuProcessorPanel',
- title: gettext('CPU')
+ xtype: 'grid',
+ store: {
+ model: 'KeyValue',
+ sorters: [{
+ property: 'key',
+ direction: 'ASC',
+ }],
+ },
+ columns: [
+ { header: 'Key', width: 150, dataIndex: 'key' },
+ { header: 'Value', flex: 1, dataIndex: 'value' },
+ ],
},
+ ],
+ dockedItems: [
{
- xtype: 'pveQemuMemoryPanel',
- insideWizard: true,
- title: gettext('Memory')
+ xtype: 'proxmoxcheckbox',
+ name: 'start',
+ dock: 'bottom',
+ margin: '5 0 0 0',
+ boxLabel: gettext('Start after created'),
},
- networkpanel,
- {
- title: gettext('Confirm'),
- layout: 'fit',
- items: [
- {
- title: gettext('Settings'),
- xtype: 'grid',
- store: summarystore,
- columns: [
- {header: 'Key', width: 150, dataIndex: 'key'},
- {header: 'Value', flex: 1, dataIndex: 'value'}
- ]
- }
- ],
- listeners: {
- show: function(panel) {
- var form = me.down('form').getForm();
- var kv = me.getValues();
- var data = [];
- Ext.Object.each(kv, function(key, value) {
- if (key === 'delete') { // ignore
- return;
- }
- var html = Ext.htmlEncode(Ext.JSON.encode(value));
- data.push({ key: key, value: value });
- });
- summarystore.suspendEvents();
- summarystore.removeAll();
- summarystore.add(data);
- summarystore.sort();
- summarystore.resumeEvents();
- summarystore.fireEvent('refresh');
-
+ ],
+ listeners: {
+ show: function(panel) {
+ var kv = this.up('window').getValues();
+ var data = [];
+ Ext.Object.each(kv, function(key, value) {
+ if (key === 'delete') { // ignore
+ return;
}
- },
- onSubmit: function() {
- var kv = me.getValues();
- delete kv['delete'];
-
- var nodename = kv.nodename;
- delete kv.nodename;
+ data.push({ key: key, value: value });
+ });
- if (me.qemuScsiController) {
- kv.scsihw = me.qemuScsiController;
- }
+ var summarystore = panel.down('grid').getStore();
+ summarystore.suspendEvents();
+ summarystore.removeAll();
+ summarystore.add(data);
+ summarystore.sort();
+ summarystore.resumeEvents();
+ summarystore.fireEvent('refresh');
+ },
+ },
+ onSubmit: function() {
+ var wizard = this.up('window');
+ var kv = wizard.getValues();
+ delete kv['delete'];
- PVE.Utils.API2Request({
- url: '/nodes/' + nodename + '/qemu',
- waitMsgTarget: me,
- method: 'POST',
- params: kv,
- success: function(response){
- me.close();
- },
- failure: function(response, opts) {
- Ext.Msg.alert(gettext('Error'), response.htmlStatus);
- }
- });
- }
- }
- ]
- });
+ var nodename = kv.nodename;
+ delete kv.nodename;
- me.callParent();
- }
+ Proxmox.Utils.API2Request({
+ url: '/nodes/' + nodename + '/qemu',
+ waitMsgTarget: wizard,
+ method: 'POST',
+ params: kv,
+ success: function(response) {
+ wizard.close();
+ },
+ failure: function(response, opts) {
+ Ext.Msg.alert(gettext('Error'), response.htmlStatus);
+ },
+ });
+ },
+ },
+ ],
});
-
-