Skip to content

Commit ec6d2aa

Browse files
authored
Merge pull request ceph#58656 from rhcs-dashboard/rgw-sync-policy-routing-fix
mgr/dashboard: Rgw sync policy routing fix Reviewed-by: Nizamudeen A <[email protected]>
2 parents 10539b1 + ca4759b commit ec6d2aa

18 files changed

+410
-419
lines changed

src/pybind/mgr/dashboard/frontend/cypress/e2e/rgw/multisite.e2e.spec.ts

Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,12 @@ describe('Multisite page', () => {
55

66
beforeEach(() => {
77
cy.login();
8-
multisite.navigateTo();
98
});
109

11-
describe('tabs and table tests', () => {
12-
it('should show two tabs', () => {
13-
multisite.getTabsCount().should('eq', 2);
14-
});
15-
16-
it('should show Configuration tab as a first tab', () => {
17-
multisite.getTabText(0).should('eq', 'Configuration');
18-
});
19-
20-
it('should show sync policy tab as a second tab', () => {
21-
multisite.getTabText(1).should('eq', 'Sync Policy');
10+
describe('table tests', () => {
11+
it('should show table on sync-policy page', () => {
12+
multisite.navigateTo();
13+
multisite.tableExist();
2214
});
2315
});
2416

@@ -30,11 +22,12 @@ describe('Multisite page', () => {
3022
});
3123

3224
it('should edit policy status', () => {
25+
multisite.navigateTo();
3326
multisite.edit('test', 'Forbidden');
3427
});
3528

3629
it('should delete policy', () => {
37-
multisite.getTab('Sync Policy').click();
30+
multisite.navigateTo();
3831
multisite.delete('test');
3932
});
4033
});
@@ -47,7 +40,7 @@ describe('Multisite page', () => {
4740
});
4841
describe('symmetrical Flow creation started', () => {
4942
beforeEach(() => {
50-
multisite.getTab('Sync Policy').click();
43+
multisite.navigateTo();
5144
multisite.getExpandCollapseElement().click();
5245
});
5346

@@ -67,7 +60,7 @@ describe('Multisite page', () => {
6760

6861
describe('create, edit & delete directional sync Flow', () => {
6962
beforeEach(() => {
70-
multisite.getTab('Sync Policy').click();
63+
multisite.navigateTo();
7164
multisite.getExpandCollapseElement().click();
7265
});
7366

@@ -82,7 +75,7 @@ describe('Multisite page', () => {
8275

8376
describe('create, edit, delete pipe', () => {
8477
beforeEach(() => {
85-
multisite.getTab('Sync Policy').click();
78+
multisite.navigateTo();
8679
multisite.getExpandCollapseElement().click();
8780
});
8881

src/pybind/mgr/dashboard/frontend/cypress/e2e/rgw/multisite.po.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@ import { PageHelper } from '../page-helper.po';
22

33
const WAIT_TIMER = 1000;
44
const pages = {
5-
index: { url: '#/rgw/multisite', id: 'cd-rgw-multisite-details' },
6-
create: { url: '#/rgw/multisite/sync-policy/create', id: 'cd-rgw-multisite-sync-policy-form' },
7-
edit: { url: '#/rgw/multisite/sync-policy/edit', id: 'cd-rgw-multisite-sync-policy-form' }
5+
index: { url: '#/rgw/multisite/sync-policy', id: 'cd-rgw-multisite-sync-policy' },
6+
create: {
7+
url: '#/rgw/multisite/sync-policy/(modal:create)',
8+
id: 'cd-rgw-multisite-sync-policy-form'
9+
},
10+
edit: { url: '#/rgw/multisite/sync-policy/(modal:edit', id: 'cd-rgw-multisite-sync-policy-form' }
811
};
912
export class MultisitePageHelper extends PageHelper {
1013
pages = pages;
@@ -13,6 +16,11 @@ export class MultisitePageHelper extends PageHelper {
1316
status: 4
1417
};
1518

19+
tableExist() {
20+
cy.get('cd-rgw-multisite-sync-policy cd-table').should('exist');
21+
cy.get('cd-rgw-multisite-sync-policy cd-table-actions').should('exist');
22+
}
23+
1624
@PageHelper.restrictTo(pages.create.url)
1725
create(group_id: string, status: string) {
1826
// Enter in group_id
@@ -28,7 +36,7 @@ export class MultisitePageHelper extends PageHelper {
2836

2937
@PageHelper.restrictTo(pages.index.url)
3038
edit(group_id: string, status: string) {
31-
cy.visit(`${pages.edit.url}/${group_id}`);
39+
cy.visit(`${pages.edit.url}/${group_id})`);
3240

3341
// Change the status field
3442
this.selectOption('status', status);
@@ -42,9 +50,6 @@ export class MultisitePageHelper extends PageHelper {
4250

4351
@PageHelper.restrictTo(pages.index.url)
4452
createSymmetricalFlow(flow_id: string, zones: string[]) {
45-
cy.get('cd-rgw-multisite-sync-policy-details').should('exist');
46-
this.getTab('Flow').should('exist');
47-
this.getTab('Flow').click();
4853
cy.request({
4954
method: 'GET',
5055
url: '/api/rgw/daemon',
Lines changed: 120 additions & 139 deletions
Original file line numberDiff line numberDiff line change
@@ -1,144 +1,125 @@
1-
<nav ngbNav
2-
#nav="ngbNav"
3-
class="nav-tabs"
4-
[(activeId)]="activeId"
5-
(navChange)="onNavChange($event)">
6-
<ng-container ngbNavItem="configuration">
7-
<a ngbNavLink
8-
i18n>Configuration</a>
9-
<ng-template ngbNavContent>
10-
<div>
11-
<cd-alert-panel *ngIf="!rgwModuleStatus"
12-
type="info"
13-
spacingClass="mb-3"
14-
class="d-flex align-items-center"
15-
i18n>In order to access the import/export feature, the rgw module must be enabled
16-
<button class="btn btn-light mx-2"
17-
type="button"
18-
(click)="enableRgwModule()">Enable</button>
19-
</cd-alert-panel>
20-
<cd-alert-panel *ngIf="restartGatewayMessage"
21-
type="warning"
22-
spacingClass="mb-3"
23-
i18n>Please restart all Ceph Object Gateway instances in all zones to ensure consistent multisite configuration updates.
24-
<a class="text-decoration-underline"
25-
routerLink="/services">
26-
Cluster->Services</a>
27-
</cd-alert-panel>
28-
<span *ngIf="!showMigrateAndReplicationActions; else migrateAndReplicationActionTpl">
29-
<cd-table-actions class="btn-group mb-4 me-2"
30-
[permission]="permission"
31-
[selection]="selection"
32-
[tableActions]="createTableActions">
33-
</cd-table-actions>
34-
</span>
35-
<ng-template #migrateAndReplicationActionTpl>
36-
<cd-table-actions class="btn-group mb-4 me-2"
37-
[permission]="permission"
38-
[selection]="selection"
39-
[tableActions]="multisiteReplicationActions">
40-
</cd-table-actions>
41-
<cd-table-actions class="btn-group mb-4 me-2 secondary"
42-
[permission]="permission"
43-
[btnColor]="'light'"
44-
[selection]="selection"
45-
[tableActions]="migrateTableAction">
46-
</cd-table-actions>
47-
</ng-template>
48-
<cd-table-actions class="btn-group mb-4 me-2"
49-
[permission]="permission"
50-
[btnColor]="'light'"
51-
[selection]="selection"
52-
[tableActions]="importAction">
53-
</cd-table-actions>
54-
<cd-table-actions class="btn-group mb-4 me-2"
55-
[permission]="permission"
56-
[btnColor]="'light'"
57-
[selection]="selection"
58-
[tableActions]="exportAction">
59-
</cd-table-actions>
60-
</div>
61-
<div class="card">
62-
<div class="card-header"
63-
i18n>Topology Viewer
64-
</div>
65-
<div class="row">
66-
<div class="col-sm-6 col-lg-6 tree-container">
67-
<i *ngIf="loadingIndicator"
68-
[ngClass]="[icons.large, icons.spinner, icons.spin]"></i>
69-
<tree-root #tree
70-
[nodes]="nodes"
71-
[options]="treeOptions"
72-
(updateData)="onUpdateData()">
73-
<ng-template #treeNodeTemplate
74-
let-node>
75-
<span *ngIf="node.data.name"
76-
class="me-3">
77-
<span *ngIf="(node.data.show_warning)">
78-
<i class="text-danger"
79-
i18n-title
80-
[title]="node.data.warning_message"
81-
[ngClass]="icons.danger"></i>
82-
</span>
83-
<i [ngClass]="node.data.icon"></i>
84-
{{ node.data.name }}
85-
</span>
86-
<span class="badge badge-success me-2"
87-
*ngIf="node.data.is_default">
88-
default
89-
</span>
90-
<span class="badge badge-warning me-2"
91-
*ngIf="node.data.is_master"> master </span>
92-
<span class="badge badge-warning me-2"
93-
*ngIf="node.data.secondary_zone">
94-
secondary-zone
95-
</span>
96-
<div class="btn-group align-inline-btns"
97-
*ngIf="node.isFocused"
98-
role="group">
99-
<div [title]="editTitle"
100-
i18n-title>
101-
<button type="button"
102-
class="btn btn-light dropdown-toggle-split ms-1"
103-
(click)="openModal(node, true)"
104-
[disabled]="getDisable() || node.data.secondary_zone">
105-
<i [ngClass]="[icons.edit]"></i>
106-
</button>
107-
</div>
108-
<div [title]="deleteTitle"
109-
i18n-title>
110-
<button type="button"
111-
class="btn btn-light ms-1"
112-
[disabled]="isDeleteDisabled(node) || node.data.secondary_zone"
113-
(click)="delete(node)">
114-
<i [ngClass]="[icons.destroy]"></i>
115-
</button>
116-
</div>
117-
</div>
118-
</ng-template>
119-
</tree-root>
120-
</div>
121-
<div class="col-sm-6 col-lg-6 metadata"
122-
*ngIf="metadata">
123-
<legend>{{ metadataTitle }}</legend>
124-
<div>
125-
<cd-table-key-value cdTableDetail
126-
[data]="metadata">
127-
</cd-table-key-value>
1+
<cd-rgw-multisite-tabs></cd-rgw-multisite-tabs>
2+
<div>
3+
<cd-alert-panel *ngIf="!rgwModuleStatus"
4+
type="info"
5+
spacingClass="mb-3"
6+
class="d-flex align-items-center"
7+
i18n>In order to access the import/export feature, the rgw module must be enabled
8+
<button class="btn btn-light mx-2"
9+
type="button"
10+
(click)="enableRgwModule()">Enable</button>
11+
</cd-alert-panel>
12+
<cd-alert-panel *ngIf="restartGatewayMessage"
13+
type="warning"
14+
spacingClass="mb-3"
15+
i18n>Please restart all Ceph Object Gateway instances in all zones to ensure consistent multisite configuration updates.
16+
<a class="text-decoration-underline"
17+
routerLink="/services">
18+
Cluster->Services</a>
19+
</cd-alert-panel>
20+
<span *ngIf="!showMigrateAndReplicationActions; else migrateAndReplicationActionTpl">
21+
<cd-table-actions class="btn-group mb-4 me-2"
22+
[permission]="permission"
23+
[selection]="selection"
24+
[tableActions]="createTableActions">
25+
</cd-table-actions>
26+
</span>
27+
<ng-template #migrateAndReplicationActionTpl>
28+
<cd-table-actions class="btn-group mb-4 me-2"
29+
[permission]="permission"
30+
[selection]="selection"
31+
[tableActions]="multisiteReplicationActions">
32+
</cd-table-actions>
33+
<cd-table-actions class="btn-group mb-4 me-2 secondary"
34+
[permission]="permission"
35+
[btnColor]="'light'"
36+
[selection]="selection"
37+
[tableActions]="migrateTableAction">
38+
</cd-table-actions>
39+
</ng-template>
40+
<cd-table-actions class="btn-group mb-4 me-2"
41+
[permission]="permission"
42+
[btnColor]="'light'"
43+
[selection]="selection"
44+
[tableActions]="importAction">
45+
</cd-table-actions>
46+
<cd-table-actions class="btn-group mb-4 me-2"
47+
[permission]="permission"
48+
[btnColor]="'light'"
49+
[selection]="selection"
50+
[tableActions]="exportAction">
51+
</cd-table-actions>
52+
</div>
53+
<div class="card">
54+
<div class="card-header"
55+
i18n>Topology Viewer
56+
</div>
57+
<div class="row">
58+
<div class="col-sm-6 col-lg-6 tree-container">
59+
<i *ngIf="loadingIndicator"
60+
[ngClass]="[icons.large, icons.spinner, icons.spin]"></i>
61+
<tree-root #tree
62+
[nodes]="nodes"
63+
[options]="treeOptions"
64+
(updateData)="onUpdateData()">
65+
<ng-template #treeNodeTemplate
66+
let-node>
67+
<span *ngIf="node.data.name"
68+
class="me-3">
69+
<span *ngIf="(node.data.show_warning)">
70+
<i class="text-danger"
71+
i18n-title
72+
[title]="node.data.warning_message"
73+
[ngClass]="icons.danger"></i>
74+
</span>
75+
<i [ngClass]="node.data.icon"></i>
76+
{{ node.data.name }}
77+
</span>
78+
<span class="badge badge-success me-2"
79+
*ngIf="node.data.is_default">
80+
default
81+
</span>
82+
<span class="badge badge-warning me-2"
83+
*ngIf="node.data.is_master"> master </span>
84+
<span class="badge badge-warning me-2"
85+
*ngIf="node.data.secondary_zone">
86+
secondary-zone
87+
</span>
88+
<div class="btn-group align-inline-btns"
89+
*ngIf="node.isFocused"
90+
role="group">
91+
<div [title]="editTitle"
92+
i18n-title>
93+
<button type="button"
94+
class="btn btn-light dropdown-toggle-split ms-1"
95+
(click)="openModal(node, true)"
96+
[disabled]="getDisable() || node.data.secondary_zone">
97+
<i [ngClass]="[icons.edit]"></i>
98+
</button>
99+
</div>
100+
<div [title]="deleteTitle"
101+
i18n-title>
102+
<button type="button"
103+
class="btn btn-light ms-1"
104+
[disabled]="isDeleteDisabled(node) || node.data.secondary_zone"
105+
(click)="delete(node)">
106+
<i [ngClass]="[icons.destroy]"></i>
107+
</button>
128108
</div>
129109
</div>
130-
</div>
110+
</ng-template>
111+
</tree-root>
112+
</div>
113+
<div class="col-sm-6 col-lg-6 metadata"
114+
*ngIf="metadata">
115+
<legend>{{ metadataTitle }}</legend>
116+
<div>
117+
<cd-table-key-value cdTableDetail
118+
[data]="metadata">
119+
</cd-table-key-value>
131120
</div>
132-
</ng-template>
133-
</ng-container>
134-
<ng-container ngbNavItem="syncPolicy">
135-
<a ngbNavLink
136-
i18n>Sync Policy</a>
137-
<ng-template ngbNavContent>
138-
<cd-rgw-multisite-sync-policy></cd-rgw-multisite-sync-policy>
139-
</ng-template>
140-
</ng-container>
141-
</nav>
121+
</div>
122+
</div>
123+
</div>
142124

143-
<div [ngbNavOutlet]="nav"></div>
144125
<router-outlet name="modal"></router-outlet>

0 commit comments

Comments
 (0)