From cfc6d15ed057a8c3f9637785701b95373f6b8cb0 Mon Sep 17 00:00:00 2001 From: Fabian Ebner Date: Tue, 6 Apr 2021 12:41:52 +0200 Subject: [PATCH] fix #2745: ui: backup: allow specifying remove parameter for manual backup and also show the retention options that will be used for a given storage. A user with Datastore.AllocateSpace and VM.Backup can already remove backups from the GUI manually, so it shouldn't be a problem if they can set the remove flag when starting a manual backup in the GUI. Signed-off-by: Fabian Ebner --- www/manager6/window/Backup.js | 67 +++++++++++++++++++++++++++++++++-- 1 file changed, 65 insertions(+), 2 deletions(-) diff --git a/www/manager6/window/Backup.js b/www/manager6/window/Backup.js index a6dc1798..886ef6f2 100644 --- a/www/manager6/window/Backup.js +++ b/www/manager6/window/Backup.js @@ -36,6 +36,39 @@ Ext.define('PVE.window.Backup', { emptyText: Proxmox.Utils.noneText, }); + const keepNames = [ + 'keep-last', + 'keep-hourly', + 'keep-daily', + 'keep-weekly', + 'keep-monthly', + 'keep-yearly', + ]; + + let pruneSettings = keepNames.map( + name => Ext.create('Ext.form.field.Display', { + name: name, + fieldLabel: gettext(name), + hidden: true, + disabled: true, + }), + ); + + let removeCheckbox = Ext.create('Proxmox.form.Checkbox', { + name: 'remove', + checked: false, + hidden: true, + uncheckedValue: 0, + fieldLabel: gettext('Prune'), + autoEl: { + tag: 'div', + 'data-qtip': gettext('Prune older backups afterwards'), + }, + handler: function(checkbox, value) { + pruneSettings.forEach(field => field.setDisabled(!value)); + }, + }); + let initialDefaults = false; var storagesel = Ext.create('PVE.form.StorageSelector', { @@ -74,6 +107,35 @@ Ext.define('PVE.window.Backup', { } initialDefaults = true; + + // always update storage dependent properties + if (data['prune-backups'] !== undefined) { + const keepParams = PVE.Parser.parsePropertyString( + data["prune-backups"], + ); + if (!keepParams['keep-all']) { + removeCheckbox.setHidden(false); + pruneSettings.forEach(function(field) { + const keep = keepParams[field.name]; + if (keep) { + field.setValue(keep); + field.setHidden(false); + } else { + field.reset(); + field.setHidden(true); + } + }); + return; + } + } + + // no defaults or keep-all=1 + removeCheckbox.setHidden(true); + removeCheckbox.setValue(false); + pruneSettings.forEach(function(field) { + field.reset(); + field.setHidden(true); + }); }, failure: function(response, opts) { Ext.Msg.alert(gettext('Error'), response.htmlStatus); @@ -96,7 +158,8 @@ Ext.define('PVE.window.Backup', { modeSelector, compressionSelector, mailtoField, - ], + removeCheckbox, + ].concat(pruneSettings), }); var form = me.formPanel.getForm(); @@ -110,7 +173,7 @@ Ext.define('PVE.window.Backup', { storage: storage, vmid: me.vmid, mode: values.mode, - remove: 0, + remove: values.remove, }; if (values.mailto) {