]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/lxc/ResourceEdit.js
1 /*jslint confusion: true */
4 Ext
.define('PVE.lxc.MemoryEdit', {
5 extend
: 'PVE.window.Edit',
7 initComponent : function() {
11 subject
: gettext('Memory'),
12 items
: Ext
.create('PVE.lxc.MemoryInputPanel')
22 Ext
.define('PVE.lxc.CPUEdit', {
23 extend
: 'PVE.window.Edit',
25 initComponent : function() {
29 subject
: gettext('CPU'),
30 items
: Ext
.create('PVE.lxc.CPUInputPanel')
39 Ext
.define('PVE.lxc.MountPointEdit', {
40 extend
: 'PVE.window.Edit',
42 initComponent : function() {
45 var nodename
= me
.pveSelNode
.data
.node
;
47 throw "no node name specified";
50 var unused
= me
.confid
&& me
.confid
.match(/^unused\d+$/);
52 me
.isCreate
= me
.confid
? unused
: true;
54 var ipanel
= Ext
.create('PVE.lxc.MountPointInputPanel', {
63 subject
= gettext('Unused Disk');
64 } else if (me
.isCreate
) {
65 subject
= gettext('Mount Point');
67 subject
= gettext('Mount Point') + ' (' + me
.confid
+ ')';
78 success: function(response
, options
) {
79 ipanel
.setVMConfig(response
.result
.data
);
81 var value
= response
.result
.data
[me
.confid
];
82 var mp
= PVE
.Parser
.parseLxcMountPoint(value
);
85 Ext
.Msg
.alert(gettext('Error'), 'Unable to parse mount point options');
90 ipanel
.setMountPoint(mp
);
91 me
.isValid(); // trigger validation
98 Ext
.define('PVE.lxc.CPUInputPanel', {
99 extend
: 'PVE.panel.InputPanel',
100 alias
: 'widget.pveLxcCPUInputPanel',
102 onlineHelp
: 'pct_cpu',
106 onGetValues: function(values
) {
109 PVE
.Utils
.delete_if_default(values
, 'cores', '', me
.insideWizard
);
110 // cpu{limit,unit} aren't in the wizard so create is always false
111 PVE
.Utils
.delete_if_default(values
, 'cpulimit', '0', 0);
112 PVE
.Utils
.delete_if_default(values
, 'cpuunits', '1024', 0);
117 initComponent : function() {
122 xtype
: 'pveIntegerField',
126 value
: me
.insideWizard
? 1 : '',
127 fieldLabel
: gettext('Cores'),
129 emptyText
: gettext('unlimited')
135 xtype
: 'numberfield',
140 fieldLabel
: gettext('CPU limit'),
141 labelWidth
: labelWidth
,
143 emptyText
: gettext('unlimited')
146 xtype
: 'pveIntegerField',
148 fieldLabel
: gettext('CPU units'),
152 labelWidth
: labelWidth
,
157 if (me
.insideWizard
) {
158 me
.column1
= column1
;
160 me
.column1
= column1
;
161 me
.column2
= column2
;
168 Ext
.define('PVE.lxc.MemoryInputPanel', {
169 extend
: 'PVE.panel.InputPanel',
170 alias
: 'widget.pveLxcMemoryInputPanel',
172 onlineHelp
: 'pct_memory',
176 initComponent : function() {
181 xtype
: 'pveIntegerField',
187 fieldLabel
: gettext('Memory') + ' (MB)',
188 labelWidth
: labelWidth
,
192 xtype
: 'pveIntegerField',
198 fieldLabel
: gettext('Swap') + ' (MB)',
199 labelWidth
: labelWidth
,
204 if (me
.insideWizard
) {
214 Ext
.define('PVE.lxc.MountPointInputPanel', {
215 extend
: 'PVE.panel.InputPanel',
216 alias
: 'widget.pveLxcMountPointInputPanel',
220 onlineHelp
: 'pct_container_storage',
222 unused
: false, // ADD usused disk imaged
224 vmconfig
: {}, // used to select usused disks
226 onGetValues: function(values
) {
229 var confid
= me
.confid
|| values
.mpsel
;
232 me
.mpdata
.file
= me
.vmconfig
[values
.unusedId
];
233 confid
= values
.mpsel
;
234 } else if (me
.isCreate
) {
235 me
.mpdata
.file
= values
.storage
+ ':' + values
.disksize
;
238 if (confid
!== 'rootfs') {
239 me
.mpdata
.mp
= values
.mp
;
251 delete me
.mpdata
.quota
;
254 if (values
.acl
=== 'Default') {
255 delete me
.mpdata
.acl
;
257 me
.mpdata
.acl
= values
.acl
;
261 me
.mpdata
.backup
= 1;
263 delete me
.mpdata
.backup
;
266 if (values
.noreplicate
) {
267 me
.mpdata
.replicate
= '0';
269 delete me
.mpdata
.noreplicate
;
272 res
[confid
] = PVE
.Parser
.printLxcMountPoint(me
.mpdata
);
276 setMountPoint: function(mp
) {
280 if (!Ext
.isDefined(me
.mpdata
.acl
)) {
281 me
.mpdata
.acl
= 'Default';
284 if (mp
.type
=== 'bind') {
285 me
.quota
.setDisabled(true);
286 me
.quota
.setValue(false);
287 me
.acl
.setDisabled(true);
288 me
.acl
.setValue('Default');
289 me
.hdstoragesel
.setDisabled(true);
290 if (me
.confid
!== 'rootfs') {
291 me
.backup
.setDisabled(true);
295 if (mp
.replicate
) { // check box reverses the config option
296 mp
.noreplicate
= !PVE
.Parser
.parseBoolean(mp
.replicate
, 1);
303 setVMConfig: function(vmconfig
) {
306 me
.vmconfig
= vmconfig
;
310 for (i
= 0; i
!= 8; ++i
) {
312 if (!Ext
.isDefined(vmconfig
[name
])) {
313 me
.mpsel
.setValue(name
);
319 if (me
.unusedDisks
) {
321 Ext
.Object
.each(vmconfig
, function(key
, value
) {
322 if (key
.match(/^unused\d+$/)) {
323 disklist
.push([key
, value
]);
326 me
.unusedDisks
.store
.loadData(disklist
);
327 me
.unusedDisks
.setValue(me
.confid
);
331 setNodename: function(nodename
) {
333 me
.hdstoragesel
.setNodename(nodename
);
334 me
.hdfilesel
.setStorage(undefined, nodename
);
337 initComponent : function() {
340 var isroot
= me
.confid
=== 'rootfs';
346 if (!me
.confid
|| me
.unused
) {
349 for (i
= 0; i
!= 8; ++i
) {
351 names
.push([name
, name
]);
353 me
.mpsel
= Ext
.create('PVE.form.KVComboBox', {
355 fieldLabel
: gettext('Mount Point'),
356 matchFieldWidth
: false,
359 validator: function(value
) {
363 if (Ext
.isDefined(me
.vmconfig
[value
])) {
364 return "Mount point is already in use.";
369 change: function(field
, value
) {
374 me
.column1
.push(me
.mpsel
);
377 // we always have this around, but only visible when creating a new mp
378 // since this handles per-filesystem capabilities
379 me
.hdstoragesel
= Ext
.create('PVE.form.StorageSelector', {
381 nodename
: me
.nodename
,
382 fieldLabel
: gettext('Storage'),
383 storageContent
: 'rootdir',
386 hidden
: me
.unused
|| !me
.isCreate
,
388 change: function(f
, value
) {
389 if (!value
) { // initial store loading fires an unwanted 'change'
392 if (me
.mpdata
.type
=== 'bind') {
393 me
.quota
.setDisabled(true);
394 me
.quota
.setValue(false);
395 me
.acl
.setDisabled(true);
396 me
.acl
.setValue('Default');
398 me
.backup
.setDisabled(true);
402 var rec
= f
.store
.getById(value
);
403 if (rec
.data
.type
=== 'zfs' ||
404 rec
.data
.type
=== 'zfspool') {
405 me
.quota
.setDisabled(true);
406 me
.quota
.setValue(false);
408 me
.quota
.setDisabled(false);
410 if (me
.unused
|| !me
.isCreate
) {
413 if (rec
.data
.type
=== 'iscsi') {
414 me
.hdfilesel
.setStorage(value
);
415 me
.hdfilesel
.setDisabled(false);
416 me
.hdfilesel
.setVisible(true);
417 me
.hdsizesel
.setDisabled(true);
418 me
.hdsizesel
.setVisible(false);
419 } else if (rec
.data
.type
=== 'lvm' ||
420 rec
.data
.type
=== 'lvmthin' ||
421 rec
.data
.type
=== 'rbd' ||
422 rec
.data
.type
=== 'sheepdog' ||
423 rec
.data
.type
=== 'zfs' ||
424 rec
.data
.type
=== 'zfspool') {
425 me
.hdfilesel
.setDisabled(true);
426 me
.hdfilesel
.setVisible(false);
427 me
.hdsizesel
.setDisabled(false);
428 me
.hdsizesel
.setVisible(true);
430 me
.hdfilesel
.setDisabled(true);
431 me
.hdfilesel
.setVisible(false);
432 me
.hdsizesel
.setDisabled(false);
433 me
.hdsizesel
.setVisible(true);
438 me
.column1
.push(me
.hdstoragesel
);
441 me
.unusedDisks
= Ext
.create('PVE.form.KVComboBox', {
443 fieldLabel
: gettext('Disk image'),
444 matchFieldWidth
: false,
451 change: function(f
, value
) {
452 // make sure our buttons are enabled/disabled when switching
453 // between images on different storages:
454 var disk
= me
.vmconfig
[value
];
455 var storage
= disk
.split(':')[0];
456 me
.hdstoragesel
.setValue(storage
);
460 me
.column1
.push(me
.unusedDisks
);
461 } else if (me
.isCreate
) {
462 me
.hdfilesel
= Ext
.create('PVE.form.FileSelector', {
464 nodename
: me
.nodename
,
465 storageContent
: 'images',
466 fieldLabel
: gettext('Disk image'),
471 me
.hdsizesel
= Ext
.createWidget('numberfield', {
478 fieldLabel
: gettext('Disk size') + ' (GB)',
481 me
.column1
.push(me
.hdfilesel
);
482 me
.column1
.push(me
.hdsizesel
);
488 fieldLabel
: gettext('Disk image'),
493 me
.acl
= Ext
.createWidget('pveKVComboBox', {
495 fieldLabel
: gettext('ACLs'),
496 comboItems
: [['Default', 'Default'], ['1', 'On'], ['0', 'Off']],
501 me
.quota
= Ext
.createWidget('pvecheckbox', {
504 fieldLabel
: gettext('Enable quota')
513 me
.column2
.splice(1, 0, {
514 xtype
: 'pvecheckbox',
517 fieldLabel
: gettext('Read-only'),
518 hidden
: me
.insideWizard
521 me
.backup
= Ext
.createWidget('pvecheckbox',{
522 xtype
: 'pvecheckbox',
524 fieldLabel
: gettext('Backup')
526 if (me
.mpdata
.type
!== 'bind') {
527 me
.column2
.push(me
.backup
);
530 xtype
: 'pvecheckbox',
532 fieldLabel
: gettext('Skip replication')
538 emptyText
: gettext('/some/path'),
541 fieldLabel
: gettext('Path')