self._set_acl(bucket_name, canned_acl, uid, daemon_name)
return self._append_bid(result)
- def delete(self, bucket, purge_objects='true', daemon_name=None):
- return self.proxy(daemon_name, 'DELETE', 'bucket', {
- 'bucket': bucket,
- 'purge-objects': purge_objects
- }, json_response=False)
+ def delete(self, bucket, daemon_name=None):
+ try:
+ bucket_info = self.proxy(daemon_name, 'GET', 'bucket', {'bucket': bucket})
+ num_objects = bucket_info.get('usage', {}).get('rgw.main', {}).get('num_objects', 0)
+ if num_objects > 0:
+ raise DashboardException(msg='Unable to delete bucket"{}" - Bucket is not empty. '
+ 'Remove all objects before deletion.'.format(bucket))
+ return self.proxy(daemon_name, 'DELETE', 'bucket', {
+ 'bucket': bucket
+ }, json_response=False)
+ except (DashboardException, RequestException) as e: # pragma: no cover
+ raise DashboardException(e, component='rgw')
@RESTController.Collection(method='PUT', path='/setEncryptionConfig')
@allow_empty_body
permission: 'delete',
icon: Icons.destroy,
click: () => this.deleteAction(),
+ disable: () => this.isDeleteDisabled(),
name: this.actionLabels.DELETE
};
this.tableActions = [addAction, editAction, deleteAction];
this.setTableRefreshTimeout();
}
+ isDeleteDisabled(): boolean | string {
+ if (!this.selection.first()) {
+ return true;
+ }
+ return this.selection.first()?.num_objects > 0
+ ? $localize`Bucket is not empty. Remove all objects before deletion.`
+ : false;
+ }
+
getBucketList(context: CdTableFetchDataContext) {
this.setTableRefreshTimeout();
this.subs.add(
expect(req.request.method).toBe('PUT');
});
- it('should call delete, with purgeObjects = true', () => {
+ it('should call delete', () => {
service.delete('foo').subscribe();
- const req = httpTesting.expectOne(
- `api/rgw/bucket/foo?${RgwHelper.DAEMON_QUERY_PARAM}&purge_objects=true`
- );
- expect(req.request.method).toBe('DELETE');
- });
-
- it('should call delete, with purgeObjects = false', () => {
- service.delete('foo', false).subscribe();
- const req = httpTesting.expectOne(
- `api/rgw/bucket/foo?${RgwHelper.DAEMON_QUERY_PARAM}&purge_objects=false`
- );
+ const req = httpTesting.expectOne(`api/rgw/bucket/foo?${RgwHelper.DAEMON_QUERY_PARAM}`);
expect(req.request.method).toBe('DELETE');
});
});
}
- delete(bucket: string, purgeObjects = true) {
+ delete(bucket: string) {
return this.rgwDaemonService.request((params: HttpParams) => {
- params = params.append('purge_objects', purgeObjects ? 'true' : 'false');
return this.http.delete(`${this.url}/${bucket}`, { params: params });
});
}