From 033d9e743a97534518b817bd10bd27cfbb711a8a Mon Sep 17 00:00:00 2001 From: Ramana Raja Date: Fri, 26 Jul 2019 19:35:28 +0530 Subject: [PATCH] mgr/volumes: set uid/gid of FS client's mount as 0/0 ... to allow creating subvolumes/subvolume groups within a filesystem. Fixes: http://tracker.ceph.com/issues/40927 Signed-off-by: Ramana Raja --- qa/tasks/cephfs/test_volumes.py | 34 +++++++++++++++++++++++++++++ src/pybind/mgr/volumes/fs/volume.py | 3 +++ 2 files changed, 37 insertions(+) diff --git a/qa/tasks/cephfs/test_volumes.py b/qa/tasks/cephfs/test_volumes.py index be747e52b4f..eb94251cab9 100644 --- a/qa/tasks/cephfs/test_volumes.py +++ b/qa/tasks/cephfs/test_volumes.py @@ -157,6 +157,23 @@ class TestVolumes(CephFSTestCase): if ce.exitstatus != errno.ENOENT: raise + def test_default_uid_gid_subvolume(self): + subvolume = self._generate_random_subvolume_name() + expected_uid = 0 + expected_gid = 0 + + # create subvolume + self._fs_cmd("subvolume", "create", self.volname, subvolume) + subvol_path = self._get_subvolume_path(self.volname, subvolume) + + # check subvolume's uid and gid + stat = self.mount_a.stat(subvol_path) + self.assertEqual(stat['st_uid'], expected_uid) + self.assertEqual(stat['st_gid'], expected_gid) + + # remove subvolume + self._fs_cmd("subvolume", "rm", self.volname, subvolume) + ### subvolume group operations def test_subvolume_create_and_rm_in_group(self): @@ -309,6 +326,23 @@ class TestVolumes(CephFSTestCase): # force remove subvolume self._fs_cmd("subvolumegroup", "rm", self.volname, group, "--force") + def test_default_uid_gid_subvolume_group(self): + group = self._generate_random_group_name() + expected_uid = 0 + expected_gid = 0 + + # create group + self._fs_cmd("subvolumegroup", "create", self.volname, group) + group_path = self._get_subvolume_group_path(self.volname, group) + + # check group's uid and gid + stat = self.mount_a.stat(group_path) + self.assertEqual(stat['st_uid'], expected_uid) + self.assertEqual(stat['st_gid'], expected_gid) + + # remove group + self._fs_cmd("subvolumegroup", "rm", self.volname, group) + ### snapshot operations def test_subvolume_snapshot_create_and_rm(self): diff --git a/src/pybind/mgr/volumes/fs/volume.py b/src/pybind/mgr/volumes/fs/volume.py index 266fa8a23d1..8e32a233b4f 100644 --- a/src/pybind/mgr/volumes/fs/volume.py +++ b/src/pybind/mgr/volumes/fs/volume.py @@ -69,6 +69,9 @@ class ConnectionPool(object): assert self.ops_in_progress == 0 log.debug("Connecting to cephfs '{0}'".format(self.fs_name)) self.fs = cephfs.LibCephFS(rados_inst=self.mgr.rados) + log.debug("Setting user ID and group ID of CephFS mount as root...") + self.fs.conf_set("client_mount_uid", "0") + self.fs.conf_set("client_mount_gid", "0") log.debug("CephFS initializing...") self.fs.init() log.debug("CephFS mounting...") -- 2.39.5