From cc3ffade78ad8700f58388a5f5e3861171ff52b9 Mon Sep 17 00:00:00 2001 From: Ricardo Marques Date: Thu, 19 Apr 2018 15:11:32 +0100 Subject: [PATCH] mgr/dashboard: RBD snapshot clone (frontend) Signed-off-by: Ricardo Marques --- .../frontend/src/app/app-routing.module.ts | 5 + .../rbd-details/rbd-details.component.spec.ts | 3 +- .../rbd-form/rbd-form-clone-request.model.ts | 9 ++ .../ceph/block/rbd-form/rbd-form-mode.enum.ts | 4 + .../block/rbd-form/rbd-form-response.model.ts | 2 + .../block/rbd-form/rbd-form.component.html | 27 ++++- .../ceph/block/rbd-form/rbd-form.component.ts | 101 ++++++++++++++++-- .../ceph/block/rbd-form/rbd-parent.model.ts | 5 + .../ceph/block/rbd-list/rbd-list.component.ts | 7 ++ .../rbd-snapshot-list.component.html | 6 ++ .../rbd-snapshot-list.component.spec.ts | 4 +- .../src/app/shared/api/rbd.service.ts | 6 ++ .../services/task-manager-message.service.ts | 12 +++ 13 files changed, 174 insertions(+), 17 deletions(-) create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form-clone-request.model.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form-mode.enum.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-parent.model.ts diff --git a/src/pybind/mgr/dashboard/frontend/src/app/app-routing.module.ts b/src/pybind/mgr/dashboard/frontend/src/app/app-routing.module.ts index f6b0ed126d2..a015eebe050 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/app-routing.module.ts +++ b/src/pybind/mgr/dashboard/frontend/src/app/app-routing.module.ts @@ -49,6 +49,11 @@ const routes: Routes = [ { path: 'rbd/add', component: RbdFormComponent, canActivate: [AuthGuardService] }, { path: 'rbd/edit/:pool/:name', component: RbdFormComponent, canActivate: [AuthGuardService] }, { path: 'pool', component: PoolListComponent, canActivate: [AuthGuardService] }, + { + path: 'rbd/clone/:pool/:name/:snap', + component: RbdFormComponent, + canActivate: [AuthGuardService] + }, { path: 'perf_counters/:type/:id', component: PerformanceCounterComponent, diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-details/rbd-details.component.spec.ts b/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-details/rbd-details.component.spec.ts index efca5704b5b..25a2d4507ce 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-details/rbd-details.component.spec.ts +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-details/rbd-details.component.spec.ts @@ -1,4 +1,5 @@ import { async, ComponentFixture, TestBed } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; import { TabsModule, TooltipModule } from 'ngx-bootstrap'; @@ -13,7 +14,7 @@ describe('RbdDetailsComponent', () => { beforeEach(async(() => { TestBed.configureTestingModule({ declarations: [ RbdDetailsComponent, RbdSnapshotListComponent ], - imports: [ SharedModule, TabsModule.forRoot(), TooltipModule.forRoot(), ] + imports: [ SharedModule, TabsModule.forRoot(), TooltipModule.forRoot(), RouterTestingModule] }) .compileComponents(); })); diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form-clone-request.model.ts b/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form-clone-request.model.ts new file mode 100644 index 00000000000..826d4cc3fa9 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form-clone-request.model.ts @@ -0,0 +1,9 @@ +export class RbdFormCloneRequestModel { + child_pool_name: string; + child_image_name: string; + obj_size: number; + features: Array = []; + stripe_unit: number; + stripe_count: number; + data_pool: string; +} diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form-mode.enum.ts b/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form-mode.enum.ts new file mode 100644 index 00000000000..c89005fbc19 --- /dev/null +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form-mode.enum.ts @@ -0,0 +1,4 @@ +export enum RbdFormMode { + editing = 'editing', + cloning = 'cloning' +} diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form-response.model.ts b/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form-response.model.ts index 112d060502d..7468e3a2b50 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form-response.model.ts +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form-response.model.ts @@ -1,5 +1,7 @@ import { RbdFormModel } from './rbd-form.model'; +import { RbdParentModel } from './rbd-parent.model'; export class RbdFormResponseModel extends RbdFormModel { features_name: string[]; + parent: RbdParentModel; } diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form.component.html b/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form.component.html index 19f745f5ec8..71bcda73c69 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form.component.html +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/block/rbd-form/rbd-form.component.html @@ -4,7 +4,7 @@ + i18n>{mode, select, editing {Edit} cloning {Clone} other {Add}} @@ -17,11 +17,28 @@

- {editing, select, 1 {Edit} other {Add}} RBD + {mode, select, editing {Edit} cloning {Clone} other {Add}} RBD

+ +
+ +
+ +
+
+
+
@@ -175,7 +192,7 @@
+ *ngIf="mode !== rbdFormMode.editing"> Use default features
-
+
- {editing, select, 1 {Update} other {Create}} RBD + {mode, select, editing {Update} cloning {Clone} other {Create}} RBD