1 <cd-rgw-multisite-tabs></cd-rgw-multisite-tabs>
3 <!-- Show the alert only when the user has the permission to configure -->
4 <cd-alert-panel *ngIf="permissions.configOpt.create && !rgwModuleStatus"
8 class="align-items-center"
10 (action)="enableRgwModule()">
11 In order to access the import/export feature, the rgw module must be enabled.
13 <cd-alert-panel *ngIf="restartGatewayMessage"
16 i18n>Please restart all Ceph Object Gateway instances in all zones to ensure consistent multisite configuration updates.
17 <a class="text-decoration-underline"
18 routerLink="/services">
21 <cd-table-actions class="btn-group mb-4 me-2"
22 [permission]="permissions.rgw"
23 [selection]="selection"
24 [tableActions]="multisiteReplicationActions">
26 <cd-table-actions *ngIf="showMigrateAndReplicationActions"
27 class="btn-group mb-4 me-2 secondary"
28 [permission]="permissions.rgw"
30 [selection]="selection"
31 [tableActions]="migrateTableAction">
33 <cd-table-actions *ngIf="!showMigrateAndReplicationActions"
34 class="btn-group mb-4 me-2"
35 [permission]="permissions.rgw"
36 [selection]="selection"
37 [tableActions]="createTableActions"
38 [primaryDropDown]="true">
40 <cd-table-actions class="btn-group mb-4 me-2"
41 [permission]="permissions.rgw"
43 [selection]="selection"
44 [tableActions]="importAction">
46 <cd-table-actions class="btn-group mb-4 me-2"
47 [permission]="permissions.rgw"
49 [selection]="selection"
50 [tableActions]="exportAction">
54 <div class="card-header"
55 data-testid="rgw-multisite-details-header"
56 i18n>Topology Viewer</div>
58 <div class="col-sm-6 col-lg-6 tree-container">
59 <i *ngIf="loadingIndicator"
60 [ngClass]="[icons.large, icons.spinner, icons.spin]"></i>
62 [isMultiSelect]="false"
63 (select)="onNodeSelected($event)">
64 <ng-template #nodeTemplateRef
67 <cds-tree-node [node]="node"
69 <ng-container *ngIf="node?.children && node?.children?.length">
70 <ng-container *ngFor="let child of node.children; let i = index;">
71 <ng-container *ngTemplateOutlet="nodeTemplateRef; context: { node: child, depth: depth + 1 };">
77 <ng-template #treeNodeTemplate
79 <div class="w-100 d-flex justify-content-between align-items-center pe-1">
81 <span *ngIf="node?.data?.name"
83 <span *ngIf="(node?.data?.show_warning)">
84 <svg [cdsIcon]="icons.danger"
86 [title]="node?.data?.warning_message"
87 class="cds-danger-color"></svg>
89 <svg *ngIf="node?.data?.icon === 'scales'"
90 [cdsIcon]="icons.reweight"
93 <svg *ngIf="node?.data?.icon === 'cube'"
94 [cdsIcon]="icons.deploy"
97 <svg *ngIf="node?.data?.icon === 'fa fa-cubes'"
98 [cdsIcon]="icons.parentChild"
101 {{ node?.data?.name }}
103 <span class="badge badge-success me-2"
104 *ngIf="node?.data?.is_default">
107 <span class="badge badge-warning me-2"
108 *ngIf="node?.data?.is_master"> master </span>
109 <span class="badge badge-warning me-2"
110 *ngIf="node?.data?.secondary_zone">
114 <div class="btn-group align-inline-btns"
115 [ngStyle]="{'visibility': activeNodeId === node?.data?.id ? 'visible' : 'hidden'}"
117 <div [title]="editTitle"
119 <button type="button"
120 class="btn btn-light dropdown-toggle-split ms-1"
121 (click)="openModal(node, true)"
122 [disabled]="getDisable() || node?.data?.secondary_zone">
123 <svg [cdsIcon]="icons.edit"
124 [size]="icons.size16"
125 class="cds-info-color"></svg>
128 <ng-container *ngIf="isDeleteDisabled(node) as nodeDeleteData">
129 <div [title]="nodeDeleteData.deleteTitle"
131 <button type="button"
132 class="btn btn-light ms-1"
133 [disabled]="nodeDeleteData.isDisabled || node?.data?.secondary_zone"
134 (click)="delete(node)">
135 <svg [cdsIcon]="icons.destroy"
136 [size]="icons.size16"
137 class="cds-info-color"></svg>
144 <ng-container *ngFor="let node of nodes">
145 <ng-container *ngTemplateOutlet="nodeTemplateRef; context: { node: node, depth: 0 };">
150 <div class="col-sm-6 col-lg-6 metadata"
152 <legend>{{ metadataTitle }}</legend>
154 <cd-table-key-value [data]="metadata">
155 </cd-table-key-value>
161 <router-outlet name="modal"></router-outlet>