From: Venky Shankar Date: Tue, 9 Mar 2021 04:44:29 +0000 (-0500) Subject: pybind/mirroring: add interface to list file system mirror peers X-Git-Tag: v17.1.0~2650^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8ee88f57355954977320d9967b4cadfe18150f8f;p=ceph.git pybind/mirroring: add interface to list file system mirror peers Signed-off-by: Venky Shankar --- diff --git a/qa/tasks/cephfs/test_mirroring.py b/qa/tasks/cephfs/test_mirroring.py index 29a5590aa14..feaf864187e 100644 --- a/qa/tasks/cephfs/test_mirroring.py +++ b/qa/tasks/cephfs/test_mirroring.py @@ -796,6 +796,12 @@ class TestMirroring(CephFSTestCase): self.verify_peer_added(self.primary_fs_name, self.primary_fs_id, "client.mirror_peer_bootstrap@site-remote", self.secondary_fs_name) + # verify via peer_list interface + peer_uuid = self.get_peer_uuid("client.mirror_peer_bootstrap@site-remote") + res = json.loads(self.mgr_cluster.mon_manager.raw_cluster_cmd("fs", "snapshot", "mirror", "peer_list", self.primary_fs_name)) + self.assertTrue(peer_uuid in res) + self.assertTrue('mon_host' in res[peer_uuid] and res[peer_uuid]['mon_host'] != '') + # remove peer self.peer_remove(self.primary_fs_name, self.primary_fs_id, "client.mirror_peer_bootstrap@site-remote") # disable mirroring diff --git a/src/pybind/mgr/mirroring/fs/snapshot_mirror.py b/src/pybind/mgr/mirroring/fs/snapshot_mirror.py index 2b1a633e40a..be239d4a558 100644 --- a/src/pybind/mgr/mirroring/fs/snapshot_mirror.py +++ b/src/pybind/mgr/mirroring/fs/snapshot_mirror.py @@ -536,6 +536,29 @@ class FSSnapshotMirror: except Exception as e: return e.args[0], '', 'failed to disable mirroring' + def peer_list(self, filesystem): + try: + with self.lock: + fspolicy = self.pool_policy.get(filesystem, None) + if not fspolicy: + raise MirrorException(-errno.EINVAL, f'filesystem {filesystem} is not mirrored') + peers = self.get_filesystem_peers(filesystem) + peer_res = {} + for peer_uuid, rem in peers.items(): + conf = self.config_get(FSSnapshotMirror.peer_config_key(filesystem, peer_uuid)) + remote = rem['remote'] + peer_res[peer_uuid] = {'client_name': remote['client_name'], + 'site_name': remote['cluster_name'], + 'fs_name': remote['fs_name'] + } + if 'mon_host' in conf: + peer_res[peer_uuid]['mon_host'] = conf['mon_host'] + return 0, json.dumps(peer_res), '' + except MirrorException as me: + return me.args[0], '', me.args[1] + except Exception as e: + return e.args[0], '', 'failed to list peers' + def peer_add(self, filesystem, remote_cluster_spec, remote_fs_name, remote_conf): try: if remote_fs_name == None: diff --git a/src/pybind/mgr/mirroring/module.py b/src/pybind/mgr/mirroring/module.py index 8086324f73e..19b0f76edba 100644 --- a/src/pybind/mgr/mirroring/module.py +++ b/src/pybind/mgr/mirroring/module.py @@ -41,6 +41,12 @@ class Module(MgrModule): return self.fs_snapshot_mirror.peer_add(fs_name, remote_cluster_spec, remote_fs_name, remote_conf=conf) + @CLIReadCommand('fs snapshot mirror peer_list') + def snapshot_mirror_peer_list(self, + fs_name: str): + """List configured peers for a file system""" + return self.fs_snapshot_mirror.peer_list(fs_name) + @CLIWriteCommand('fs snapshot mirror peer_remove') def snapshot_mirror_peer_remove(self, fs_name: str,