]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
mgr/vol: add command to get snapshot path
authorRishabh Dave <ridave@redhat.com>
Wed, 2 Apr 2025 15:25:32 +0000 (20:55 +0530)
committerRishabh Dave <ridave@redhat.com>
Tue, 16 Sep 2025 15:23:50 +0000 (20:53 +0530)
Fixes: https://tracker.ceph.com/issues/70815
Signed-off-by: Rishabh Dave <ridave@redhat.com>
(cherry picked from commit 50d28992d99fcd67390815aa42f9da8ffaa82575)

Conflicts:
src/pybind/mgr/volumes/fs/volume.py
- Line where the original patch makes the change is slightly
  different in main compared to Squid banch, leading to conflict.

src/pybind/mgr/volumes/fs/operations/template.py
src/pybind/mgr/volumes/fs/operations/versions/subvolume_v2.py
src/pybind/mgr/volumes/fs/volume.py
src/pybind/mgr/volumes/module.py

index eb55bd7432519cc3f9d5e5bc3f87773bcd968ff8..a9fa57f94bd3c4a8a534ebe806527e4778481e4e 100644 (file)
@@ -48,6 +48,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'
index 55d7f945b7750631f7dadf4ad4b4ec6e0868f54a..982291a8f08927df3079db92fc7e8c3c337760b3 100644 (file)
@@ -279,6 +279,7 @@ class SubvolumeV2(SubvolumeV1):
                 SubvolumeOpType.INFO,
                 SubvolumeOpType.SNAP_REMOVE,
                 SubvolumeOpType.SNAP_LIST,
+                SubvolumeOpType.SNAP_GETPATH,
                 SubvolumeOpType.SNAP_INFO,
                 SubvolumeOpType.SNAP_PROTECT,
                 SubvolumeOpType.SNAP_UNPROTECT,
index 2e96f830636bf0e15e85d690b1bd100cc71896f1..8f172bd26a6fd83fecc6384530a89e970b19ccd5 100644 (file)
@@ -16,7 +16,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
+    create_clone, open_subvol_in_vol
 
 from .vol_spec import VolSpec
 from .exception import VolumeException, ClusterError, ClusterTimeout, \
@@ -592,6 +592,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']
index 1800e1747ca2d3af26aedeb6384b89616e494272..3afbd60084949d74e2a0490549867864c8f7ac1b 100644 (file)
@@ -389,6 +389,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 '
@@ -827,6 +838,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'],