]> git.proxmox.com Git - ceph.git/blob - ceph/src/pybind/mgr/dashboard/frontend/src/app/shared/api/rgw-bucket.service.ts
update sources to ceph Nautilus 14.2.1
[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 { forkJoin as observableForkJoin, of as observableOf } from 'rxjs';
6 import { mergeMap } 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 return this.enumerate().pipe(
26 mergeMap((buckets: string[]) => {
27 if (buckets.length > 0) {
28 return observableForkJoin(
29 buckets.map((bucket: string) => {
30 return this.get(bucket);
31 })
32 );
33 }
34 return observableOf([]);
35 })
36 );
37 }
38
39 /**
40 * Get the list of bucket names.
41 * @return {Observable<string[]>}
42 */
43 enumerate() {
44 return this.http.get(this.url);
45 }
46
47 get(bucket: string) {
48 return this.http.get(`${this.url}/${bucket}`);
49 }
50
51 create(bucket: string, uid: string) {
52 let params = new HttpParams();
53 params = params.append('bucket', bucket);
54 params = params.append('uid', uid);
55 return this.http.post(this.url, null, { params: params });
56 }
57
58 update(bucket: string, bucketId: string, uid: string) {
59 let params = new HttpParams();
60 params = params.append('bucket_id', bucketId);
61 params = params.append('uid', uid);
62 return this.http.put(`${this.url}/${bucket}`, null, { params: params });
63 }
64
65 delete(bucket: string, purgeObjects = true) {
66 let params = new HttpParams();
67 params = params.append('purge_objects', purgeObjects ? 'true' : 'false');
68 return this.http.delete(`${this.url}/${bucket}`, { params: params });
69 }
70
71 /**
72 * Check if the specified bucket exists.
73 * @param {string} uid The bucket name to check.
74 * @return {Observable<boolean>}
75 */
76 exists(bucket: string) {
77 return this.enumerate().pipe(
78 mergeMap((resp: string[]) => {
79 const index = _.indexOf(resp, bucket);
80 return observableOf(-1 !== index);
81 })
82 );
83 }
84 }