]> git.proxmox.com Git - ceph.git/blob - ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-bucket.service.ts
import ceph 15.2.14
[ceph.git] / ceph / src / pybind / mgr / dashboard / frontend / src / app / shared / api / rgw-bucket.service.ts
1 import { HttpClient, HttpParams } from '@angular/common/http';
2 import { Injectable } from '@angular/core';
3
4 import * as _ from 'lodash';
5 import { of as observableOf } from 'rxjs';
6 import { catchError, mapTo } from 'rxjs/operators';
7
8 import { cdEncode } from '../decorators/cd-encode';
9 import { ApiModule } from './api.module';
10
11 @cdEncode
12 @Injectable({
13 providedIn: ApiModule
14 })
15 export class RgwBucketService {
16 private url = 'api/rgw/bucket';
17
18 constructor(private http: HttpClient) {}
19
20 /**
21 * Get the list of buckets.
22 * @return {Observable<Object[]>}
23 */
24 list() {
25 let params = new HttpParams();
26 params = params.append('stats', 'true');
27 return this.http.get(this.url, { params: params });
28 }
29
30 get(bucket: string) {
31 return this.http.get(`${this.url}/${bucket}`);
32 }
33
34 create(
35 bucket: string,
36 uid: string,
37 zonegroup: string,
38 placementTarget: string,
39 lockEnabled: boolean,
40 lock_mode: 'GOVERNANCE' | 'COMPLIANCE',
41 lock_retention_period_days: string,
42 lock_retention_period_years: string
43 ) {
44 return this.http.post(this.url, null, {
45 params: new HttpParams({
46 fromObject: {
47 bucket,
48 uid,
49 zonegroup,
50 placement_target: placementTarget,
51 lock_enabled: String(lockEnabled),
52 lock_mode,
53 lock_retention_period_days,
54 lock_retention_period_years
55 }
56 })
57 });
58 }
59
60 update(
61 bucket: string,
62 bucketId: string,
63 uid: string,
64 versioningState: string,
65 mfaDelete: string,
66 mfaTokenSerial: string,
67 mfaTokenPin: string,
68 lockMode: 'GOVERNANCE' | 'COMPLIANCE',
69 lockRetentionPeriodDays: string,
70 lockRetentionPeriodYears: string
71 ) {
72 let params = new HttpParams();
73 params = params.append('bucket_id', bucketId);
74 params = params.append('uid', uid);
75 params = params.append('versioning_state', versioningState);
76 params = params.append('mfa_delete', mfaDelete);
77 params = params.append('mfa_token_serial', mfaTokenSerial);
78 params = params.append('mfa_token_pin', mfaTokenPin);
79 params = params.append('lock_mode', lockMode);
80 params = params.append('lock_retention_period_days', lockRetentionPeriodDays);
81 params = params.append('lock_retention_period_years', lockRetentionPeriodYears);
82 return this.http.put(`${this.url}/${bucket}`, null, { params: params });
83 }
84
85 delete(bucket: string, purgeObjects = true) {
86 let params = new HttpParams();
87 params = params.append('purge_objects', purgeObjects ? 'true' : 'false');
88 return this.http.delete(`${this.url}/${bucket}`, { params: params });
89 }
90
91 /**
92 * Check if the specified bucket exists.
93 * @param {string} bucket The bucket name to check.
94 * @return {Observable<boolean>}
95 */
96 exists(bucket: string) {
97 return this.get(bucket).pipe(
98 mapTo(true),
99 catchError((error: Event) => {
100 if (_.isFunction(error.preventDefault)) {
101 error.preventDefault();
102 }
103 return observableOf(false);
104 })
105 );
106 }
107 }