[pbs-devel] [PATCH proxmox-backup v4 45/45] ui: expose s3 refresh button for datastores backed by object store
Christian Ebner
c.ebner at proxmox.com
Mon Jun 23 11:41:06 CEST 2025
Allows to trigger a refresh of the local datastore contents from
the WebUI.
Signed-off-by: Christian Ebner <c.ebner at proxmox.com>
---
www/datastore/Summary.js | 44 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 44 insertions(+)
diff --git a/www/datastore/Summary.js b/www/datastore/Summary.js
index cdb34aea3..d8f59ebc5 100644
--- a/www/datastore/Summary.js
+++ b/www/datastore/Summary.js
@@ -301,6 +301,31 @@ Ext.define('PBS.DataStoreSummary', {
});
},
},
+ {
+ xtype: 'button',
+ text: gettext('S3 Refresh'),
+ hidden: true,
+ itemId: 's3RefreshButton',
+ reference: 's3RefreshButton',
+ handler: function () {
+ let me = this;
+ let datastore = me.up('panel').datastore;
+ Proxmox.Utils.API2Request({
+ url: `/admin/datastore/${datastore}/s3-refresh`,
+ method: 'PUT',
+ failure: (response) => Ext.Msg.alert(gettext('Error'), response.htmlStatus),
+ success: function (response, options) {
+ Ext.create('Proxmox.window.TaskViewer', {
+ upid: response.result.data,
+ taskDone: () => {
+ me.up('panel').statusStore.load();
+ Ext.ComponentQuery.query('navigationtree')[0]?.reloadStore();
+ },
+ }).show();
+ },
+ });
+ },
+ },
'->',
{
xtype: 'proxmoxRRDTypeSelector',
@@ -398,6 +423,7 @@ Ext.define('PBS.DataStoreSummary', {
me.mon(me.statusStore, 'load', (s, records, success) => {
let mountBtn = me.lookupReferenceHolder().lookupReference('mountButton');
let unmountBtn = me.lookupReferenceHolder().lookupReference('unmountButton');
+ let s3RefreshBtn = me.lookupReferenceHolder().lookupReference('s3RefreshButton');
if (!success) {
lastRequestWasFailue = true;
@@ -413,6 +439,16 @@ Ext.define('PBS.DataStoreSummary', {
success: (response) => {
let mode = response.result.data['maintenance-mode'];
let [type, _message] = PBS.Utils.parseMaintenanceMode(mode);
+
+ if (!type && response.result.data.backend) {
+ let backendConfig = PBS.Utils.parsePropertyString(
+ response.result.data.backend,
+ );
+ if (backendConfig.type === 's3') {
+ s3RefreshBtn.setDisabled(true);
+ }
+ }
+
if (!response.result.data['backing-device']) {
return;
}
@@ -466,6 +502,14 @@ Ext.define('PBS.DataStoreSummary', {
me.lookupReferenceHolder().lookupReference('mountButton').setHidden(!removable);
me.lookupReferenceHolder().lookupReference('unmountButton').setHidden(!removable);
+ if (data.backend) {
+ let backendConfig = PBS.Utils.parsePropertyString(data.backend);
+ let s3Backend = backendConfig.type === 's3';
+ me.lookupReferenceHolder()
+ .lookupReference('s3RefreshButton')
+ .setHidden(!s3Backend);
+ }
+
let path = Ext.htmlEncode(data.path);
me.down('pbsDataStoreInfo').setTitle(`${me.datastore} (${path})`);
me.down('pbsDataStoreNotes').setNotes(data.comment);
--
2.47.2
More information about the pbs-devel
mailing list