From: Rishabh Dave Date: Wed, 2 Apr 2025 15:25:32 +0000 (+0530) Subject: mgr/vol: add command to get snapshot path X-Git-Tag: v20.3.0~41^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=50d28992d99fcd67390815aa42f9da8ffaa82575;p=ceph.git mgr/vol: add command to get snapshot path Fixes: https://tracker.ceph.com/issues/70815 Signed-off-by: Rishabh Dave --- diff --git a/src/pybind/mgr/volumes/fs/operations/template.py b/src/pybind/mgr/volumes/fs/operations/template.py index 171363e8fd2..7aa953045a1 100644 --- a/src/pybind/mgr/volumes/fs/operations/template.py +++ b/src/pybind/mgr/volumes/fs/operations/template.py @@ -49,6 +49,7 @@ class SubvolumeOpType(Enum): SNAP_CREATE = 'snap-create' SNAP_REMOVE = 'snap-rm' SNAP_LIST = 'snap-ls' + SNAP_GETPATH = 'snap-getpath' SNAP_INFO = 'snap-info' SNAP_PROTECT = 'snap-protect' SNAP_UNPROTECT = 'snap-unprotect' diff --git a/src/pybind/mgr/volumes/fs/operations/versions/subvolume_v2.py b/src/pybind/mgr/volumes/fs/operations/versions/subvolume_v2.py index bec271f659f..7492b60a200 100644 --- a/src/pybind/mgr/volumes/fs/operations/versions/subvolume_v2.py +++ b/src/pybind/mgr/volumes/fs/operations/versions/subvolume_v2.py @@ -280,6 +280,7 @@ class SubvolumeV2(SubvolumeV1): SubvolumeOpType.INFO, SubvolumeOpType.SNAP_REMOVE, SubvolumeOpType.SNAP_LIST, + SubvolumeOpType.SNAP_GETPATH, SubvolumeOpType.SNAP_INFO, SubvolumeOpType.SNAP_PROTECT, SubvolumeOpType.SNAP_UNPROTECT, diff --git a/src/pybind/mgr/volumes/fs/volume.py b/src/pybind/mgr/volumes/fs/volume.py index b2e5d762af1..d425aab6349 100644 --- a/src/pybind/mgr/volumes/fs/volume.py +++ b/src/pybind/mgr/volumes/fs/volume.py @@ -22,7 +22,7 @@ from .operations.volume import create_volume, delete_volume, rename_volume, \ list_volumes, open_volume, get_pool_names, get_pool_ids, \ get_pending_subvol_deletions_count, get_all_pending_clones_count from .operations.subvolume import open_subvol, create_subvol, remove_subvol, \ - create_clone, open_subvol_in_group + create_clone, open_subvol_in_group, open_subvol_in_vol from .vol_spec import VolSpec from .exception import VolumeException, ClusterError, ClusterTimeout, \ @@ -783,6 +783,23 @@ class VolumeClient(CephfsClient["Module"]): ret = self.volume_exception_to_retval(ve) return ret + def subvolume_snapshot_getpath(self, **kwargs): + ret = 0, "", "" + volname = kwargs['vol_name'] + subvolname = kwargs['sub_name'] + snapname = kwargs['snap_name'] + groupname = kwargs['group_name'] + + try: + with open_subvol_in_vol(self, self.volspec, volname, groupname, subvolname, + SubvolumeOpType.SNAP_GETPATH) \ + as (vol, group, subvol): + snap_path = subvol.snapshot_data_path(snapname) + ret = 0, snap_path.decode("utf-8"), "" + except VolumeException as ve: + ret = self.volume_exception_to_retval(ve) + return ret + def set_subvolume_snapshot_metadata(self, **kwargs): ret = 0, "", "" volname = kwargs['vol_name'] diff --git a/src/pybind/mgr/volumes/module.py b/src/pybind/mgr/volumes/module.py index 622aef8362e..dc7c0b12c1a 100644 --- a/src/pybind/mgr/volumes/module.py +++ b/src/pybind/mgr/volumes/module.py @@ -466,6 +466,17 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule): "and optionally, in a specific subvolume group", 'perm': 'rw' }, + { + 'cmd': 'fs subvolume snapshot getpath ' + 'name=vol_name,type=CephString ' + 'name=sub_name,type=CephString ' + 'name=snap_name,type=CephString ' + 'name=group_name,type=CephString,req=false ', + 'desc': 'Get path for a snapshot of a CephFS subvolume located in ' + 'a specific volume, and optionally, in a specific ' + 'subvolume group', + 'perm': 'r' + }, { 'cmd': 'fs subvolume resize ' 'name=vol_name,type=CephString ' @@ -995,6 +1006,13 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule): sub_name=cmd['sub_name'], group_name=cmd.get('group_name', None)) + @mgr_cmd_wrap + def _cmd_fs_subvolume_snapshot_getpath(self, inbuf, cmd): + return self.vc.subvolume_snapshot_getpath(vol_name=cmd['vol_name'], + sub_name=cmd['sub_name'], + snap_name=cmd['snap_name'], + group_name=cmd.get('group_name', None)) + @mgr_cmd_wrap def _cmd_fs_subvolume_resize(self, inbuf, cmd): return self.vc.resize_subvolume(vol_name=cmd['vol_name'], sub_name=cmd['sub_name'],