From a784b71abf64ec26d3f424c6298b5ecc97d296e3 Mon Sep 17 00:00:00 2001 From: Naman Munet Date: Tue, 2 Jul 2024 12:06:59 +0530 Subject: [PATCH] mgr/dashboard: RGW sync policy crud operations sync group crud ops added Fixes: https://tracker.ceph.com/issues/66798 Signed-off-by: Naman Munet --- .../cypress/e2e/rgw/multisite.e2e.spec.ts | 18 +- .../frontend/cypress/e2e/rgw/multisite.po.ts | 36 +++- .../src/app/ceph/rgw/models/rgw-multisite.ts | 6 + .../rgw-multisite-details.component.html | 1 + .../rgw-multisite-details.component.ts | 5 + ...-multisite-sync-policy-form.component.html | 102 +++++++++++ ...-multisite-sync-policy-form.component.scss | 0 ...ltisite-sync-policy-form.component.spec.ts | 36 ++++ ...gw-multisite-sync-policy-form.component.ts | 172 ++++++++++++++++++ .../rgw-multisite-sync-policy.component.html | 58 ++++-- ...gw-multisite-sync-policy.component.spec.ts | 4 +- .../rgw-multisite-sync-policy.component.ts | 161 ++++++++++++++-- .../frontend/src/app/ceph/rgw/rgw.module.ts | 33 +++- .../shared/api/rgw-multisite.service.spec.ts | 42 +++++ .../app/shared/api/rgw-multisite.service.ts | 24 +++ .../shared/services/task-message.service.ts | 10 + 16 files changed, 666 insertions(+), 42 deletions(-) create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-sync-policy-form/rgw-multisite-sync-policy-form.component.html create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-sync-policy-form/rgw-multisite-sync-policy-form.component.scss create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-sync-policy-form/rgw-multisite-sync-policy-form.component.spec.ts create mode 100644 src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-sync-policy-form/rgw-multisite-sync-policy-form.component.ts diff --git a/src/pybind/mgr/dashboard/frontend/cypress/e2e/rgw/multisite.e2e.spec.ts b/src/pybind/mgr/dashboard/frontend/cypress/e2e/rgw/multisite.e2e.spec.ts index 13f893035e9..5633bb2f5b4 100644 --- a/src/pybind/mgr/dashboard/frontend/cypress/e2e/rgw/multisite.e2e.spec.ts +++ b/src/pybind/mgr/dashboard/frontend/cypress/e2e/rgw/multisite.e2e.spec.ts @@ -24,7 +24,23 @@ describe('Multisite page', () => { it('should show empty table in Sync Policy page', () => { multisite.getTab('Sync Policy').click(); multisite.getDataTables().should('exist'); - multisite.getTableCount('total').should('eq', 0); + }); + }); + + describe('create, edit & delete sync group policy', () => { + it('should create policy', () => { + multisite.navigateTo('create'); + multisite.create('test', 'Enabled'); + multisite.getFirstTableCell('test').should('exist'); + }); + + it('should edit policy status', () => { + multisite.edit('test', 'Forbidden'); + }); + + it('should delete policy', () => { + multisite.getTab('Sync Policy').click(); + multisite.delete('test'); }); }); }); diff --git a/src/pybind/mgr/dashboard/frontend/cypress/e2e/rgw/multisite.po.ts b/src/pybind/mgr/dashboard/frontend/cypress/e2e/rgw/multisite.po.ts index b48b58e8ee3..bbeda74e9cf 100644 --- a/src/pybind/mgr/dashboard/frontend/cypress/e2e/rgw/multisite.po.ts +++ b/src/pybind/mgr/dashboard/frontend/cypress/e2e/rgw/multisite.po.ts @@ -1,8 +1,42 @@ import { PageHelper } from '../page-helper.po'; +const WAIT_TIMER = 1000; const pages = { - index: { url: '#/rgw/multisite', id: 'cd-rgw-multisite-details' } + index: { url: '#/rgw/multisite', id: 'cd-rgw-multisite-details' }, + create: { url: '#/rgw/multisite/sync-policy/create', id: 'cd-rgw-multisite-sync-policy-form' }, + edit: { url: '#/rgw/multisite/sync-policy/edit', id: 'cd-rgw-multisite-sync-policy-form' } }; export class MultisitePageHelper extends PageHelper { pages = pages; + + columnIndex = { + status: 3 + }; + + @PageHelper.restrictTo(pages.create.url) + create(group_id: string, status: string) { + // Enter in group_id + cy.get('#group_id').type(group_id); + // Show Status + this.selectOption('status', status); + cy.get('#status').should('have.class', 'ng-valid'); + + // Click the create button and wait for policy to be made + cy.contains('button', 'Create Sync Policy Group').wait(WAIT_TIMER).click(); + this.getFirstTableCell(group_id).should('exist'); + } + + @PageHelper.restrictTo(pages.index.url) + edit(group_id: string, status: string) { + cy.visit(`${pages.edit.url}/${group_id}`); + + // Change the status field + this.selectOption('status', status); + cy.contains('button', 'Edit Sync Policy Group').click(); + + this.searchTable(group_id); + cy.get(`datatable-body-cell:nth-child(${this.columnIndex.status})`) + .find('.badge-warning') + .should('contain', status); + } } diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite.ts b/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite.ts index 1729f6418b2..f2fc381e806 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite.ts +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/models/rgw-multisite.ts @@ -50,3 +50,9 @@ export class SystemKey { access_key: string; secret_key: string; } + +export enum RgwMultisiteSyncPolicyStatus { + ENABLED = 'enabled', + FORBIDDEN = 'forbidden', + ALLOWED = 'allowed' +} diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.html b/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.html index f6b9bbae8f3..921a2dfe3eb 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.html +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/rgw/rgw-multisite-details/rgw-multisite-details.component.html @@ -1,6 +1,7 @@