]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/qemu/CreateWizard.js
fix #1113 use a LSI controller for legacy OSes
[pve-manager.git] / www / manager6 / qemu / CreateWizard.js
1 // fixme: howto avoid jslint type confusion?
2 /*jslint confusion: true */
3 Ext.define('PVE.qemu.CreateWizard', {
4 extend: 'PVE.window.Wizard',
5 alias: 'widget.pveQemuCreateWizard',
6 qemuScsiController: undefined,
7
8 initComponent: function() {
9 var me = this;
10
11 var summarystore = Ext.create('Ext.data.Store', {
12 model: 'KeyValue',
13 sorters: [
14 {
15 property : 'key',
16 direction: 'ASC'
17 }
18 ]
19 });
20
21 var cdpanel = Ext.create('PVE.qemu.CDInputPanel', {
22 title: gettext('CD/DVD'),
23 confid: 'ide2',
24 fieldDefaults: {
25 labelWidth: 160
26 },
27 insideWizard: true
28 });
29
30 var hdpanel = Ext.create('PVE.qemu.HDInputPanel', {
31 title: gettext('Hard Disk'),
32 create: true,
33 insideWizard: true
34 });
35
36 var networkpanel = Ext.create('PVE.qemu.NetworkInputPanel', {
37 title: gettext('Network'),
38 insideWizard: true
39 });
40
41 Ext.applyIf(me, {
42 subject: gettext('Virtual Machine'),
43 items: [
44 {
45 xtype: 'inputpanel',
46 title: gettext('General'),
47 onlineHelp: 'chapter-qm.html#_general_settings',
48 column1: [
49 {
50 xtype: 'pveNodeSelector',
51 name: 'nodename',
52 selectCurNode: true,
53 fieldLabel: gettext('Node'),
54 allowBlank: false,
55 onlineValidator: true,
56 listeners: {
57 change: function(f, value) {
58 networkpanel.setNodename(value);
59 hdpanel.setNodename(value);
60 cdpanel.setNodename(value);
61 }
62 }
63 },
64 {
65 xtype: 'pveVMIDSelector',
66 name: 'vmid',
67 value: '',
68 loadNextFreeVMID: true,
69 validateExists: false
70 },
71 {
72 xtype: 'textfield',
73 name: 'name',
74 vtype: 'DnsName',
75 value: '',
76 fieldLabel: gettext('Name'),
77 allowBlank: true
78 }
79 ],
80 column2: [
81 {
82 xtype: 'pvePoolSelector',
83 fieldLabel: gettext('Resource Pool'),
84 name: 'pool',
85 value: '',
86 allowBlank: true
87 }
88 ],
89 onGetValues: function(values) {
90 if (!values.name) {
91 delete values.name;
92 }
93 if (!values.pool) {
94 delete values.pool;
95 }
96 return values;
97 }
98 },
99 {
100 title: gettext('OS'),
101 xtype: 'pveQemuOSTypePanel',
102 insideWizard: true
103 },
104 cdpanel,
105 hdpanel,
106 {
107 xtype: 'pveQemuProcessorPanel',
108 title: gettext('CPU')
109 },
110 {
111 xtype: 'pveQemuMemoryPanel',
112 insideWizard: true,
113 title: gettext('Memory')
114 },
115 networkpanel,
116 {
117 title: gettext('Confirm'),
118 layout: 'fit',
119 items: [
120 {
121 title: gettext('Settings'),
122 xtype: 'grid',
123 store: summarystore,
124 columns: [
125 {header: 'Key', width: 150, dataIndex: 'key'},
126 {header: 'Value', flex: 1, dataIndex: 'value'}
127 ]
128 }
129 ],
130 listeners: {
131 show: function(panel) {
132 var form = me.down('form').getForm();
133 var kv = me.getValues();
134 var data = [];
135 Ext.Object.each(kv, function(key, value) {
136 if (key === 'delete') { // ignore
137 return;
138 }
139 var html = Ext.htmlEncode(Ext.JSON.encode(value));
140 data.push({ key: key, value: value });
141 });
142 summarystore.suspendEvents();
143 summarystore.removeAll();
144 summarystore.add(data);
145 summarystore.sort();
146 summarystore.resumeEvents();
147 summarystore.fireEvent('refresh');
148
149 }
150 },
151 onSubmit: function() {
152 var kv = me.getValues();
153 delete kv['delete'];
154
155 var nodename = kv.nodename;
156 delete kv.nodename;
157
158 if (me.qemuScsiController) {
159 kv.scsihw = me.qemuScsiController;
160 }
161
162 PVE.Utils.API2Request({
163 url: '/nodes/' + nodename + '/qemu',
164 waitMsgTarget: me,
165 method: 'POST',
166 params: kv,
167 success: function(response){
168 me.close();
169 },
170 failure: function(response, opts) {
171 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
172 }
173 });
174 }
175 }
176 ]
177 });
178
179 me.callParent();
180 }
181 });
182
183
184
185