]> git.proxmox.com Git - pve-manager.git/blame_incremental - www/manager6/qemu/HDEdit.js
qemu/HDEdit: whitespace cleanup
[pve-manager.git] / www / manager6 / qemu / HDEdit.js
... / ...
CommitLineData
1/*jslint confusion: true */
2/* 'change' property is assigned a string and then a function */
3Ext.define('PVE.qemu.HDInputPanel', {
4 extend: 'PVE.panel.InputPanel',
5 alias: 'widget.pveQemuHDInputPanel',
6 onlineHelp: 'qm_hard_disk',
7
8 insideWizard: false,
9
10 unused: false, // ADD usused disk imaged
11
12 vmconfig: {}, // used to select usused disks
13
14 controller: {
15
16 xclass: 'Ext.app.ViewController',
17
18 onControllerChange: function(field) {
19 var value = field.getValue();
20 this.lookup('iothread').setDisabled(!value.match(/^(virtio|scsi)/));
21 },
22
23 control: {
24 'field[name=controller]': {
25 change: 'onControllerChange',
26 afterrender: 'onControllerChange'
27 },
28 'field[name=hdstorage]': {
29 change: function(f, value) {
30 if (!value) { // initial store loading fires an unwanted 'change'
31 return;
32 }
33 var me = this.getView();
34 var rec = f.store.getById(value);
35 if (rec.data.type === 'iscsi') {
36 me.hdfilesel.setStorage(value);
37 me.hdfilesel.setDisabled(false);
38 me.formatsel.setValue('raw');
39 me.formatsel.setDisabled(true);
40 me.hdfilesel.setVisible(true);
41 me.hdsizesel.setDisabled(true);
42 me.hdsizesel.setVisible(false);
43 } else if (rec.data.type === 'lvm' ||
44 rec.data.type === 'lvmthin' ||
45 rec.data.type === 'drbd' ||
46 rec.data.type === 'rbd' ||
47 rec.data.type === 'sheepdog' ||
48 rec.data.type === 'zfs' ||
49 rec.data.type === 'zfspool') {
50 me.hdfilesel.setDisabled(true);
51 me.hdfilesel.setVisible(false);
52 me.formatsel.setValue('raw');
53 me.formatsel.setDisabled(true);
54 me.hdsizesel.setDisabled(false);
55 me.hdsizesel.setVisible(true);
56 } else {
57 me.hdfilesel.setDisabled(true);
58 me.hdfilesel.setVisible(false);
59 me.formatsel.setValue('qcow2');
60 me.formatsel.setDisabled(false);
61 me.hdsizesel.setDisabled(false);
62 me.hdsizesel.setVisible(true);
63 }
64 }
65 }
66 }
67 },
68
69 onGetValues: function(values) {
70 var me = this;
71
72 var confid = me.confid || (values.controller + values.deviceid);
73
74 if (me.unused) {
75 me.drive.file = me.vmconfig[values.unusedId];
76 confid = values.controller + values.deviceid;
77 } else if (me.isCreate) {
78 if (values.hdimage) {
79 me.drive.file = values.hdimage;
80 } else {
81 me.drive.file = values.hdstorage + ":" + values.disksize;
82 }
83 me.drive.format = values.diskformat;
84 }
85
86 if (values.nobackup) {
87 me.drive.backup = 'no';
88 } else {
89 delete me.drive.backup;
90 }
91
92 if (values.noreplicate) {
93 me.drive.replicate = 'no';
94 } else {
95 delete me.drive.replicate;
96 }
97
98 if (values.discard) {
99 me.drive.discard = 'on';
100 } else {
101 delete me.drive.discard;
102 }
103
104 if (values.iothread && confid.match(/^(virtio|scsi)\d+$/)) {
105 me.drive.iothread = 'on';
106 } else {
107 delete me.drive.iothread;
108 }
109
110 if (values.cache) {
111 me.drive.cache = values.cache;
112 } else {
113 delete me.drive.cache;
114 }
115
116 var params = {};
117
118 params[confid] = PVE.Parser.printQemuDrive(me.drive);
119
120 return params;
121 },
122
123 setVMConfig: function(vmconfig) {
124 var me = this;
125
126 me.vmconfig = vmconfig;
127
128 if (me.bussel) {
129 me.bussel.setVMConfig(vmconfig, true);
130 }
131 if (me.unusedDisks) {
132 var disklist = [];
133 Ext.Object.each(vmconfig, function(key, value) {
134 if (key.match(/^unused\d+$/)) {
135 disklist.push([key, value]);
136 }
137 });
138 me.unusedDisks.store.loadData(disklist);
139 me.unusedDisks.setValue(me.confid);
140 }
141 },
142
143 setDrive: function(drive) {
144 var me = this;
145
146 me.drive = drive;
147
148 var values = {};
149 var match = drive.file.match(/^([^:]+):/);
150 if (match) {
151 values.hdstorage = match[1];
152 }
153
154 values.hdimage = drive.file;
155 values.nobackup = !PVE.Parser.parseBoolean(drive.backup, 1);
156 values.noreplicate = !PVE.Parser.parseBoolean(drive.replicate, 1);
157 values.diskformat = drive.format || 'raw';
158 values.cache = drive.cache || '__default__';
159 values.discard = (drive.discard === 'on');
160 values.iothread = PVE.Parser.parseBoolean(drive.iothread);
161
162 me.setValues(values);
163 },
164
165 setNodename: function(nodename) {
166 var me = this;
167 me.hdstoragesel.setNodename(nodename);
168 me.hdfilesel.setStorage(undefined, nodename);
169 },
170
171 initComponent : function() {
172 var me = this;
173
174 me.drive = {};
175
176 me.column1 = [];
177 me.column2 = [];
178
179 if (!me.confid || me.unused) {
180 me.bussel = Ext.create('PVE.form.ControllerSelector', {
181 vmconfig: me.insideWizard ? {ide2: 'cdrom'} : {}
182 });
183 me.column1.push(me.bussel);
184 }
185
186 if (me.unused) {
187 me.unusedDisks = Ext.create('PVE.form.KVComboBox', {
188 name: 'unusedId',
189 fieldLabel: gettext('Disk image'),
190 matchFieldWidth: false,
191 listConfig: {
192 width: 350
193 },
194 data: [],
195 allowBlank: false
196 });
197 me.column1.push(me.unusedDisks);
198 } else if (me.isCreate) {
199 me.formatsel = Ext.create('PVE.form.DiskFormatSelector', {
200 name: 'diskformat',
201 fieldLabel: gettext('Format'),
202 value: 'qcow2',
203 allowBlank: false
204 });
205
206 me.hdfilesel = Ext.create('PVE.form.FileSelector', {
207 name: 'hdimage',
208 nodename: me.nodename,
209 storageContent: 'images',
210 fieldLabel: gettext('Disk image'),
211 disabled: true,
212 hidden: true,
213 allowBlank: false
214 });
215
216 me.hdsizesel = Ext.createWidget('numberfield', {
217 name: 'disksize',
218 minValue: 0.001,
219 maxValue: 128*1024,
220 decimalPrecision: 3,
221 value: '32',
222 fieldLabel: gettext('Disk size') + ' (GB)',
223 allowBlank: false
224 });
225
226 me.hdstoragesel = Ext.create('PVE.form.StorageSelector', {
227 name: 'hdstorage',
228 nodename: me.nodename,
229 fieldLabel: gettext('Storage'),
230 storageContent: 'images',
231 autoSelect: me.insideWizard,
232 allowBlank: false
233 });
234 me.column1.push(me.hdstoragesel);
235 me.column1.push(me.hdfilesel);
236 me.column1.push(me.hdsizesel);
237 me.column1.push(me.formatsel);
238
239 } else {
240 me.column1.push({
241 xtype: 'textfield',
242 disabled: true,
243 submitValue: false,
244 fieldLabel: gettext('Disk image'),
245 name: 'hdimage'
246 });
247 }
248
249 me.column2.push({
250 xtype: 'CacheTypeSelector',
251 name: 'cache',
252 value: '__default__',
253 fieldLabel: gettext('Cache')
254 });
255
256 me.column2.push({
257 xtype: 'pvecheckbox',
258 fieldLabel: gettext('No backup'),
259 name: 'nobackup'
260 });
261
262 me.column2.push({
263 xtype: 'pvecheckbox',
264 hidden: me.insideWizard,
265 fieldLabel: gettext('Skip replication'),
266 name: 'noreplicate'
267 });
268
269 me.column2.push({
270 xtype: 'pvecheckbox',
271 fieldLabel: gettext('Discard'),
272 name: 'discard'
273 });
274
275 me.column2.push({
276 xtype: 'pvecheckbox',
277 disabled: me.insideWizard || (me.confid && !me.confid.match(/^(virtio|scsi)/)),
278 fieldLabel: gettext('IO thread'),
279 reference: 'iothread',
280 name: 'iothread'
281 });
282
283 me.callParent();
284 }
285});
286/*jslint confusion: false */
287
288Ext.define('PVE.qemu.HDEdit', {
289 extend: 'PVE.window.Edit',
290
291 isAdd: true,
292
293 initComponent : function() {
294 var me = this;
295
296 var nodename = me.pveSelNode.data.node;
297 if (!nodename) {
298 throw "no node name specified";
299 }
300
301 var unused = me.confid && me.confid.match(/^unused\d+$/);
302
303 me.isCreate = me.confid ? unused : true;
304
305 var ipanel = Ext.create('PVE.qemu.HDInputPanel', {
306 confid: me.confid,
307 nodename: nodename,
308 unused: unused,
309 isCreate: me.isCreate
310 });
311
312 var subject;
313 if (unused) {
314 me.subject = gettext('Unused Disk');
315 } else if (me.isCreate) {
316 me.subject = gettext('Hard Disk');
317 } else {
318 me.subject = gettext('Hard Disk') + ' (' + me.confid + ')';
319 }
320
321 me.items = [ ipanel ];
322
323 me.callParent();
324 /*jslint confusion: true*/
325 /* 'data' is assigned an empty array in same file, and here we
326 * use it like an object
327 */
328 me.load({
329 success: function(response, options) {
330 ipanel.setVMConfig(response.result.data);
331 if (me.confid) {
332 var value = response.result.data[me.confid];
333 var drive = PVE.Parser.parseQemuDrive(me.confid, value);
334 if (!drive) {
335 Ext.Msg.alert(gettext('Error'), 'Unable to parse drive options');
336 me.close();
337 return;
338 }
339 ipanel.setDrive(drive);
340 me.isValid(); // trigger validation
341 }
342 }
343 });
344 /*jslint confusion: false*/
345 }
346});