]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/qemu/HDEdit.js
1 /*jslint confusion: true */
2 /* 'change' property is assigned a string and then a function */
3 Ext
.define('PVE.qemu.HDInputPanel', {
4 extend
: 'Proxmox.panel.InputPanel',
5 alias
: 'widget.pveQemuHDInputPanel',
6 onlineHelp
: 'qm_hard_disk',
10 unused
: false, // ADD usused disk imaged
12 vmconfig
: {}, // used to select usused disks
16 xclass
: 'Ext.app.ViewController',
18 onControllerChange: function(field
) {
19 var value
= field
.getValue();
21 var allowIOthread
= value
.match(/^(virtio|scsi)/);
22 this.lookup('iothread').setDisabled(!allowIOthread
);
24 this.lookup('iothread').setValue(false);
27 var scsi
= value
.match(/^scsi/);
28 this.lookup('discard').setDisabled(!scsi
);
30 this.lookup('discard').setValue(false);
32 this.lookup('scsiController').setVisible(scsi
);
36 'field[name=controller]': {
37 change
: 'onControllerChange',
38 afterrender
: 'onControllerChange'
40 'field[name=iothread]' : {
41 change: function(f
, value
) {
42 if (!this.getView().insideWizard
) {
45 var vmScsiType
= value
? 'virtio-scsi-single': 'virtio-scsi-pci';
46 this.lookupReference('scsiController').setValue(vmScsiType
);
52 onGetValues: function(values
) {
56 var confid
= me
.confid
|| (values
.controller
+ values
.deviceid
);
59 me
.drive
.file
= me
.vmconfig
[values
.unusedId
];
60 confid
= values
.controller
+ values
.deviceid
;
61 } else if (me
.isCreate
) {
63 me
.drive
.file
= values
.hdimage
;
65 me
.drive
.file
= values
.hdstorage
+ ":" + values
.disksize
;
67 me
.drive
.format
= values
.diskformat
;
70 if (values
.nobackup
) {
71 me
.drive
.backup
= 'no';
73 delete me
.drive
.backup
;
76 if (values
.noreplicate
) {
77 me
.drive
.replicate
= 'no';
79 delete me
.drive
.replicate
;
83 me
.drive
.discard
= 'on';
85 delete me
.drive
.discard
;
88 if (values
.iothread
) {
89 me
.drive
.iothread
= 'on';
91 delete me
.drive
.iothread
;
95 me
.drive
.cache
= values
.cache
;
97 delete me
.drive
.cache
;
101 params
.scsihw
= values
.scsihw
;
104 params
[confid
] = PVE
.Parser
.printQemuDrive(me
.drive
);
109 setVMConfig: function(vmconfig
) {
112 me
.vmconfig
= vmconfig
;
115 me
.bussel
.setVMConfig(vmconfig
);
116 me
.scsiController
.setValue(vmconfig
.scsihw
);
118 if (me
.unusedDisks
) {
120 Ext
.Object
.each(vmconfig
, function(key
, value
) {
121 if (key
.match(/^unused\d+$/)) {
122 disklist
.push([key
, value
]);
125 me
.unusedDisks
.store
.loadData(disklist
);
126 me
.unusedDisks
.setValue(me
.confid
);
130 setDrive: function(drive
) {
136 var match
= drive
.file
.match(/^([^:]+):/);
138 values
.hdstorage
= match
[1];
141 values
.hdimage
= drive
.file
;
142 values
.nobackup
= !PVE
.Parser
.parseBoolean(drive
.backup
, 1);
143 values
.noreplicate
= !PVE
.Parser
.parseBoolean(drive
.replicate
, 1);
144 values
.diskformat
= drive
.format
|| 'raw';
145 values
.cache
= drive
.cache
|| '__default__';
146 values
.discard
= (drive
.discard
=== 'on');
147 values
.iothread
= PVE
.Parser
.parseBoolean(drive
.iothread
);
149 me
.setValues(values
);
152 setNodename: function(nodename
) {
154 me
.down('#hdstorage').setNodename(nodename
);
155 me
.down('#hdimage').setStorage(undefined, nodename
);
158 initComponent : function() {
166 me
.advancedColumn1
= [];
167 me
.advancedColumn2
= [];
169 if (!me
.confid
|| me
.unused
) {
170 me
.bussel
= Ext
.create('PVE.form.ControllerSelector', {
171 vmconfig
: me
.insideWizard
? {ide2
: 'cdrom'} : {}
173 me
.column1
.push(me
.bussel
);
175 me
.scsiController
= Ext
.create('Ext.form.field.Display', {
177 fieldLabel
: gettext('SCSI Controller'),
178 reference
: 'scsiController',
179 renderer
: PVE
.Utils
.render_scsihw
,
180 // do not change a VM wide option after creation
181 submitValue
: me
.insideWizard
,
184 me
.column1
.push(me
.scsiController
);
188 me
.unusedDisks
= Ext
.create('Proxmox.form.KVComboBox', {
190 fieldLabel
: gettext('Disk image'),
191 matchFieldWidth
: false,
198 me
.column1
.push(me
.unusedDisks
);
199 } else if (me
.isCreate
) {
201 xtype
: 'pveDiskStorageSelector',
202 storageContent
: 'images',
204 nodename
: me
.nodename
,
205 autoSelect
: me
.insideWizard
212 fieldLabel
: gettext('Disk image'),
218 xtype
: 'CacheTypeSelector',
220 value
: '__default__',
221 fieldLabel
: gettext('Cache')
224 me
.advancedColumn1
.push(
226 xtype
: 'proxmoxcheckbox',
227 fieldLabel
: gettext('Discard'),
228 disabled
: me
.confid
&& !me
.confid
.match(/^scsi/),
229 reference
: 'discard',
230 labelWidth
: labelWidth
,
234 xtype
: 'proxmoxcheckbox',
235 disabled
: me
.confid
&& !me
.confid
.match(/^(virtio|scsi)/),
236 fieldLabel
: 'IO thread',
237 labelWidth
: labelWidth
,
238 reference
: 'iothread',
243 me
.advancedColumn2
.push(
245 xtype
: 'proxmoxcheckbox',
246 fieldLabel
: gettext('No backup'),
247 labelWidth
: labelWidth
,
251 xtype
: 'proxmoxcheckbox',
252 fieldLabel
: gettext('Skip replication'),
253 labelWidth
: labelWidth
,
261 /*jslint confusion: false */
263 Ext
.define('PVE.qemu.HDEdit', {
264 extend
: 'Proxmox.window.Edit',
268 initComponent : function() {
271 var nodename
= me
.pveSelNode
.data
.node
;
273 throw "no node name specified";
276 var unused
= me
.confid
&& me
.confid
.match(/^unused\d+$/);
278 me
.isCreate
= me
.confid
? unused
: true;
280 var ipanel
= Ext
.create('PVE.qemu.HDInputPanel', {
284 isCreate
: me
.isCreate
289 me
.subject
= gettext('Unused Disk');
290 } else if (me
.isCreate
) {
291 me
.subject
= gettext('Hard Disk');
293 me
.subject
= gettext('Hard Disk') + ' (' + me
.confid
+ ')';
296 me
.items
= [ ipanel
];
299 /*jslint confusion: true*/
300 /* 'data' is assigned an empty array in same file, and here we
301 * use it like an object
304 success: function(response
, options
) {
305 ipanel
.setVMConfig(response
.result
.data
);
307 var value
= response
.result
.data
[me
.confid
];
308 var drive
= PVE
.Parser
.parseQemuDrive(me
.confid
, value
);
310 Ext
.Msg
.alert(gettext('Error'), 'Unable to parse drive options');
314 ipanel
.setDrive(drive
);
315 me
.isValid(); // trigger validation
319 /*jslint confusion: false*/