]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/lxc/ResourceEdit.js
156c99f57d735c59cf482b10aa40692e4e577716
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
.create
= me
.confid
? unused
: true;
54 var ipanel
= Ext
.create('PVE.lxc.MountPointInputPanel', {
63 subject
= gettext('Unused Disk');
64 } else if (me
.create
) {
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
.create
) {
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
;
267 res
[confid
] = PVE
.Parser
.printLxcMountPoint(me
.mpdata
);
271 setMountPoint: function(mp
) {
275 if (!Ext
.isDefined(me
.mpdata
.acl
)) {
276 me
.mpdata
.acl
= 'Default';
279 if (mp
.type
=== 'bind') {
280 me
.quota
.setDisabled(true);
281 me
.quota
.setValue(false);
282 me
.acl
.setDisabled(true);
283 me
.backup
.setDisabled(true);
284 me
.acl
.setValue('Default');
285 me
.hdstoragesel
.setDisabled(true);
291 setVMConfig: function(vmconfig
) {
294 me
.vmconfig
= vmconfig
;
298 for (i
= 0; i
!= 8; ++i
) {
300 if (!Ext
.isDefined(vmconfig
[name
])) {
301 me
.mpsel
.setValue(name
);
307 if (me
.unusedDisks
) {
309 Ext
.Object
.each(vmconfig
, function(key
, value
) {
310 if (key
.match(/^unused\d+$/)) {
311 disklist
.push([key
, value
]);
314 me
.unusedDisks
.store
.loadData(disklist
);
315 me
.unusedDisks
.setValue(me
.confid
);
319 setNodename: function(nodename
) {
321 me
.hdstoragesel
.setNodename(nodename
);
322 me
.hdfilesel
.setStorage(undefined, nodename
);
325 initComponent : function() {
328 var isroot
= me
.confid
=== 'rootfs';
334 if (!me
.confid
|| me
.unused
) {
337 for (i
= 0; i
!= 8; ++i
) {
339 names
.push([name
, name
]);
341 me
.mpsel
= Ext
.create('PVE.form.KVComboBox', {
343 fieldLabel
: gettext('Mount Point'),
344 matchFieldWidth
: false,
347 validator: function(value
) {
351 if (Ext
.isDefined(me
.vmconfig
[value
])) {
352 return "Mount point is already in use.";
357 change: function(field
, value
) {
362 me
.column1
.push(me
.mpsel
);
365 // we always have this around, but only visible when creating a new mp
366 // since this handles per-filesystem capabilities
367 me
.hdstoragesel
= Ext
.create('PVE.form.StorageSelector', {
369 nodename
: me
.nodename
,
370 fieldLabel
: gettext('Storage'),
371 storageContent
: 'rootdir',
374 hidden
: me
.unused
|| !me
.create
,
376 change: function(f
, value
) {
377 if (!value
) { // initial store loading fires an unwanted 'change'
380 if (me
.mpdata
.type
=== 'bind') {
381 me
.quota
.setDisabled(true);
382 me
.quota
.setValue(false);
383 me
.acl
.setDisabled(true);
384 me
.backup
.setDisabled(true);
385 me
.acl
.setValue('Default');
388 var rec
= f
.store
.getById(value
);
389 if (rec
.data
.type
=== 'zfs' ||
390 rec
.data
.type
=== 'zfspool') {
391 me
.quota
.setDisabled(true);
392 me
.quota
.setValue(false);
394 me
.quota
.setDisabled(false);
396 if (me
.unused
|| !me
.create
) {
399 if (rec
.data
.type
=== 'iscsi') {
400 me
.hdfilesel
.setStorage(value
);
401 me
.hdfilesel
.setDisabled(false);
402 me
.hdfilesel
.setVisible(true);
403 me
.hdsizesel
.setDisabled(true);
404 me
.hdsizesel
.setVisible(false);
405 } else if (rec
.data
.type
=== 'lvm' ||
406 rec
.data
.type
=== 'lvmthin' ||
407 rec
.data
.type
=== 'rbd' ||
408 rec
.data
.type
=== 'sheepdog' ||
409 rec
.data
.type
=== 'zfs' ||
410 rec
.data
.type
=== 'zfspool') {
411 me
.hdfilesel
.setDisabled(true);
412 me
.hdfilesel
.setVisible(false);
413 me
.hdsizesel
.setDisabled(false);
414 me
.hdsizesel
.setVisible(true);
416 me
.hdfilesel
.setDisabled(true);
417 me
.hdfilesel
.setVisible(false);
418 me
.hdsizesel
.setDisabled(false);
419 me
.hdsizesel
.setVisible(true);
424 me
.column1
.push(me
.hdstoragesel
);
427 me
.unusedDisks
= Ext
.create('PVE.form.KVComboBox', {
429 fieldLabel
: gettext('Disk image'),
430 matchFieldWidth
: false,
437 change: function(f
, value
) {
438 // make sure our buttons are enabled/disabled when switching
439 // between images on different storages:
440 var disk
= me
.vmconfig
[value
];
441 var storage
= disk
.split(':')[0];
442 me
.hdstoragesel
.setValue(storage
);
446 me
.column1
.push(me
.unusedDisks
);
447 } else if (me
.create
) {
448 me
.hdfilesel
= Ext
.create('PVE.form.FileSelector', {
450 nodename
: me
.nodename
,
451 storageContent
: 'images',
452 fieldLabel
: gettext('Disk image'),
457 me
.hdsizesel
= Ext
.createWidget('numberfield', {
464 fieldLabel
: gettext('Disk size') + ' (GB)',
467 me
.column1
.push(me
.hdfilesel
);
468 me
.column1
.push(me
.hdsizesel
);
474 fieldLabel
: gettext('Disk image'),
479 me
.acl
= Ext
.createWidget('pveKVComboBox', {
481 fieldLabel
: gettext('ACLs'),
482 comboItems
: [['Default', 'Default'], ['1', 'On'], ['0', 'Off']],
487 me
.quota
= Ext
.createWidget('pvecheckbox', {
490 fieldLabel
: gettext('Enable quota')
495 xtype
: 'pvecheckbox',
498 fieldLabel
: gettext('Read-only'),
499 hidden
: me
.insideWizard
506 me
.backup
= Ext
.createWidget('pvecheckbox',{
507 xtype
: 'pvecheckbox',
509 fieldLabel
: gettext('Backup')
511 if (me
.mpdata
.type
!== 'bind') {
512 me
.column2
.push(me
.backup
);
518 emptyText
: gettext('/some/path'),
521 fieldLabel
: gettext('Path')