1 import { CommonModule } from '@angular/common';
2 import { NgModule } from '@angular/core';
3 import { FormsModule, ReactiveFormsModule } from '@angular/forms';
4 import { RouterModule, Routes } from '@angular/router';
6 import { TreeModule } from '@circlon/angular-tree-component';
7 import { NgbNavModule, NgbPopoverModule, NgbTooltipModule } from '@ng-bootstrap/ng-bootstrap';
8 import { NgxPipeFunctionModule } from 'ngx-pipe-function';
10 import { ActionLabels, URLVerbs } from '~/app/shared/constants/app.constants';
11 import { FeatureTogglesGuardService } from '~/app/shared/services/feature-toggles-guard.service';
12 import { ModuleStatusGuardService } from '~/app/shared/services/module-status-guard.service';
13 import { SharedModule } from '~/app/shared/shared.module';
14 import { IscsiSettingComponent } from './iscsi-setting/iscsi-setting.component';
15 import { IscsiTabsComponent } from './iscsi-tabs/iscsi-tabs.component';
16 import { IscsiTargetDetailsComponent } from './iscsi-target-details/iscsi-target-details.component';
17 import { IscsiTargetDiscoveryModalComponent } from './iscsi-target-discovery-modal/iscsi-target-discovery-modal.component';
18 import { IscsiTargetFormComponent } from './iscsi-target-form/iscsi-target-form.component';
19 import { IscsiTargetImageSettingsModalComponent } from './iscsi-target-image-settings-modal/iscsi-target-image-settings-modal.component';
20 import { IscsiTargetIqnSettingsModalComponent } from './iscsi-target-iqn-settings-modal/iscsi-target-iqn-settings-modal.component';
21 import { IscsiTargetListComponent } from './iscsi-target-list/iscsi-target-list.component';
22 import { IscsiComponent } from './iscsi/iscsi.component';
23 import { MirroringModule } from './mirroring/mirroring.module';
24 import { OverviewComponent as RbdMirroringComponent } from './mirroring/overview/overview.component';
25 import { PoolEditModeModalComponent } from './mirroring/pool-edit-mode-modal/pool-edit-mode-modal.component';
26 import { RbdConfigurationFormComponent } from './rbd-configuration-form/rbd-configuration-form.component';
27 import { RbdConfigurationListComponent } from './rbd-configuration-list/rbd-configuration-list.component';
28 import { RbdDetailsComponent } from './rbd-details/rbd-details.component';
29 import { RbdFormComponent } from './rbd-form/rbd-form.component';
30 import { RbdListComponent } from './rbd-list/rbd-list.component';
31 import { RbdNamespaceFormModalComponent } from './rbd-namespace-form/rbd-namespace-form-modal.component';
32 import { RbdNamespaceListComponent } from './rbd-namespace-list/rbd-namespace-list.component';
33 import { RbdPerformanceComponent } from './rbd-performance/rbd-performance.component';
34 import { RbdSnapshotFormModalComponent } from './rbd-snapshot-form/rbd-snapshot-form-modal.component';
35 import { RbdSnapshotListComponent } from './rbd-snapshot-list/rbd-snapshot-list.component';
36 import { RbdTabsComponent } from './rbd-tabs/rbd-tabs.component';
37 import { RbdTrashListComponent } from './rbd-trash-list/rbd-trash-list.component';
38 import { RbdTrashMoveModalComponent } from './rbd-trash-move-modal/rbd-trash-move-modal.component';
39 import { RbdTrashPurgeModalComponent } from './rbd-trash-purge-modal/rbd-trash-purge-modal.component';
40 import { RbdTrashRestoreModalComponent } from './rbd-trash-restore-modal/rbd-trash-restore-modal.component';
51 NgxPipeFunctionModule,
59 IscsiSettingComponent,
61 IscsiTargetListComponent,
64 RbdNamespaceFormModalComponent,
65 RbdNamespaceListComponent,
66 RbdSnapshotListComponent,
67 RbdSnapshotFormModalComponent,
68 RbdTrashListComponent,
69 RbdTrashMoveModalComponent,
70 RbdTrashRestoreModalComponent,
71 RbdTrashPurgeModalComponent,
72 IscsiTargetDetailsComponent,
73 IscsiTargetFormComponent,
74 IscsiTargetImageSettingsModalComponent,
75 IscsiTargetIqnSettingsModalComponent,
76 IscsiTargetDiscoveryModalComponent,
77 RbdConfigurationListComponent,
78 RbdConfigurationFormComponent,
80 RbdPerformanceComponent
82 exports: [RbdConfigurationListComponent, RbdConfigurationFormComponent]
84 export class BlockModule {}
86 /* The following breakdown is needed to allow importing block.module without
87 the routes (e.g.: this module is imported by pool.module for RBD QoS
90 const routes: Routes = [
91 { path: '', redirectTo: 'rbd', pathMatch: 'full' },
94 canActivate: [FeatureTogglesGuardService, ModuleStatusGuardService],
96 moduleStatusGuardConfig: {
97 uiApiPath: 'block/rbd',
99 header: 'No RBD pools available',
100 button_name: 'Create RBD pool',
101 button_route: '/pool/create'
103 breadcrumbs: 'Images'
106 { path: '', component: RbdListComponent },
109 component: RbdNamespaceListComponent,
110 data: { breadcrumbs: 'Namespaces' }
114 component: RbdTrashListComponent,
115 data: { breadcrumbs: 'Trash' }
119 component: RbdPerformanceComponent,
120 data: { breadcrumbs: 'Overall Performance' }
123 path: URLVerbs.CREATE,
124 component: RbdFormComponent,
125 data: { breadcrumbs: ActionLabels.CREATE }
128 path: `${URLVerbs.EDIT}/:image_spec`,
129 component: RbdFormComponent,
130 data: { breadcrumbs: ActionLabels.EDIT }
133 path: `${URLVerbs.CLONE}/:image_spec/:snap`,
134 component: RbdFormComponent,
135 data: { breadcrumbs: ActionLabels.CLONE }
138 path: `${URLVerbs.COPY}/:image_spec`,
139 component: RbdFormComponent,
140 data: { breadcrumbs: ActionLabels.COPY }
143 path: `${URLVerbs.COPY}/:image_spec/:snap`,
144 component: RbdFormComponent,
145 data: { breadcrumbs: ActionLabels.COPY }
151 component: RbdMirroringComponent,
152 canActivate: [FeatureTogglesGuardService, ModuleStatusGuardService],
154 moduleStatusGuardConfig: {
155 uiApiPath: 'block/mirroring',
157 header: $localize`RBD mirroring is not configured`,
158 button_name: $localize`Configure RBD Mirroring`,
159 button_title: $localize`This will create rbd-mirror service and a replicated RBD pool`,
160 component: 'RBD Mirroring',
163 breadcrumbs: 'Mirroring'
167 path: `${URLVerbs.EDIT}/:pool_name`,
168 component: PoolEditModeModalComponent,
176 canActivate: [FeatureTogglesGuardService],
177 data: { breadcrumbs: 'iSCSI' },
179 { path: '', redirectTo: 'overview', pathMatch: 'full' },
180 { path: 'overview', component: IscsiComponent, data: { breadcrumbs: 'Overview' } },
183 data: { breadcrumbs: 'Targets' },
185 { path: '', component: IscsiTargetListComponent },
187 path: URLVerbs.CREATE,
188 component: IscsiTargetFormComponent,
189 data: { breadcrumbs: ActionLabels.CREATE }
192 path: `${URLVerbs.EDIT}/:target_iqn`,
193 component: IscsiTargetFormComponent,
194 data: { breadcrumbs: ActionLabels.EDIT }
203 imports: [BlockModule, RouterModule.forChild(routes)]
205 export class RoutedBlockModule {}