]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/qemu/HDEdit.js
1 // fixme: howto avoid jslint type confusion?
2 /*jslint confusion: true */
3 Ext
.define('PVE.qemu.HDInputPanel', {
4 extend
: 'PVE.panel.InputPanel',
5 alias
: 'widget.PVE.qemu.HDInputPanel',
9 unused
: false, // ADD usused disk imaged
11 vmconfig
: {}, // used to select usused disks
15 xclass
: 'Ext.app.ViewController',
17 onControllerChange: function(field
) {
18 var value
= field
.getValue();
19 this.lookup('iothread').setDisabled(!value
.match(/^(virtio|scsi)/));
23 'field[name=controller]' : {
24 change
: 'onControllerChange',
25 afterrender
: 'onControllerChange'
30 onGetValues: function(values
) {
33 var confid
= me
.confid
|| (values
.controller
+ values
.deviceid
);
36 me
.drive
.file
= me
.vmconfig
[values
.unusedId
];
37 confid
= values
.controller
+ values
.deviceid
;
38 } else if (me
.create
) {
40 me
.drive
.file
= values
.hdimage
;
42 me
.drive
.file
= values
.hdstorage
+ ":" + values
.disksize
;
44 me
.drive
.format
= values
.diskformat
;
47 if (values
.nobackup
) {
48 me
.drive
.backup
= 'no';
50 delete me
.drive
.backup
;
54 me
.drive
.discard
= 'on';
56 delete me
.drive
.discard
;
59 if (values
.iothread
&& confid
.match(/^(virtio|scsi)\d+$/)) {
60 me
.drive
.iothread
= 'on';
62 delete me
.drive
.iothread
;
66 me
.drive
.cache
= values
.cache
;
68 delete me
.drive
.cache
;
73 params
[confid
] = PVE
.Parser
.printQemuDrive(me
.drive
);
78 setVMConfig: function(vmconfig
) {
81 me
.vmconfig
= vmconfig
;
84 me
.bussel
.setVMConfig(vmconfig
, true);
88 Ext
.Object
.each(vmconfig
, function(key
, value
) {
89 if (key
.match(/^unused\d+$/)) {
90 disklist
.push([key
, value
]);
93 me
.unusedDisks
.store
.loadData(disklist
);
94 me
.unusedDisks
.setValue(me
.confid
);
98 setDrive: function(drive
) {
104 var match
= drive
.file
.match(/^([^:]+):/);
106 values
.hdstorage
= match
[1];
109 values
.hdimage
= drive
.file
;
110 values
.nobackup
= !PVE
.Parser
.parseBoolean(drive
.backup
, 1);
111 values
.diskformat
= drive
.format
|| 'raw';
112 values
.cache
= drive
.cache
|| '__default__';
113 values
.discard
= (drive
.discard
=== 'on');
114 values
.iothread
= PVE
.Parser
.parseBoolean(drive
.iothread
);
116 me
.setValues(values
);
119 setNodename: function(nodename
) {
121 me
.hdstoragesel
.setNodename(nodename
);
122 me
.hdfilesel
.setStorage(undefined, nodename
);
125 initComponent : function() {
133 if (!me
.confid
|| me
.unused
) {
134 me
.bussel
= Ext
.createWidget('PVE.form.ControllerSelector', {
135 vmconfig
: me
.insideWizard
? {ide2
: 'cdrom'} : {}
137 me
.column1
.push(me
.bussel
);
141 me
.unusedDisks
= Ext
.create('PVE.form.KVComboBox', {
143 fieldLabel
: gettext('Disk image'),
144 matchFieldWidth
: false,
151 me
.column1
.push(me
.unusedDisks
);
152 } else if (me
.create
) {
153 me
.formatsel
= Ext
.create('PVE.form.DiskFormatSelector', {
155 fieldLabel
: gettext('Format'),
160 me
.hdfilesel
= Ext
.create('PVE.form.FileSelector', {
162 nodename
: me
.nodename
,
163 storageContent
: 'images',
164 fieldLabel
: gettext('Disk image'),
170 me
.hdsizesel
= Ext
.createWidget('numberfield', {
176 fieldLabel
: gettext('Disk size') + ' (GB)',
180 me
.hdstoragesel
= Ext
.create('PVE.form.StorageSelector', {
182 nodename
: me
.nodename
,
183 fieldLabel
: gettext('Storage'),
184 storageContent
: 'images',
185 autoSelect
: me
.insideWizard
,
188 change: function(f
, value
) {
189 if (!value
) { // initial store loading fires an unwanted 'change'
192 var rec
= f
.store
.getById(value
);
193 if (rec
.data
.type
=== 'iscsi') {
194 me
.hdfilesel
.setStorage(value
);
195 me
.hdfilesel
.setDisabled(false);
196 me
.formatsel
.setValue('raw');
197 me
.formatsel
.setDisabled(true);
198 me
.hdfilesel
.setVisible(true);
199 me
.hdsizesel
.setDisabled(true);
200 me
.hdsizesel
.setVisible(false);
201 } else if (rec
.data
.type
=== 'lvm' ||
202 rec
.data
.type
=== 'lvmthin' ||
203 rec
.data
.type
=== 'drbd' ||
204 rec
.data
.type
=== 'rbd' ||
205 rec
.data
.type
=== 'sheepdog' ||
206 rec
.data
.type
=== 'zfs' ||
207 rec
.data
.type
=== 'zfspool') {
208 me
.hdfilesel
.setDisabled(true);
209 me
.hdfilesel
.setVisible(false);
210 me
.formatsel
.setValue('raw');
211 me
.formatsel
.setDisabled(true);
212 me
.hdsizesel
.setDisabled(false);
213 me
.hdsizesel
.setVisible(true);
215 me
.hdfilesel
.setDisabled(true);
216 me
.hdfilesel
.setVisible(false);
217 me
.formatsel
.setValue('qcow2');
218 me
.formatsel
.setDisabled(false);
219 me
.hdsizesel
.setDisabled(false);
220 me
.hdsizesel
.setVisible(true);
225 me
.column1
.push(me
.hdstoragesel
);
226 me
.column1
.push(me
.hdfilesel
);
227 me
.column1
.push(me
.hdsizesel
);
228 me
.column1
.push(me
.formatsel
);
235 fieldLabel
: gettext('Disk image'),
241 xtype
: 'CacheTypeSelector',
243 value
: '__default__',
244 fieldLabel
: gettext('Cache')
248 xtype
: 'pvecheckbox',
249 fieldLabel
: gettext('No backup'),
254 xtype
: 'pvecheckbox',
255 fieldLabel
: gettext('Discard'),
260 xtype
: 'pvecheckbox',
261 disabled
: me
.insideWizard
|| (me
.confid
&& !me
.confid
.match(/^(virtio|scsi)/)),
262 fieldLabel
: gettext('IO thread'),
263 reference
: 'iothread',
271 Ext
.define('PVE.qemu.HDEdit', {
272 extend
: 'PVE.window.Edit',
276 initComponent : function() {
279 var nodename
= me
.pveSelNode
.data
.node
;
281 throw "no node name specified";
284 var unused
= me
.confid
&& me
.confid
.match(/^unused\d+$/);
286 me
.create
= me
.confid
? unused
: true;
288 var ipanel
= Ext
.create('PVE.qemu.HDInputPanel', {
297 me
.subject
= gettext('Unused Disk');
298 } else if (me
.create
) {
299 me
.subject
= gettext('Hard Disk');
301 me
.subject
= gettext('Hard Disk') + ' (' + me
.confid
+ ')';
304 me
.items
= [ ipanel
];
309 success: function(response
, options
) {
310 ipanel
.setVMConfig(response
.result
.data
);
312 var value
= response
.result
.data
[me
.confid
];
313 var drive
= PVE
.Parser
.parseQemuDrive(me
.confid
, value
);
315 Ext
.Msg
.alert(gettext('Error'), 'Unable to parse drive options');
319 ipanel
.setDrive(drive
);
320 me
.isValid(); // trigger validation