]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/dashboard: Fix make check failures
authorAfreen Misbah <afreen@ibm.com>
Tue, 28 Apr 2026 10:04:56 +0000 (15:34 +0530)
committerAfreen Misbah <afreen@ibm.com>
Mon, 4 May 2026 10:27:13 +0000 (15:57 +0530)
- openpai yaml rebase
- stylints fixes
- unoit tests fixes due to the usage of newer carbon notifications
- fix rebase files

Signed-off-by: Afreen Misbah <afreen@ibm.com>
17 files changed:
src/pybind/mgr/dashboard/controllers/nvmeof.py
src/pybind/mgr/dashboard/frontend/src/app/ceph/block/nvmeof-gateway-group/nvmeof-gateway-group.component.spec.ts
src/pybind/mgr/dashboard/frontend/src/app/ceph/block/nvmeof-gateway-node/nvmeof-gateway-node.component.spec.ts
src/pybind/mgr/dashboard/frontend/src/app/ceph/block/nvmeof-gateway-node/nvmeof-gateway-node.component.ts
src/pybind/mgr/dashboard/frontend/src/app/ceph/block/nvmeof-subsystem-namespaces-list/nvmeof-subsystem-namespaces-list.component.spec.ts
src/pybind/mgr/dashboard/frontend/src/app/ceph/block/nvmeof-subsystem-overview/nvmeof-subsystem-overview.component.scss
src/pybind/mgr/dashboard/frontend/src/app/ceph/block/nvmeof-subsystems-form/nvmeof-subsystem-step-2/nvmeof-subsystem-step-2.component.scss
src/pybind/mgr/dashboard/frontend/src/app/ceph/block/nvmeof-subsystems-form/nvmeof-subsystem-step-2/nvmeof-subsystem-step-2.component.ts
src/pybind/mgr/dashboard/frontend/src/app/ceph/block/nvmeof-subsystems-form/nvmeof-subsystem-step-3/nvmeof-subsystem-step-3.component.scss
src/pybind/mgr/dashboard/frontend/src/app/shared/api/nvmeof.service.spec.ts
src/pybind/mgr/dashboard/frontend/src/app/shared/components/components.module.ts
src/pybind/mgr/dashboard/frontend/src/app/shared/components/icon/icon.component.scss
src/pybind/mgr/dashboard/frontend/src/app/shared/components/sidebar-layout/sidebar-layout.component.scss
src/pybind/mgr/dashboard/frontend/src/app/shared/components/tearsheet/tearsheet.component.scss
src/pybind/mgr/dashboard/frontend/src/app/shared/enum/icons.enum.ts
src/pybind/mgr/dashboard/frontend/src/styles/ceph-custom/_spacings.scss
src/pybind/mgr/dashboard/openapi.yaml

index 8a8423f945529ceb655c6ea92fd904f1e60cd319..807819e44957246000d2060b580254732388b35c 100644 (file)
@@ -1383,7 +1383,7 @@ else:
 
             if allow_all:
                 return NVMeoFClient(gw_group=gw_group,
-                                    server_address=server_address).stub.add_host(
+                                    traddr=server_address).stub.add_host(
                     NVMeoFClient.pb2.add_host_req(
                         subsystem_nqn=subsystem_nqn,
                         host_nqn="*",
@@ -1395,7 +1395,7 @@ else:
                 key = h.get("dhchap_key")
 
                 response = NVMeoFClient(gw_group=gw_group,
-                                        server_address=server_address).stub.add_host(
+                                        traddr=server_address).stub.add_host(
                     NVMeoFClient.pb2.add_host_req(
                         subsystem_nqn=subsystem_nqn,
                         host_nqn=nqn,
@@ -1427,7 +1427,7 @@ else:
 
             for del_nqn in to_delete_nqns:
                 response = NVMeoFClient(gw_group=gw_group,
-                                        server_address=server_address).stub.remove_host(
+                                        traddr=server_address).stub.remove_host(
                     NVMeoFClient.pb2.remove_host_req(subsystem_nqn=subsystem_nqn, host_nqn=del_nqn)
                 )
                 if response.status != 0:
@@ -1466,7 +1466,7 @@ else:
 
             for nqn in all_host_nqns:
                 response = NVMeoFClient(gw_group=gw_group,
-                                        server_address=server_address).stub.namespace_add_host(
+                                        traddr=server_address).stub.namespace_add_host(
                     NVMeoFClient.pb2.namespace_add_host_req(subsystem_nqn=subsystem_nqn,
                                                             nsid=int(nsid),
                                                             host_nqn=nqn,
@@ -1500,7 +1500,7 @@ else:
 
             for del_nqn in to_delete_nqns:
                 response = NVMeoFClient(gw_group=gw_group,
-                                        server_address=server_address).stub.namespace_delete_host(
+                                        traddr=server_address).stub.namespace_delete_host(
                     NVMeoFClient.pb2.namespace_delete_host_req(
                         subsystem_nqn=subsystem_nqn,
                         nsid=int(nsid),
index d61a4f36894ff9cb4b27dd40216f6934402904a3..2cd3ca11078d264d4f44be3cb38801ca8894c079 100644 (file)
@@ -5,6 +5,8 @@ import { NvmeofService } from '~/app/shared/api/nvmeof.service';
 import { of } from 'rxjs';
 import { HttpClientModule } from '@angular/common/http';
 import { SharedModule } from '~/app/shared/shared.module';
+import { provideAnimations } from '@angular/platform-browser/animations';
+import { provideToastr } from 'ngx-toastr';
 
 describe('NvmeofGatewayGroupComponent', () => {
   let component: NvmeofGatewayGroupComponent;
@@ -20,7 +22,11 @@ describe('NvmeofGatewayGroupComponent', () => {
     await TestBed.configureTestingModule({
       imports: [HttpClientModule, SharedModule, TabsModule, GridModule],
       declarations: [NvmeofGatewayGroupComponent],
-      providers: [{ provide: NvmeofService, useValue: nvmeofServiceSpy }]
+      providers: [
+        provideAnimations(),
+        provideToastr(),
+        { provide: NvmeofService, useValue: nvmeofServiceSpy }
+      ]
     }).compileComponents();
 
     fixture = TestBed.createComponent(NvmeofGatewayGroupComponent);
index 976c8e3960082683050a5deb8766f6d1326bdb8a..10e2350ee91f7e7d2b58cf6969164e1e1a576d65 100644 (file)
@@ -3,7 +3,7 @@ import { ComponentFixture, TestBed, fakeAsync, tick } from '@angular/core/testin
 import { ActivatedRoute } from '@angular/router';
 import { BehaviorSubject, of, throwError } from 'rxjs';
 
-import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
+import { BrowserAnimationsModule, provideAnimations } from '@angular/platform-browser/animations';
 import { RouterTestingModule } from '@angular/router/testing';
 
 import { CephModule } from '~/app/ceph/ceph.module';
@@ -27,6 +27,7 @@ import { SharedModule } from '~/app/shared/shared.module';
 import { configureTestBed } from '~/testing/unit-test-helper';
 import { TagModule } from 'carbon-components-angular';
 import { NvmeofGatewayNodeComponent } from './nvmeof-gateway-node.component';
+import { provideToastr } from 'ngx-toastr';
 
 describe('NvmeofGatewayNodeComponent', () => {
   let component: NvmeofGatewayNodeComponent;
@@ -85,8 +86,8 @@ describe('NvmeofGatewayNodeComponent', () => {
       hostname: 'gateway-node-3',
       addr: '192.168.1.12',
       status: '',
-      labels: [],
-      services: [],
+      labels: [] as string[],
+      services: [] as string[],
       ceph_version: 'ceph version 18.0.0',
       sources: {
         ceph: true,
@@ -108,6 +109,8 @@ describe('NvmeofGatewayNodeComponent', () => {
       TagModule
     ],
     providers: [
+      provideAnimations(),
+      provideToastr(),
       { provide: AuthStorageService, useValue: fakeAuthStorageService },
       {
         provide: ActivatedRoute,
index a8a6f7ca0ac8f38bc75560a0acbbc04af3f29716..399065c405cebfd63758269a5d7775a7f0fe9294 100644 (file)
@@ -278,7 +278,7 @@ export class NvmeofGatewayNodeComponent implements OnInit, OnDestroy {
       const hosts = group.placement?.hosts || (group.spec as any)?.placement?.hosts || [];
       hosts.forEach((hostname: string) => allUsedHostnames.add(hostname));
 
-      const label = group.placement?.label || group.spec?.placement?.label;
+      const label = group.placement?.label || (group.spec as any)?.placement?.label;
       if (label) {
         (hostList || []).forEach((host: Host) => {
           if (host.labels?.includes(label as string)) {
@@ -309,9 +309,9 @@ export class NvmeofGatewayNodeComponent implements OnInit, OnDestroy {
       this.hosts = [];
     } else {
       const placementHosts =
-        this.serviceSpec.placement?.hosts || this.serviceSpec.spec?.placement?.hosts || [];
+        this.serviceSpec.placement?.hosts || (this.serviceSpec.spec as any)?.placement?.hosts || [];
       const placementLabel =
-        this.serviceSpec.placement?.label || this.serviceSpec.spec?.placement?.label;
+        this.serviceSpec.placement?.label || (this.serviceSpec.spec as any)?.placement?.label;
 
       if (placementHosts.length > 0) {
         const currentGroupHosts = new Set<string>(placementHosts);
index 68927708547a05ec08b690664e4dabf9e5eb0d2f..eaede7863cf8f1c633a352314660cb384c5101ac 100644 (file)
@@ -8,6 +8,8 @@ import { NvmeofSubsystemNamespacesListComponent } from './nvmeof-subsystem-names
 import { NvmeofService } from '~/app/shared/api/nvmeof.service';
 import { SharedModule } from '~/app/shared/shared.module';
 import { AuthStorageService } from '~/app/shared/services/auth-storage.service';
+import { provideAnimations } from '@angular/platform-browser/animations';
+import { provideToastr } from 'ngx-toastr';
 
 describe('NvmeofSubsystemNamespacesListComponent', () => {
   let component: NvmeofSubsystemNamespacesListComponent;
@@ -46,6 +48,8 @@ describe('NvmeofSubsystemNamespacesListComponent', () => {
       declarations: [NvmeofSubsystemNamespacesListComponent],
       imports: [HttpClientTestingModule, RouterTestingModule, SharedModule],
       providers: [
+        provideAnimations(),
+        provideToastr(),
         {
           provide: ActivatedRoute,
           useValue: {
index 6270f1ecb847f2259a8789862d75321a7f22dc99..a0d9a355309721ad76c2af6a46dd46332bb77a0e 100644 (file)
@@ -5,10 +5,10 @@
 }
 
 .details-grid {
+  column-gap: layout.$spacing-07;
   display: grid;
   grid-template-columns: repeat(3, 1fr);
   row-gap: layout.$spacing-06;
-  column-gap: layout.$spacing-07;
 }
 
 .detail-item {
index 5559a74cc78f35f86a3469bc5f8c824085925dfc..616d620d921e757bd97c43f89c558d7c82fcb8bd 100644 (file)
@@ -102,7 +102,9 @@ export class NvmeofSubsystemsStepTwoComponent implements OnInit, TearsheetStep {
 
   removeHost(removedHost: string) {
     const currentAddedHosts = this.formGroup.get('addedHosts')?.value ?? [];
-    const newHostList = currentAddedHosts.filter((currentHost: string) => currentHost !== removedHost);
+    const newHostList = currentAddedHosts.filter(
+      (currentHost: string) => currentHost !== removedHost
+    );
     this.addedHostsLength = newHostList.length;
     this.formGroup.patchValue({
       addedHosts: newHostList
index 056a4da67d04897b00fe8216347a7483d57638cc..412014c3e80866cce1ba5cab627f712653139f6f 100755 (executable)
@@ -165,7 +165,7 @@ describe('NvmeofService', () => {
       const request = {
         nqn: mockNQN,
         gw_group: mockGroupName,
-        dhchap_key: null
+        dhchap_key: null as string | null
       };
       service.createSubsystem(request).subscribe();
       const req = httpTesting.expectOne(`${API_PATH}/subsystem`);
@@ -189,7 +189,11 @@ describe('NvmeofService', () => {
 
   describe('test initiators APIs', () => {
     let request = { host_nqn: '', gw_group: mockGroupName };
-    let addRequest = { hosts: [], allow_all: true, gw_group: mockGroupName };
+    let addRequest = {
+      hosts: [] as { dhchap_key: string; host_nqn: string }[],
+      allow_all: true,
+      gw_group: mockGroupName
+    };
     it('should call getInitiators', () => {
       service.getInitiators(mockNQN, mockGroupName).subscribe();
       const req = httpTesting.expectOne(
@@ -306,7 +310,12 @@ describe('NvmeofService', () => {
 
     it('should filter hosts by direct host placement', (done) => {
       const mockGroups = [
-        [{ spec: { group: 'default' }, placement: { hosts: ['host1', 'host3'], label: [] } }]
+        [
+          {
+            spec: { group: 'default' },
+            placement: { hosts: ['host1', 'host3'], label: [] as string[] }
+          }
+        ]
       ];
       mockHostService.getAllHosts.mockReturnValue(of(allHosts));
 
@@ -322,7 +331,7 @@ describe('NvmeofService', () => {
 
     it('should filter hosts by string label placement', (done) => {
       const mockGroups = [
-        [{ spec: { group: 'default' }, placement: { hosts: [], label: 'nvmeof' } }]
+        [{ spec: { group: 'default' }, placement: { hosts: [] as string[], label: 'nvmeof' } }]
       ];
       mockHostService.getAllHosts.mockReturnValue(of(allHosts));
 
@@ -338,7 +347,7 @@ describe('NvmeofService', () => {
 
     it('should return empty array when group not found', (done) => {
       const mockGroups = [
-        [{ spec: { group: 'other' }, placement: { hosts: ['host1'], label: [] } }]
+        [{ spec: { group: 'other' }, placement: { hosts: ['host1'], label: [] as string[] } }]
       ];
       mockHostService.getAllHosts.mockReturnValue(of(allHosts));
 
@@ -352,7 +361,14 @@ describe('NvmeofService', () => {
     });
 
     it('should return empty array when placement has no hosts or labels', (done) => {
-      const mockGroups = [[{ spec: { group: 'default' }, placement: { hosts: [], label: [] } }]];
+      const mockGroups = [
+        [
+          {
+            spec: { group: 'default' },
+            placement: { hosts: [] as string[], label: [] as string[] }
+          }
+        ]
+      ];
       mockHostService.getAllHosts.mockReturnValue(of(allHosts));
 
       service.getHostsForGroup('default').subscribe((hosts: any[]) => {
index 320adbbb190850f23167a2b8e830db7660236ae3..ba8f705ce7d004af0aa70e201817802c70dcf509 100644 (file)
@@ -41,7 +41,8 @@ import {
   TagModule,
   LinkModule,
   LayerModule,
-  TilesModule
+  TilesModule,
+  ThemeModule
 } from 'carbon-components-angular';
 
 import { MotdComponent } from '~/app/shared/components/motd/motd.component';
@@ -88,6 +89,8 @@ import { UpgradableComponent } from './upgradable/upgradable.component';
 import { ProgressComponent } from './progress/progress.component';
 import { TearsheetComponent } from './tearsheet/tearsheet.component';
 import { TearsheetStepComponent } from './tearsheet-step/tearsheet-step.component';
+import { SidePanelComponent } from './side-panel/side-panel.component';
+
 // Icons
 import InfoIcon from '@carbon/icons/es/information/16';
 import CopyIcon from '@carbon/icons/es/copy/32';
@@ -99,9 +102,26 @@ import ErrorFilledIcon from '@carbon/icons/es/error--filled/16';
 import InformationFilledIcon from '@carbon/icons/es/information--filled/16';
 import WarningFilledIcon from '@carbon/icons/es/warning--filled/16';
 import NotificationFilledIcon from '@carbon/icons/es/notification--filled/16';
+import DataViewAlt16 from '@carbon/icons/es/data--view--alt/16';
+import DataCenter16 from '@carbon/icons/es/data--center/16';
+import Upgrade16 from '@carbon/icons/es/upgrade/16';
+import Close16 from '@carbon/icons/es/close/16';
+import WarningAltFilled16 from '@carbon/icons/es/warning--alt--filled/16';
+import Help16 from '@carbon/icons/es/help/16';
+import IncidentReporter16 from '@carbon/icons/es/incident-reporter/16';
+import IbmStreamSets16 from '@carbon/icons/es/ibm--streamsets/16';
+import DataEnrichment16 from '@carbon/icons/es/data-enrichment/16';
+import Network116 from '@carbon/icons/es/network--1/16';
+import Chip16 from '@carbon/icons/es/chip/16';
+import Plug16 from '@carbon/icons/es/plug/16';
+import VmdkDisk16 from '@carbon/icons/es/vmdk-disk/16';
+import WarningAlt16 from '@carbon/icons/es/warning--alt/16';
+import CheckMarkOutline16 from '@carbon/icons/es/checkmark--outline/16';
+import ArrowUpRight16 from '@carbon/icons/es/arrow--up-right/16';
+import InProgress16 from '@carbon/icons/es/in-progress/16';
+import ArrowDown16 from '@carbon/icons/es/arrow--down/16';
 import Warning16 from '@carbon/icons/es/warning/16';
 import Deploy16 from '@carbon/icons/es/deploy/16';
-import Close16 from '@carbon/icons/es/close/16';
 import { SidebarLayoutComponent } from './sidebar-layout/sidebar-layout.component';
 
 @NgModule({
@@ -148,7 +168,8 @@ import { SidebarLayoutComponent } from './sidebar-layout/sidebar-layout.componen
     TagModule,
     LinkModule,
     LayerModule,
-    TilesModule
+    TilesModule,
+    ThemeModule
   ],
   declarations: [
     SparklineComponent,
@@ -194,6 +215,7 @@ import { SidebarLayoutComponent } from './sidebar-layout/sidebar-layout.componen
     IconComponent,
     TearsheetComponent,
     TearsheetStepComponent,
+    SidePanelComponent,
     SidebarLayoutComponent
   ],
   providers: [provideCharts(withDefaultRegisterables())],
@@ -237,6 +259,7 @@ import { SidebarLayoutComponent } from './sidebar-layout/sidebar-layout.componen
     IconComponent,
     TearsheetComponent,
     TearsheetStepComponent,
+    SidePanelComponent,
     SidebarLayoutComponent
   ]
 })
@@ -252,8 +275,25 @@ export class ComponentsModule {
       WarningFilledIcon,
       NotificationFilledIcon,
       Close16,
+      DataViewAlt16,
+      DataCenter16,
+      Upgrade16,
+      WarningAltFilled16,
+      Help16,
+      IncidentReporter16,
+      IbmStreamSets16,
+      DataEnrichment16,
+      Network116,
+      Chip16,
+      Plug16,
+      VmdkDisk16,
+      WarningAlt16,
+      CheckMarkOutline16,
+      ArrowUpRight16,
+      InProgress16,
+      ArrowDown16,
       Deploy16,
-      Warning16,
+      Warning16
     ]);
   }
-}
+}
\ No newline at end of file
index 609e5c68f3a7c46f8f9d972f1d6f6b7b9a57b9af..decf9f010faf2609ed74da86627e41b4ec362e72 100644 (file)
@@ -5,11 +5,7 @@
 }
 
 .danger-icon {
-  fill: theme.$support-error !important;
-}
-
-.error-icon {
-  fill: theme.$support-error !important;
+  color: theme.$support-error !important;
 }
 
 //@TODO: this naming needs to be changed
 }
 
 .warning-icon {
-  color: theme.$support-caution-major;
+  fill: theme.$support-caution-major !important;
 }
 
 .warningAltFilled-icon {
-  color: theme.$support-caution-major;
+  fill: theme.$support-caution-major !important;
+}
+
+.error-icon {
+  fill: var(--cds-text-error) !important;
+}
+
+.info-icon {
+  fill: theme.$support-info !important;
 }
 
 .deploy-icon {
 .emptySearch-icon {
   fill: theme.$layer-selected-disabled !important;
 }
+
+.warningAlt-icon {
+  fill: theme.$support-caution-major !important;
+}
+
+.checkMarkOutline-icon {
+  fill: theme.$support-success !important;
+}
+
+.inProgress-icon {
+  fill: theme.$support-info !important;
+}
+
+.arrowDown-icon {
+  fill: theme.$support-error !important;
+}
index 9393ba965372d3a6f3db85cc1cf305f51f3e4020..89473b50db0d578d8991f010ceac01132b5cab33 100644 (file)
@@ -3,15 +3,15 @@
 @use '@carbon/layout';
 
 .sidebar-layout-container {
+  background-color: var(--cds-background);
   min-height: calc(100vh - (vv.$navbar-height + layout.rem(55px)));
   padding-right: var(--cds-spacing-07);
-  background-color: var(--cds-background);
 }
 
 .sidebar-layout-shell {
-  transform: translate(0);
-  position: relative;
   height: 100vh;
+  position: relative;
+  transform: translate(0);
 }
 
 .sidebar-layout-nav {
index 187b9a0349bb595558488b48f3fa0ecd7aec3e88..d99b2b273732c6d0d60cb1ad6b874fd7e70aa4c5 100644 (file)
@@ -2,40 +2,39 @@
 // No css variable to apply css to modal div.
 // This is needed to set the width of tearsheet as per carbon standards.
 .cds--modal-container.cds--modal-container--lg {
-  position: fixed;
+  // Fill remaining viewport height
+  block-size: calc(100vh - 88px);
+  display: flex;
+  flex-direction: column;
+  inline-size: auto;
 
   // 88px from top
   inset-block-start: 88px;
-
-  // Fill remaining viewport height
-  block-size: calc(100vh - 88px);
-  max-block-size: calc(100vh - 88px);
+  inset-inline-end: 64px;
 
   // 64px margins left & right
   inset-inline-start: 64px;
-  inset-inline-end: 64px;
-  inline-size: auto;
+  max-block-size: calc(100vh - 88px);
   max-inline-size: none;
-  display: flex;
-  flex-direction: column;
+  position: fixed;
 }
 
 // Global Carbon override sets .cds--modal-scroll-content to max-height: 70vh.
 // For tearsheets this causes content area to shrink and footer to float up.
 .cds--modal-container.cds--modal-container--lg .cds--modal-scroll-content {
-  max-height: none;
-  height: 100%;
   flex: 1 1 auto;
+  height: 100%;
+  max-height: none;
   min-height: 0;
 }
 
 .cds--modal-container.cds--modal-container--sm {
-  inset-block-start: 88px;
   block-size: 50vh;
-  max-block-size: 50vh;
-  inset-inline-start: 35%;
-  inset-inline-end: 35%;
   inline-size: auto;
+  inset-block-start: 88px;
+  inset-inline-end: 35%;
+  inset-inline-start: 35%;
+  max-block-size: 50vh;
   max-inline-size: none;
 }
 
 
 // HEADER
 .tearsheet-header {
-  fill: var(--cds-icon-primary);
   background-color: var(--cds-background);
-  padding: var(--cds-spacing-06) var(--cds-spacing-07);
   border-block-end: 1px solid var(--cds-border-subtle-01);
   fill: var(--cds-icon-primary);
+  fill: var(--cds-icon-primary);
+  padding: var(--cds-spacing-06) var(--cds-spacing-07);
   padding: var(--cds-spacing-06) var(--cds-spacing-07);
 
   &-title {
 // BODY
 .tearsheet-body {
   height: 100%;
+  height: 100%;
+  margin: 0;
   margin: 0;
   padding: 0;
+  padding: 0;
   padding-block: 0;
   padding-inline: 0;
-  padding: 0;
-  margin: 0;
-  height: 100%;
 }
 
 .tearsheet-left-influencer {
   background-color: var(--cds-background);
-  padding: var(--cds-spacing-06) var(--cds-spacing-07);
-  overflow-block: auto;
-  overflow-y: auto;
   border-inline-end: 1px solid var(--cds-border-subtle-01);
   margin: 0;
+  overflow-block: auto;
+  overflow-y: auto;
+  padding: var(--cds-spacing-06) var(--cds-spacing-07);
 }
 
 .tearsheet-right-influencer {
 }
 
 .tearsheet-main {
-  margin: 0;
-  height: 100%;
   display: flex;
   flex-direction: column;
+  height: 100%;
+  margin: 0;
 
   > div {
     flex: 1;
 }
 
 .tearsheet-content {
-  max-block-size: 39.7rem;
   background-color: var(--cds-layer-01);
   margin: 0;
-  padding: var(--cds-spacing-06) var(--cds-spacing-07);
+  max-block-size: 39.7rem;
   overflow-y: auto;
+  padding: var(--cds-spacing-06) var(--cds-spacing-07);
 
   &--full {
     padding-left: 0;
 // make content fill the available modal height so footer stays pinned.
 .tearsheet-main > .tearsheet-content {
   flex: 1 1 auto;
-  min-height: 0;
   max-block-size: none;
+  min-height: 0;
 }
 
 //FOOTER
 .tearsheet-footer {
-  border-top: 1px solid var(--cds-border-subtle);
   background-color: var(--cds-layer-01);
+  border-top: 1px solid var(--cds-border-subtle);
 
   &-submit {
     display: flex;
index 61f6209b0f29be0fa1ce23324f7ba373a54012ce..53bd91f9acb54875c22c91873fde363c7d7ee020 100644 (file)
@@ -91,6 +91,9 @@ export enum Icons {
   checkmarkOutline = 'checkmark--outline',
   circleDash = 'circle-dash',
   datastore = 'datastore',
+  ibmCloudBareMetalServer = 'ibm-cloud--bare-metal-server',
+  ibmCloudDedicatedHost = 'ibm-cloud--dedicated-host',
+  clusterIcon = 'web-services--cluster',
   /* Icons for special effect */
   large = 'fa fa-lg', // icon becomes 33% larger
   large2x = 'fa fa-2x', // icon becomes 50% larger
@@ -101,6 +104,28 @@ export enum Icons {
   pulse = 'fa fa-pulse', // To have spinner rotate with 8 steps
   spin = 'fa fa-spin', //  To get any icon to rotate
   inverse = 'fa fa-inverse', // To get an alternative icon color
+  notification = 'notification',
+  error = 'error--filled',
+  notificationOff = 'notification--off',
+  notificationNew = 'notification--new',
+  emptySearch = 'search',
+  dataViewAlt = 'data--view--alt',
+  dataCenter = 'data--center',
+  upgrade = 'upgrade',
+  warningAltFilled = 'warning--alt--filled',
+  help = 'help',
+  incidentReporter = 'incident-reporter',
+  ibmStreamSets = 'ibm--streamsets',
+  dataEnrichment = 'data-enrichment',
+  network1 = 'network--1',
+  chip = 'chip',
+  plug = 'plug',
+  vmdkDisk = 'vmdk-disk',
+  checkMarkOutline = 'checkmark--outline',
+  warningAlt = 'warning--alt',
+  arrowUpRight = 'arrow--up-right',
+  inProgress = 'in-progress',
+  arrowDown = 'arrow--down'
 }
 
 export enum IconSize {
@@ -115,8 +140,6 @@ export const ICON_TYPE = {
   danger: 'warning--filled',
   infoCircle: 'information--filled',
   success: 'checkmark--filled',
-  warning: 'warning',
-  warningAltFilled: 'warning--alt--filled',
   deploy: 'deploy',
   edit: 'edit',
   error: 'error--filled',
@@ -124,7 +147,25 @@ export const ICON_TYPE = {
   notificationOff: 'notification--off',
   notificationNew: 'notification--new',
   add: 'add',
-  emptySearch: 'emptySearch'
+  emptySearch: 'emptySearch',
+  dataViewAlt: 'data--view--alt',
+  dataCenter: 'data--center',
+  upgrade: 'upgrade',
+  warningAltFilled: 'warning--alt--filled',
+  help: 'help',
+  incidentReporter: 'incident-reporter',
+  ibmStreamSets: 'ibm--streamsets',
+  dataEnrichment: 'data-enrichment',
+  network1: 'network--1',
+  chip: 'chip',
+  plug: 'plug',
+  vmdkDisk: 'vmdk-disk',
+  warningAlt: 'warning--alt',
+  checkMarkOutline: 'checkmark--outline',
+  arrowUpRight: ' arrow--up-right',
+  inProgress: 'in-progress',
+  arrowDown: 'arrow--down',
+  warning: 'warning',
 } as const;
 
 export const EMPTY_STATE_IMAGE = {
index 6ba1285ae6a80982876076cedff41b8d737e0be8..d76f6b85cf92a768cd71263a714d9a31eb0791f5 100644 (file)
@@ -9,6 +9,10 @@
   padding-top: layout.$spacing-03;
 }
 
+.cds-pr-8 {
+  padding-right: layout.$spacing-08;
+}
+
 // MARGINS
 .cds-m-0 {
   margin: 0;
   margin-bottom: layout.$spacing-03;
 }
 
+.cds-mb-4 {
+  margin-bottom: layout.$spacing-04;
+}
+
 .cds-mb-5 {
   margin-bottom: layout.$spacing-05;
 }
   margin-bottom: layout.$spacing-06;
 }
 
+.cds-mt-1 {
+  margin-top: layout.$spacing-01;
+}
+
 .cds-mt-3 {
   margin-top: layout.$spacing-03;
 }
 
-.cds-mt-1 {
-  margin-top: layout.$spacing-01;
+.cds-mt-4 {
+  margin-top: layout.$spacing-04;
 }
 
 .cds-mt-5 {
   margin-top: layout.$spacing-06;
 }
 
+.cds-ml-2 {
+  margin-left: layout.$spacing-02;
+}
+
 .cds-ml-3 {
   margin-left: layout.$spacing-03;
 }
   margin-left: layout.$spacing-05;
 }
 
+.cds-mr-1 {
+  margin-right: layout.$spacing-01;
+}
+
+.cds-mr-2 {
+  margin-right: layout.$spacing-02;
+}
+
 .cds-mr-3 {
   margin-right: layout.$spacing-03;
 }
index 3d331f2166624762609c3df38552a9dda0f0d338..63a69cd9d06c0c8717803c7c765a4a33324f1d6e 100644 (file)
@@ -9586,7 +9586,7 @@ paths:
                 serial_number:
                   description: Subsystem serial number
                   type: string
-                server_address:
+                traddr:
                   description: NVMeoF gateway address
                   type: string
               required:
@@ -9899,7 +9899,6 @@ paths:
       summary: Disallow hosts from accessing an NVMeoF subsystem
       tags:
       - NVMe-oF Subsystem Host Allowlist
-<<<<<<< HEAD
   /api/nvmeof/subsystem/{nqn}/host/{host_nqn}/change_controller_key:
     put:
       parameters:
@@ -9956,8 +9955,6 @@ paths:
       summary: Change host DH-HMAC-CHAP controller key
       tags:
       - NVMe-oF Subsystem Host Allowlist
-=======
->>>>>>> 77603435ca8 (mgr/dashboard: Fix nvmeof edit host key in subsystem resources page)
   /api/nvmeof/subsystem/{nqn}/host/{host_nqn}/change_key:
     put:
       parameters:
@@ -9984,8 +9981,7 @@ paths:
                 gw_group:
                   description: NVMeoF gateway group
                   type: string
-                server_address:
-                  description: NVMeoF gateway address
+                traddr:
                   type: string
               required:
               - dhchap_key
@@ -9993,21 +9989,13 @@ paths:
       responses:
         '200':
           content:
-            application/json:
-              schema:
-                type: object
             application/vnd.ceph.api.v1.0+json:
-              schema:
-                type: object
+              type: object
           description: Resource updated.
         '202':
           content:
-            application/json:
-              schema:
-                type: object
             application/vnd.ceph.api.v1.0+json:
-              schema:
-                type: object
+              type: object
           description: Operation is still executing. Please check the task queue.
         '400':
           description: Operation exception. Please check the response body for details.
@@ -10023,6 +10011,108 @@ paths:
       summary: Change host DH-HMAC-CHAP key
       tags:
       - NVMe-oF Subsystem Host Allowlist
+  /api/nvmeof/subsystem/{nqn}/host/{host_nqn}/del_controller_key:
+    put:
+      parameters:
+      - description: NVMeoF subsystem NQN
+        in: path
+        name: nqn
+        required: true
+        schema:
+          type: string
+      - description: NVMeoF host NQN.
+        in: path
+        name: host_nqn
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                gw_group:
+                  description: NVMeoF gateway group
+                  type: string
+                traddr:
+                  type: string
+              type: object
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource updated.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      summary: Delete host DH-HMAC-CHAP controller key
+      tags:
+      - NVMe-oF Subsystem Host Allowlist
+  /api/nvmeof/subsystem/{nqn}/host/{host_nqn}/del_key:
+    put:
+      parameters:
+      - description: NVMeoF subsystem NQN
+        in: path
+        name: nqn
+        required: true
+        schema:
+          type: string
+      - description: NVMeoF host NQN.
+        in: path
+        name: host_nqn
+        required: true
+        schema:
+          type: string
+      requestBody:
+        content:
+          application/json:
+            schema:
+              properties:
+                gw_group:
+                  description: NVMeoF gateway group
+                  type: string
+                traddr:
+                  type: string
+              type: object
+      responses:
+        '200':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Resource updated.
+        '202':
+          content:
+            application/vnd.ceph.api.v1.0+json:
+              type: object
+          description: Operation is still executing. Please check the task queue.
+        '400':
+          description: Operation exception. Please check the response body for details.
+        '401':
+          description: Unauthenticated access. Please login first.
+        '403':
+          description: Unauthorized access. Please check your permissions.
+        '500':
+          description: Unexpected error. Please check the response body for the stack
+            trace.
+      security:
+      - jwt: []
+      summary: Delete host DH-HMAC-CHAP key
+      tags:
+      - NVMe-oF Subsystem Host Allowlist
   /api/nvmeof/subsystem/{nqn}/listener:
     get:
       parameters: