]>
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
13 onGetValues: function(values
) {
16 var confid
= me
.confid
|| (values
.controller
+ values
.deviceid
);
19 me
.drive
.file
= me
.vmconfig
[values
.unusedId
];
20 confid
= values
.controller
+ values
.deviceid
;
21 } else if (me
.create
) {
23 me
.drive
.file
= values
.hdimage
;
25 me
.drive
.file
= values
.hdstorage
+ ":" + values
.disksize
;
27 me
.drive
.format
= values
.diskformat
;
30 if (values
.nobackup
) {
31 me
.drive
.backup
= 'no';
33 delete me
.drive
.backup
;
37 me
.drive
.discard
= 'on';
39 delete me
.drive
.discard
;
42 if (values
.iothread
&& confid
.match(/^virtio\d+$/)) {
43 me
.drive
.iothread
= 'on';
45 delete me
.drive
.iothread
;
49 me
.drive
.cache
= values
.cache
;
51 delete me
.drive
.cache
;
56 params
[confid
] = PVE
.Parser
.printQemuDrive(me
.drive
);
61 setVMConfig: function(vmconfig
) {
64 me
.vmconfig
= vmconfig
;
67 me
.bussel
.setVMConfig(vmconfig
, true);
71 Ext
.Object
.each(vmconfig
, function(key
, value
) {
72 if (key
.match(/^unused\d+$/)) {
73 disklist
.push([key
, value
]);
76 me
.unusedDisks
.store
.loadData(disklist
);
77 me
.unusedDisks
.setValue(me
.confid
);
81 setDrive: function(drive
) {
87 var match
= drive
.file
.match(/^([^:]+):/);
89 values
.hdstorage
= match
[1];
92 values
.hdimage
= drive
.file
;
93 values
.nobackup
= !PVE
.Parser
.parseBoolean(drive
.backup
, 1);
94 values
.diskformat
= drive
.format
|| 'raw';
95 values
.cache
= drive
.cache
|| '__default__';
96 values
.discard
= (drive
.discard
=== 'on');
97 values
.iothread
= PVE
.Parser
.parseBoolean(drive
.iothread
);
102 setNodename: function(nodename
) {
104 me
.hdstoragesel
.setNodename(nodename
);
105 me
.hdfilesel
.setStorage(undefined, nodename
);
108 initComponent : function() {
116 if (!me
.confid
|| me
.unused
) {
117 me
.bussel
= Ext
.createWidget('PVE.form.ControllerSelector', {
118 vmconfig
: me
.insideWizard
? {ide2
: 'cdrom'} : {}
120 me
.column1
.push(me
.bussel
);
124 me
.unusedDisks
= Ext
.create('PVE.form.KVComboBox', {
126 fieldLabel
: gettext('Disk image'),
127 matchFieldWidth
: false,
134 me
.column1
.push(me
.unusedDisks
);
135 } else if (me
.create
) {
136 me
.formatsel
= Ext
.create('PVE.form.DiskFormatSelector', {
138 fieldLabel
: gettext('Format'),
143 me
.hdfilesel
= Ext
.create('PVE.form.FileSelector', {
145 nodename
: me
.nodename
,
146 storageContent
: 'images',
147 fieldLabel
: gettext('Disk image'),
153 me
.hdsizesel
= Ext
.createWidget('numberfield', {
159 fieldLabel
: gettext('Disk size') + ' (GB)',
163 me
.hdstoragesel
= Ext
.create('PVE.form.StorageSelector', {
165 nodename
: me
.nodename
,
166 fieldLabel
: gettext('Storage'),
167 storageContent
: 'images',
168 autoSelect
: me
.insideWizard
,
171 change: function(f
, value
) {
172 if (!value
) { // initial store loading fires an unwanted 'change'
175 var rec
= f
.store
.getById(value
);
176 if (rec
.data
.type
=== 'iscsi') {
177 me
.hdfilesel
.setStorage(value
);
178 me
.hdfilesel
.setDisabled(false);
179 me
.formatsel
.setValue('raw');
180 me
.formatsel
.setDisabled(true);
181 me
.hdfilesel
.setVisible(true);
182 me
.hdsizesel
.setDisabled(true);
183 me
.hdsizesel
.setVisible(false);
184 } else if (rec
.data
.type
=== 'lvm' ||
185 rec
.data
.type
=== 'lvmthin' ||
186 rec
.data
.type
=== 'rbd' ||
187 rec
.data
.type
=== 'sheepdog' ||
188 rec
.data
.type
=== 'zfs' ||
189 rec
.data
.type
=== 'zfspool') {
190 me
.hdfilesel
.setDisabled(true);
191 me
.hdfilesel
.setVisible(false);
192 me
.formatsel
.setValue('raw');
193 me
.formatsel
.setDisabled(true);
194 me
.hdsizesel
.setDisabled(false);
195 me
.hdsizesel
.setVisible(true);
197 me
.hdfilesel
.setDisabled(true);
198 me
.hdfilesel
.setVisible(false);
199 me
.formatsel
.setValue('qcow2');
200 me
.formatsel
.setDisabled(false);
201 me
.hdsizesel
.setDisabled(false);
202 me
.hdsizesel
.setVisible(true);
207 me
.column1
.push(me
.hdstoragesel
);
208 me
.column1
.push(me
.hdfilesel
);
209 me
.column1
.push(me
.hdsizesel
);
210 me
.column1
.push(me
.formatsel
);
217 fieldLabel
: gettext('Disk image'),
223 xtype
: 'CacheTypeSelector',
225 value
: '__default__',
226 fieldLabel
: gettext('Cache')
230 xtype
: 'pvecheckbox',
231 fieldLabel
: gettext('No backup'),
236 xtype
: 'pvecheckbox',
237 fieldLabel
: gettext('Discard'),
242 xtype
: 'pvecheckbox',
243 fieldLabel
: gettext('IO thread'),
251 Ext
.define('PVE.qemu.HDEdit', {
252 extend
: 'PVE.window.Edit',
256 initComponent : function() {
259 var nodename
= me
.pveSelNode
.data
.node
;
261 throw "no node name specified";
264 var unused
= me
.confid
&& me
.confid
.match(/^unused\d+$/);
266 me
.create
= me
.confid
? unused
: true;
268 var ipanel
= Ext
.create('PVE.qemu.HDInputPanel', {
277 me
.subject
= gettext('Unused Disk');
278 } else if (me
.create
) {
279 me
.subject
= gettext('Hard Disk');
281 me
.subject
= gettext('Hard Disk') + ' (' + me
.confid
+ ')';
284 me
.items
= [ ipanel
];
289 success: function(response
, options
) {
290 ipanel
.setVMConfig(response
.result
.data
);
292 var value
= response
.result
.data
[me
.confid
];
293 var drive
= PVE
.Parser
.parseQemuDrive(me
.confid
, value
);
295 Ext
.Msg
.alert(gettext('Error'), 'Unable to parse drive options');
299 ipanel
.setDrive(drive
);
300 me
.isValid(); // trigger validation