From a47239b7f260ac4dcaf6faeb856f8f5d5dac7b4b Mon Sep 17 00:00:00 2001 From: Ramana Raja Date: Tue, 23 Apr 2019 18:33:58 +0530 Subject: [PATCH] mgr/volumes: allow fetching path of FS subvolumes ... using `ceph fs subvolume getpath` command. Signed-off-by: Ramana Raja --- src/pybind/mgr/volumes/fs/subvolume.py | 8 ++++++++ src/pybind/mgr/volumes/module.py | 22 ++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/pybind/mgr/volumes/fs/subvolume.py b/src/pybind/mgr/volumes/fs/subvolume.py index 9827f199fa1..272358ed5ca 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 c1de44763d5..94215328722 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 @@ -360,3 +367,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, "" -- 2.39.5