From: Ramana Raja Date: Tue, 23 Apr 2019 13:03:58 +0000 (+0530) Subject: mgr/volumes: allow fetching path of FS subvolumes X-Git-Tag: v14.2.2~54^2~10 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c4c3f6ccb45df16b6ece422a78f6995361c46720;p=ceph.git mgr/volumes: allow fetching path of FS subvolumes ... using `ceph fs subvolume getpath` command. Signed-off-by: Ramana Raja (cherry picked from commit a47239b7f260ac4dcaf6faeb856f8f5d5dac7b4b) --- diff --git a/src/pybind/mgr/volumes/fs/subvolume.py b/src/pybind/mgr/volumes/fs/subvolume.py index 9827f199fa19..272358ed5ca2 100644 --- a/src/pybind/mgr/volumes/fs/subvolume.py +++ b/src/pybind/mgr/volumes/fs/subvolume.py @@ -230,3 +230,11 @@ class SubvolumeClient(object): raise else: return self._get_ancestor_xattr(os.path.split(path)[0], attr) + + def get_subvolume_path(self, subvolume_path): + path = self._subvolume_path(subvolume_path) + try: + self.fs.stat(path) + except cephfs.ObjectNotFound: + return None + return path diff --git a/src/pybind/mgr/volumes/module.py b/src/pybind/mgr/volumes/module.py index 63ece7a13da5..df4ddba6b14c 100644 --- a/src/pybind/mgr/volumes/module.py +++ b/src/pybind/mgr/volumes/module.py @@ -61,6 +61,13 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule): 'desc': "Delete a CephFS subvolume in a volume", 'perm': 'rw' }, + { + 'cmd': 'fs subvolume getpath ' + 'name=vol_name,type=CephString ' + 'name=sub_name,type=CephString ', + 'desc': "Get the mountpath of a CephFS subvolume in a volume", + 'perm': 'rw' + }, # volume ls [recursive] # subvolume ls @@ -349,3 +356,18 @@ class Module(orchestrator.OrchestratorClientMixin, MgrModule): }) return 0, json.dumps(result, indent=2), "" + + def _cmd_fs_subvolume_getpath(self, inbuf, cmd): + vol_name = cmd['vol_name'] + sub_name = cmd['sub_name'] + + if not self._volume_exists(vol_name): + return -errno.ENOENT, "", "Volume '{0}' not found".format(vol_name) + + with SubvolumeClient(self, fs_name=vol_name) as svc: + svp = SubvolumePath(sub_name, sub_name) + path = svc.get_subvolume_path(svp) + if not path: + return -errno.ENOENT, "", \ + "Subvolume '{0}' not found".format(sub_name) + return 0, path, ""