]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/lxc/MPEdit.js
1 Ext
.define('PVE.lxc.MountPointInputPanel', {
2 extend
: 'PVE.panel.InputPanel',
3 alias
: 'widget.pveLxcMountPointInputPanel',
7 onlineHelp
: 'pct_container_storage',
9 unused
: false, // add unused disk imaged
13 vmconfig
: {}, // used to select unused disks
15 onGetValues: function(values
) {
18 var confid
= me
.confid
|| values
.mpsel
;
21 me
.mpdata
.file
= me
.vmconfig
[values
.unusedId
];
22 confid
= values
.mpsel
;
23 } else if (me
.isCreate
) {
24 me
.mpdata
.file
= values
.hdstorage
+ ':' + values
.disksize
;
27 if (confid
!== 'rootfs') {
28 me
.mpdata
.mp
= values
.mp
;
40 delete me
.mpdata
.quota
;
43 if (values
.acl
=== 'Default') {
46 me
.mpdata
.acl
= values
.acl
;
52 delete me
.mpdata
.backup
;
55 if (values
.noreplicate
) {
56 me
.mpdata
.replicate
= '0';
58 delete me
.mpdata
.noreplicate
;
61 res
[confid
] = PVE
.Parser
.printLxcMountPoint(me
.mpdata
);
65 setMountPoint: function(mp
) {
68 // the fields name is 'hdstorage',
69 // but the api expects/has 'storage'
70 mp
.hdstorage
= mp
.storage
;
74 if (!Ext
.isDefined(me
.mpdata
.acl
)) {
75 me
.mpdata
.acl
= 'Default';
78 if (mp
.type
=== 'bind') {
79 me
.quota
.setDisabled(true);
80 me
.quota
.setValue(false);
81 me
.acl
.setDisabled(true);
82 me
.acl
.setValue('Default');
83 me
.down('#hdstorage').setDisabled(true);
84 if (me
.confid
!== 'rootfs') {
85 me
.backup
.setDisabled(true);
89 if (mp
.replicate
) { // check box reverses the config option
90 mp
.noreplicate
= !PVE
.Parser
.parseBoolean(mp
.replicate
, 1);
97 setVMConfig: function(vmconfig
) {
100 me
.vmconfig
= vmconfig
;
104 for (i
= 0; i
!= 8; ++i
) {
105 var name
= "mp" + i
.toString();
106 if (!Ext
.isDefined(vmconfig
[name
])) {
107 me
.mpsel
.setValue(name
);
113 if (me
.unusedDisks
) {
115 Ext
.Object
.each(vmconfig
, function(key
, value
) {
116 if (key
.match(/^unused\d+$/)) {
117 disklist
.push([key
, value
]);
120 me
.unusedDisks
.store
.loadData(disklist
);
121 me
.unusedDisks
.setValue(me
.confid
);
125 setNodename: function(nodename
) {
127 me
.down('#hdstorage').setNodename(nodename
);
128 me
.down('#hdimage').setStorage(undefined, nodename
);
131 initComponent : function() {
134 var isroot
= me
.confid
=== 'rootfs';
140 if (!me
.confid
|| me
.unused
) {
143 for (i
= 0; i
!= 8; ++i
) {
144 var name
= 'mp' + i
.toString();
145 names
.push([name
, name
]);
147 me
.mpsel
= Ext
.create('PVE.form.KVComboBox', {
149 fieldLabel
: gettext('Mount Point'),
150 matchFieldWidth
: false,
153 validator: function(value
) {
157 if (Ext
.isDefined(me
.vmconfig
[value
])) {
158 return "Mount point is already in use.";
160 /*jslint confusion: true*/
161 /* returns a string above */
165 change: function(field
, value
) {
170 me
.column1
.push(me
.mpsel
);
174 xtype
: 'pveDiskStorageSelector',
175 nodename
: me
.nodename
,
176 storageContent
: 'rootdir',
178 hidden
: me
.unused
|| !me
.isCreate
182 me
.unusedDisks
= Ext
.create('PVE.form.KVComboBox', {
184 fieldLabel
: gettext('Disk image'),
185 matchFieldWidth
: false,
192 change: function(f
, value
) {
193 // make sure our buttons are enabled/disabled when switching
194 // between images on different storages:
195 var disk
= me
.vmconfig
[value
];
196 var storage
= disk
.split(':')[0];
197 me
.down('#hdstorage').setValue(storage
);
201 me
.column1
.push(me
.unusedDisks
);
202 } else if (!me
.isCreate
) {
207 fieldLabel
: gettext('Disk image'),
212 me
.acl
= Ext
.createWidget('pveKVComboBox', {
214 fieldLabel
: gettext('ACLs'),
215 comboItems
: [['Default', 'Default'], ['1', 'On'], ['0', 'Off']],
220 me
.quota
= Ext
.createWidget('pvecheckbox', {
223 disabled
: me
.unprivileged
,
224 fieldLabel
: gettext('Enable quota')
233 me
.column2
.splice(1, 0, {
234 xtype
: 'pvecheckbox',
237 fieldLabel
: gettext('Read-only'),
238 hidden
: me
.insideWizard
241 me
.backup
= Ext
.createWidget('pvecheckbox',{
242 xtype
: 'pvecheckbox',
244 fieldLabel
: gettext('Backup')
246 if (me
.mpdata
.type
!== 'bind') {
247 me
.column2
.push(me
.backup
);
250 xtype
: 'pvecheckbox',
252 fieldLabel
: gettext('Skip replication')
258 emptyText
: gettext('/some/path'),
261 fieldLabel
: gettext('Path')
267 if (me
.unused
|| me
.isCreate
) {
268 me
.mon(me
.down('#hdstorage'), 'change', function(field
, newValue
) {
272 var rec
= field
.store
.getById(newValue
);
276 if (rec
.data
.type
=== 'zfs' || rec
.data
.type
=== 'zfspool') {
277 me
.quota
.setDisabled(true);
278 me
.quota
.setValue(false);
280 me
.quota
.setDisabled(me
.unprivileged
);
287 Ext
.define('PVE.lxc.MountPointEdit', {
288 extend
: 'PVE.window.Edit',
292 initComponent : function() {
295 var nodename
= me
.pveSelNode
.data
.node
;
297 throw "no node name specified";
300 var unused
= me
.confid
&& me
.confid
.match(/^unused\d+$/);
302 me
.isCreate
= me
.confid
? unused
: true;
304 var ipanel
= Ext
.create('PVE.lxc.MountPointInputPanel', {
308 unprivileged
: me
.unprivileged
,
309 isCreate
: me
.isCreate
314 subject
= gettext('Unused Disk');
315 } else if (me
.isCreate
) {
316 subject
= gettext('Mount Point');
318 subject
= gettext('Mount Point') + ' (' + me
.confid
+ ')';
329 success: function(response
, options
) {
330 ipanel
.setVMConfig(response
.result
.data
);
332 /*jslint confusion: true*/
333 /*data is defined as array above*/
334 var value
= response
.result
.data
[me
.confid
];
335 /*jslint confusion: false*/
336 var mp
= PVE
.Parser
.parseLxcMountPoint(value
);
339 Ext
.Msg
.alert(gettext('Error'), 'Unable to parse mount point options');
344 ipanel
.setMountPoint(mp
);
345 me
.isValid(); // trigger validation