]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/storage/Base.js
1 Ext
.define('PVE.panel.StorageBase', {
2 extend
: 'Proxmox.panel.InputPanel',
3 controller
: 'storageEdit',
7 onGetValues: function(values
) {
11 values
.type
= me
.type
;
13 delete values
.storage
;
16 values
.disable
= values
.enable
? 0 : 1;
22 initComponent : function() {
26 xtype
: me
.isCreate
? 'textfield' : 'displayfield',
28 value
: me
.storageId
|| '',
34 me
.column2
= me
.column2
|| [];
37 xtype
: 'pveNodeSelector',
39 disabled
: me
.storageId
=== 'local',
40 fieldLabel
: gettext('Nodes'),
41 emptyText
: gettext('All') + ' (' + gettext('No restrictions') +')',
46 xtype
: 'proxmoxcheckbox',
50 fieldLabel
: gettext('Enable')
58 Ext
.define('PVE.panel.StoragePruneInputPanel', {
59 extend
: 'Proxmox.panel.PruneInputPanel',
60 xtype
: 'pveStoragePruneInputPanel',
61 mixins
: ['Proxmox.Mixin.CBind'],
63 onlineHelp
: 'vzdump_retention',
65 keepLastEmptyText
: gettext('1'),
67 onGetValues: function(formValues
) {
68 delete formValues
.delete;
69 let retention
= PVE
.Parser
.printPropertyString(formValues
)
70 if (retention
=== '') {
74 // always delete old 'maxfiles' on edit, we map it to keep-last on window load
76 delete: ['prune-backups','maxfiles'],
79 let options
= { 'prune-backups': retention
};
81 options
.delete = 'maxfiles';
86 updateComponents: function() {
89 let keepAll
= panel
.down('proxmoxcheckbox[name=keep-all]').getValue();
91 panel
.query('pmxPruneKeepField').forEach(field
=> {
92 anyValue
= anyValue
|| field
.getValue() !== null;
93 field
.setDisabled(keepAll
);
95 panel
.down('component[name=no-keeps-hint]').setHidden(anyValue
|| keepAll
);
99 afterrender: function(panel
) {
100 if (panel
.needMask
) {
101 panel
.down('component[name=no-keeps-hint]').setHtml('');
103 gettext('Backup content type not available for this storage.'),
105 } else if (panel
.isCreate
) {
106 panel
.down('proxmoxcheckbox[name=keep-all]').setValue(true);
108 panel
.down('component[name=pbs-hint]').setHidden(!panel
.isPBS
);
110 panel
.query('pmxPruneKeepField').forEach(field
=> {
111 field
.on('change', panel
.updateComponents
, panel
);
113 panel
.updateComponents();
118 xtype
: 'proxmoxcheckbox',
120 boxLabel
: gettext('Keep all backups'),
122 change: function(field
, newValue
) {
123 let panel
= field
.up('pveStoragePruneInputPanel');
124 panel
.updateComponents();
133 name
: 'no-keeps-hint',
136 html
: gettext('Without any keep option, the nodes vzdump.conf or `keep-last 1` is used as fallback for backup jobs'),
144 html
: gettext("It's preferred to configure backup retention directly on the Proxmox Backup Server."),
149 Ext
.define('PVE.storage.BaseEdit', {
150 extend
: 'Proxmox.window.Edit',
152 apiCallDone: function(success
, response
, options
) {
154 if (typeof me
.ipanel
.apiCallDone
=== "function") {
155 me
.ipanel
.apiCallDone(success
, response
, options
);
159 initComponent : function() {
162 me
.isCreate
= !me
.storageId
;
165 me
.url
= '/api2/extjs/storage';
168 me
.url
= '/api2/extjs/storage/' + me
.storageId
;
172 me
.ipanel
= Ext
.create(me
.paneltype
, {
173 title
: gettext('General'),
175 isCreate
: me
.isCreate
,
176 storageId
: me
.storageId
180 subject
: PVE
.Utils
.format_storage_type(me
.type
),
191 xtype
: 'pveStoragePruneInputPanel',
192 title
: gettext('Backup Retention'),
193 isCreate
: me
.isCreate
,
194 isPBS
: me
.ipanel
.isPBS
,
200 if (me
.ipanel
.extraTabs
) {
201 me
.ipanel
.extraTabs
.forEach(panel
=> {
202 panel
.isCreate
= me
.isCreate
;
203 me
.items
.items
.push(panel
);
209 let contentTypeField
= me
.ipanel
.down('pveContentTypeSelector');
210 if (contentTypeField
&& !contentTypeField
.cts
.includes('backup')) {
211 // cannot mask now, not fully rendered until activated
212 me
.down('pmxPruneInputPanel').needMask
= true;
217 success: function(response
, options
) {
218 var values
= response
.result
.data
;
219 var ctypes
= values
.content
|| '';
221 values
.content
= ctypes
.split(',');
224 values
.nodes
= values
.nodes
.split(',');
226 values
.enable
= values
.disable
? 0 : 1;
227 if (values
['prune-backups']) {
228 let retention
= PVE
.Parser
.parsePropertyString(values
['prune-backups']);
229 delete values
['prune-backups'];
230 Object
.assign(values
, retention
);
231 } else if (values
.maxfiles
!== undefined) {
232 if (values
.maxfiles
> 0) {
233 values
['keep-last'] = values
.maxfiles
;
235 delete values
.maxfiles
;
238 me
.query('inputpanel').forEach(panel
=> {
239 panel
.setValues(values
);