]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/storage/Base.js
186ddc9c09fb0f4d7250670d0d3528025067ea9b
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 if (this.needMask
) { // isMasked() may not yet be true if not rendered once
70 } else if (this.isCreate
&& !this.rendered
) {
71 return { 'prune-backups': 'keep-all=1' };
73 delete formValues
.delete;
74 let retention
= PVE
.Parser
.printPropertyString(formValues
);
75 if (retention
=== '') {
79 // always delete old 'maxfiles' on edit, we map it to keep-last on window load
81 delete: ['prune-backups', 'maxfiles'],
84 let options
= { 'prune-backups': retention
};
86 options
.delete = 'maxfiles';
91 updateComponents: function() {
94 let keepAll
= panel
.down('proxmoxcheckbox[name=keep-all]').getValue();
96 panel
.query('pmxPruneKeepField').forEach(field
=> {
97 anyValue
= anyValue
|| field
.getValue() !== null;
98 field
.setDisabled(keepAll
);
100 panel
.down('component[name=no-keeps-hint]').setHidden(anyValue
|| keepAll
);
104 afterrender: function(panel
) {
105 if (panel
.needMask
) {
106 panel
.down('component[name=no-keeps-hint]').setHtml('');
108 gettext('Backup content type not available for this storage.'),
110 } else if (panel
.isCreate
) {
111 panel
.down('proxmoxcheckbox[name=keep-all]').setValue(true);
113 panel
.down('component[name=pbs-hint]').setHidden(!panel
.isPBS
);
115 panel
.query('pmxPruneKeepField').forEach(field
=> {
116 field
.on('change', panel
.updateComponents
, panel
);
118 panel
.updateComponents();
123 xtype
: 'proxmoxcheckbox',
125 boxLabel
: gettext('Keep all backups'),
127 change: function(field
, newValue
) {
128 let panel
= field
.up('pveStoragePruneInputPanel');
129 panel
.updateComponents();
138 name
: 'no-keeps-hint',
141 html
: gettext('Without any keep option, the nodes vzdump.conf or `keep-last 1` is used as fallback for backup jobs'),
149 html
: gettext("It's preferred to configure backup retention directly on the Proxmox Backup Server."),
154 Ext
.define('PVE.storage.BaseEdit', {
155 extend
: 'Proxmox.window.Edit',
157 apiCallDone: function(success
, response
, options
) {
159 if (typeof me
.ipanel
.apiCallDone
=== "function") {
160 me
.ipanel
.apiCallDone(success
, response
, options
);
164 initComponent: function() {
167 me
.isCreate
= !me
.storageId
;
170 me
.url
= '/api2/extjs/storage';
173 me
.url
= '/api2/extjs/storage/' + me
.storageId
;
177 me
.ipanel
= Ext
.create(me
.paneltype
, {
178 title
: gettext('General'),
180 isCreate
: me
.isCreate
,
181 storageId
: me
.storageId
,
185 subject
: PVE
.Utils
.format_storage_type(me
.type
),
196 xtype
: 'pveStoragePruneInputPanel',
197 title
: gettext('Backup Retention'),
198 isCreate
: me
.isCreate
,
199 isPBS
: me
.ipanel
.isPBS
,
205 if (me
.ipanel
.extraTabs
) {
206 me
.ipanel
.extraTabs
.forEach(panel
=> {
207 panel
.isCreate
= me
.isCreate
;
208 me
.items
.items
.push(panel
);
214 if (!me
.canDoBackups
) {
215 // cannot mask now, not fully rendered until activated
216 me
.down('pmxPruneInputPanel').needMask
= true;
221 success: function(response
, options
) {
222 var values
= response
.result
.data
;
223 var ctypes
= values
.content
|| '';
225 values
.content
= ctypes
.split(',');
228 values
.nodes
= values
.nodes
.split(',');
230 values
.enable
= values
.disable
? 0 : 1;
231 if (values
['prune-backups']) {
232 let retention
= PVE
.Parser
.parsePropertyString(values
['prune-backups']);
233 delete values
['prune-backups'];
234 Object
.assign(values
, retention
);
235 } else if (values
.maxfiles
!== undefined) {
236 if (values
.maxfiles
> 0) {
237 values
['keep-last'] = values
.maxfiles
;
239 delete values
.maxfiles
;
242 me
.query('inputpanel').forEach(panel
=> {
243 panel
.setValues(values
);