]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/dashboard: fix image size in nvmeof namespace create/update api 61698/head
authorAfreen Misbah <afreen@ibm.com>
Fri, 7 Feb 2025 11:43:51 +0000 (17:13 +0530)
committerAfreen Misbah <afreen@ibm.com>
Wed, 12 Feb 2025 16:41:31 +0000 (22:11 +0530)
- Different name is used in POST and PATCH for `rbd_image_size`
- Using same name in both requests
- fixing typing issues in frontend

Fixes https://tracker.ceph.com/issues/69864

Signed-off-by: Afreen Misbah <afreen@ibm.com>
src/pybind/mgr/dashboard/controllers/nvmeof.py
src/pybind/mgr/dashboard/frontend/src/app/ceph/block/nvmeof-namespaces-form/nvmeof-namespaces-form.component.spec.ts
src/pybind/mgr/dashboard/frontend/src/app/ceph/block/nvmeof-namespaces-form/nvmeof-namespaces-form.component.ts
src/pybind/mgr/dashboard/frontend/src/app/shared/api/nvmeof.service.spec.ts
src/pybind/mgr/dashboard/frontend/src/app/shared/api/nvmeof.service.ts
src/pybind/mgr/dashboard/openapi.yaml

index d706e6b3fd17d5ebfdff715eaacc4696f0891e51..f4b6182b43cb0976f1f76178bc90d20ecba07072 100644 (file)
@@ -339,7 +339,7 @@ else:
                 "rbd_pool": Param(str, "RBD pool name"),
                 "rbd_image_name": Param(str, "RBD image name"),
                 "create_image": Param(bool, "Create RBD image"),
-                "size": Param(int, "RBD image size"),
+                "rbd_image_size": Param(int, "RBD image size"),
                 "block_size": Param(int, "NVMeoF namespace block size"),
                 "load_balancing_group": Param(int, "Load balancing group"),
                 "gw_group": Param(str, "NVMeoF gateway group", True, None),
@@ -354,7 +354,7 @@ else:
             rbd_image_name: str,
             rbd_pool: str = "rbd",
             create_image: Optional[bool] = True,
-            size: Optional[int] = 1024,
+            rbd_image_size: Optional[int] = 1024,
             block_size: int = 512,
             load_balancing_group: Optional[int] = None,
             gw_group: Optional[str] = None,
@@ -366,7 +366,7 @@ else:
                     rbd_pool_name=rbd_pool,
                     block_size=block_size,
                     create_image=create_image,
-                    size=size,
+                    size=rbd_image_size,
                     anagrpid=load_balancing_group,
                 )
             )
index b6d0c27a70c3712a6e93723798c06382c1fc45a0..1cb2b0167069a1f5f72b1b24b73ab20504c7edf9 100644 (file)
@@ -63,7 +63,7 @@ describe('NvmeofNamespacesFormComponent', () => {
       expect(nvmeofService.createNamespace).toHaveBeenCalledWith(mockSubsystemNQN, {
         rbd_image_name: image,
         rbd_pool: null,
-        size: 1073741824
+        rbd_image_size: 1073741824
       });
     });
 
index b65ad62bdb4b14223519a17f1cd3db2760a7a36e..3dda1b83069f6b5f8e4a7c20e087f15ced1a3aae 100644 (file)
@@ -4,7 +4,7 @@ import { ActivatedRoute, Router } from '@angular/router';
 import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';
 import {
   NamespaceCreateRequest,
-  NamespaceEditRequest,
+  NamespaceUpdateRequest,
   NvmeofService
 } from '~/app/shared/api/nvmeof.service';
 import { ActionLabelsI18n, URLVerbs } from '~/app/shared/constants/app.constants';
@@ -120,23 +120,41 @@ export class NvmeofNamespacesFormComponent implements OnInit {
     });
   }
 
-  buildRequest(): NamespaceCreateRequest | NamespaceEditRequest {
+  updateRequest(rbdImageSize: number): NamespaceUpdateRequest {
+    const request: NamespaceUpdateRequest = {
+      gw_group: this.group,
+      rbd_image_size: rbdImageSize
+    };
+    return request;
+  }
+
+  createRequest(rbdImageSize: number): NamespaceCreateRequest {
+    const image = this.nsForm.getValue('image');
+    const pool = this.nsForm.getValue('pool');
+    const request: NamespaceCreateRequest = {
+      gw_group: this.group,
+      rbd_image_name: image,
+      rbd_pool: pool
+    };
+    if (rbdImageSize) {
+      request['rbd_image_size'] = rbdImageSize;
+    }
+    return request;
+  }
+
+  buildRequest() {
     const image_size = this.nsForm.getValue('image_size');
-    const image_size_unit = this.nsForm.getValue('unit');
-    const request = {} as NamespaceCreateRequest | NamespaceEditRequest;
-    request['gw_group'] = this.group;
+    let rbdImageSize: number = null;
     if (image_size) {
-      const key: string = this.edit ? 'rbd_image_size' : 'size';
+      const image_size_unit = this.nsForm.getValue('unit');
       const value: number = this.formatterService.toBytes(image_size + image_size_unit);
-      request[key] = value;
+      rbdImageSize = value;
     }
-    if (!this.edit) {
-      const image = this.nsForm.getValue('image');
-      const pool = this.nsForm.getValue('pool');
-      request['rbd_image_name'] = image;
-      request['rbd_pool'] = pool;
+    if (this.edit) {
+      return this.updateRequest(rbdImageSize);
+    } else {
+      return this.createRequest(rbdImageSize);
     }
-    return request;
   }
 
   validateSize() {
@@ -157,7 +175,7 @@ export class NvmeofNamespacesFormComponent implements OnInit {
       this.invalidSizeError = false;
       const component = this;
       const taskUrl: string = `nvmeof/namespace/${this.edit ? URLVerbs.EDIT : URLVerbs.CREATE}`;
-      const request = this.buildRequest();
+      const request: NamespaceCreateRequest | NamespaceUpdateRequest = this.buildRequest();
       let action: Observable<any>;
 
       if (this.edit) {
@@ -169,7 +187,7 @@ export class NvmeofNamespacesFormComponent implements OnInit {
           call: this.nvmeofService.updateNamespace(
             this.subsystemNQN,
             this.nsid,
-            request as NamespaceEditRequest
+            request as NamespaceUpdateRequest
           )
         });
       } else {
index 92eee852d880e6d1ed1381e7b4d2b956463bfa88..c9268ee5545d8de6850ee96a4dc6b120638eea1f 100755 (executable)
@@ -159,7 +159,7 @@ describe('NvmeofService', () => {
       const mockNamespaceObj = {
         rbd_image_name: 'nvme_ns_image:12345678',
         rbd_pool: 'rbd',
-        size: 1024,
+        rbd_image_size: 1024,
         gw_group: mockGroupName
       };
       service.createNamespace(mockNQN, mockNamespaceObj).subscribe();
index a2bbf507bc3451f0e2e3e0f90c66ce228fe533dc..4a3148eb752d7c94b0aa74e29cb2d3627a349866 100644 (file)
@@ -7,29 +7,29 @@ import { catchError, mapTo } from 'rxjs/operators';
 
 export const MAX_NAMESPACE = 1024;
 
-export interface ListenerRequest {
+type NvmeofRequest = {
   gw_group: string;
+};
+
+export type ListenerRequest = NvmeofRequest & {
   host_name: string;
   traddr: string;
   trsvcid: number;
-}
+};
 
-export interface NamespaceCreateRequest {
+export type NamespaceCreateRequest = NvmeofRequest & {
   rbd_image_name: string;
   rbd_pool: string;
-  size: number;
-  gw_group: string;
-}
+  rbd_image_size?: number;
+};
 
-export interface NamespaceEditRequest {
+export type NamespaceUpdateRequest = NvmeofRequest & {
   rbd_image_size: number;
-  gw_group: string;
-}
+};
 
-export interface InitiatorRequest {
+export type InitiatorRequest = NvmeofRequest & {
   host_nqn: string;
-  gw_group: string;
-}
+};
 
 const API_PATH = 'api/nvmeof';
 const UI_API_PATH = 'ui-api/nvmeof';
@@ -144,7 +144,7 @@ export class NvmeofService {
     });
   }
 
-  updateNamespace(subsystemNQN: string, nsid: string, request: NamespaceEditRequest) {
+  updateNamespace(subsystemNQN: string, nsid: string, request: NamespaceUpdateRequest) {
     return this.http.patch(`${API_PATH}/subsystem/${subsystemNQN}/namespace/${nsid}`, request, {
       observe: 'response'
     });
index 3dc4ef2b9632c637408ddb443e8397c336fc226e..aa06907686dfb9b776a5809c8012f21e12a60a12 100644 (file)
@@ -9012,14 +9012,14 @@ paths:
                 rbd_image_name:
                   description: RBD image name
                   type: string
+                rbd_image_size:
+                  default: 1024
+                  description: RBD image size
+                  type: integer
                 rbd_pool:
                   default: rbd
                   description: RBD pool name
                   type: string
-                size:
-                  default: 1024
-                  description: RBD image size
-                  type: integer
               required:
               - rbd_image_name
               type: object