From b453eea2d1613b5bce1e759bd9fef29575548fa7 Mon Sep 17 00:00:00 2001 From: Pedro Gonzalez Gomez Date: Fri, 1 Sep 2023 01:54:28 +0200 Subject: [PATCH] mgr/dashboard: CephFS add groups in subvolume tab Adds subvolume groups into the subvolume tabs in order to select the subvolumes from the appropiate group. Also adds the capabilities to manage the subvolume groups of the subvolume in the different actions, create, edit, remove. Fixes: https://tracker.ceph.com/issues/62675 Signed-off-by: Pedro Gonzalez Gomez (cherry picked from commit 041bc0c362bf4109416ecc12bc44aa7496ebb9d1) --- .../mgr/dashboard/controllers/cephfs.py | 36 ++++++++---- .../cephfs-subvolume-form.component.html | 20 +++++++ .../cephfs-subvolume-form.component.ts | 23 +++++++- .../cephfs-subvolume-list.component.html | 56 +++++++++++++------ .../cephfs-subvolume-list.component.ts | 50 ++++++++++++----- .../api/cephfs-subvolume.service.spec.ts | 4 +- .../shared/api/cephfs-subvolume.service.ts | 28 +++++++--- src/pybind/mgr/dashboard/openapi.yaml | 18 ++++++ 8 files changed, 180 insertions(+), 55 deletions(-) diff --git a/src/pybind/mgr/dashboard/controllers/cephfs.py b/src/pybind/mgr/dashboard/controllers/cephfs.py index e879649adcdd3..09b2bebfc1dfe 100644 --- a/src/pybind/mgr/dashboard/controllers/cephfs.py +++ b/src/pybind/mgr/dashboard/controllers/cephfs.py @@ -623,17 +623,21 @@ class CephFsUi(CephFS): @APIDoc('CephFS Subvolume Management API', 'CephFSSubvolume') class CephFSSubvolume(RESTController): - def get(self, vol_name: str): + def get(self, vol_name: str, group_name: str = ""): + params = {'vol_name': vol_name} + if group_name: + params['group_name'] = group_name error_code, out, err = mgr.remote( - 'volumes', '_cmd_fs_subvolume_ls', None, {'vol_name': vol_name}) + 'volumes', '_cmd_fs_subvolume_ls', None, params) if error_code != 0: raise DashboardException( f'Failed to list subvolumes for volume {vol_name}: {err}' ) subvolumes = json.loads(out) for subvolume in subvolumes: - error_code, out, err = mgr.remote('volumes', '_cmd_fs_subvolume_info', None, { - 'vol_name': vol_name, 'sub_name': subvolume['name']}) + params['sub_name'] = subvolume['name'] + error_code, out, err = mgr.remote('volumes', '_cmd_fs_subvolume_info', None, + params) if error_code != 0: raise DashboardException( f'Failed to get info for subvolume {subvolume["name"]}: {err}' @@ -642,9 +646,12 @@ class CephFSSubvolume(RESTController): return subvolumes @RESTController.Resource('GET') - def info(self, vol_name: str, subvol_name: str): - error_code, out, err = mgr.remote('volumes', '_cmd_fs_subvolume_info', None, { - 'vol_name': vol_name, 'sub_name': subvol_name}) + def info(self, vol_name: str, subvol_name: str, group_name: str = ""): + params = {'vol_name': vol_name, 'sub_name': subvol_name} + if group_name: + params['group_name'] = group_name + error_code, out, err = mgr.remote('volumes', '_cmd_fs_subvolume_info', None, + params) if error_code != 0: raise DashboardException( f'Failed to get info for subvolume {subvol_name}: {err}' @@ -661,10 +668,14 @@ class CephFSSubvolume(RESTController): return f'Subvolume {subvol_name} created successfully' - def set(self, vol_name: str, subvol_name: str, size: str): + def set(self, vol_name: str, subvol_name: str, size: str, group_name: str = ""): + params = {'vol_name': vol_name, 'sub_name': subvol_name} if size: - error_code, _, err = mgr.remote('volumes', '_cmd_fs_subvolume_resize', None, { - 'vol_name': vol_name, 'sub_name': subvol_name, 'new_size': size}) + params['new_size'] = size + if group_name: + params['group_name'] = group_name + error_code, _, err = mgr.remote('volumes', '_cmd_fs_subvolume_resize', None, + params) if error_code != 0: raise DashboardException( f'Failed to update subvolume {subvol_name}: {err}' @@ -672,8 +683,11 @@ class CephFSSubvolume(RESTController): return f'Subvolume {subvol_name} updated successfully' - def delete(self, vol_name: str, subvol_name: str, retain_snapshots: bool = False): + def delete(self, vol_name: str, subvol_name: str, group_name: str = "", + retain_snapshots: bool = False): params = {'vol_name': vol_name, 'sub_name': subvol_name} + if group_name: + params['group_name'] = group_name retain_snapshots = str_to_bool(retain_snapshots) if retain_snapshots: params['retain_snapshots'] = 'True' diff --git a/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-form/cephfs-subvolume-form.component.html b/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-form/cephfs-subvolume-form.component.html index 772cc904da4b0..ad6f414486d6d 100644 --- a/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-form/cephfs-subvolume-form.component.html +++ b/src/pybind/mgr/dashboard/frontend/src/app/ceph/cephfs/cephfs-subvolume-form/cephfs-subvolume-form.component.html @@ -43,6 +43,26 @@ + +
+ +
+ +
+
+