From 0aca7264e6929ead450b65ed425034b6b09ccdb4 Mon Sep 17 00:00:00 2001 From: Venky Shankar Date: Mon, 8 Mar 2021 23:44:29 -0500 Subject: [PATCH] pybind/mirroring: add interface to list file system mirror peers Signed-off-by: Venky Shankar (cherry picked from commit 8ee88f57355954977320d9967b4cadfe18150f8f) --- qa/tasks/cephfs/test_mirroring.py | 6 +++++ .../mgr/mirroring/fs/snapshot_mirror.py | 23 +++++++++++++++++++ src/pybind/mgr/mirroring/module.py | 6 +++++ 3 files changed, 35 insertions(+) diff --git a/qa/tasks/cephfs/test_mirroring.py b/qa/tasks/cephfs/test_mirroring.py index 29a5590aa1448..feaf864187ede 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 2b1a633e40a07..be239d4a55807 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 8086324f73ed6..19b0f76edbac9 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, -- 2.39.5