]>
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
: 'PVE.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 if (!me
.confid
|| me
.unused
) {
167 me
.bussel
= Ext
.create('PVE.form.ControllerSelector', {
168 vmconfig
: me
.insideWizard
? {ide2
: 'cdrom'} : {}
170 me
.column1
.push(me
.bussel
);
172 me
.scsiController
= Ext
.create('Ext.form.field.Display', {
174 fieldLabel
: gettext('SCSI Controller'),
175 reference
: 'scsiController',
176 renderer
: PVE
.Utils
.render_scsihw
,
177 // do not change a VM wide option after creation
178 submitValue
: me
.insideWizard
,
181 me
.column1
.push(me
.scsiController
);
185 me
.unusedDisks
= Ext
.create('Proxmox.form.KVComboBox', {
187 fieldLabel
: gettext('Disk image'),
188 matchFieldWidth
: false,
195 me
.column1
.push(me
.unusedDisks
);
196 } else if (me
.isCreate
) {
198 xtype
: 'pveDiskStorageSelector',
199 storageContent
: 'images',
201 nodename
: me
.nodename
,
202 autoSelect
: me
.insideWizard
209 fieldLabel
: gettext('Disk image'),
215 xtype
: 'CacheTypeSelector',
217 value
: '__default__',
218 fieldLabel
: gettext('Cache')
221 xtype
: 'proxmoxcheckbox',
222 fieldLabel
: gettext('No backup'),
226 xtype
: 'proxmoxcheckbox',
227 hidden
: me
.insideWizard
,
228 fieldLabel
: gettext('Skip replication'),
232 xtype
: 'proxmoxcheckbox',
233 fieldLabel
: gettext('Discard'),
234 disabled
: me
.confid
&& !me
.confid
.match(/^scsi/),
235 reference
: 'discard',
239 xtype
: 'proxmoxcheckbox',
240 disabled
: me
.confid
&& !me
.confid
.match(/^(virtio|scsi)/),
241 fieldLabel
: 'IO thread',
242 reference
: 'iothread',
249 /*jslint confusion: false */
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
.isCreate
= me
.confid
? unused
: true;
268 var ipanel
= Ext
.create('PVE.qemu.HDInputPanel', {
272 isCreate
: me
.isCreate
277 me
.subject
= gettext('Unused Disk');
278 } else if (me
.isCreate
) {
279 me
.subject
= gettext('Hard Disk');
281 me
.subject
= gettext('Hard Disk') + ' (' + me
.confid
+ ')';
284 me
.items
= [ ipanel
];
287 /*jslint confusion: true*/
288 /* 'data' is assigned an empty array in same file, and here we
289 * use it like an object
292 success: function(response
, options
) {
293 ipanel
.setVMConfig(response
.result
.data
);
295 var value
= response
.result
.data
[me
.confid
];
296 var drive
= PVE
.Parser
.parseQemuDrive(me
.confid
, value
);
298 Ext
.Msg
.alert(gettext('Error'), 'Unable to parse drive options');
302 ipanel
.setDrive(drive
);
303 me
.isValid(); // trigger validation
307 /*jslint confusion: false*/