]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
pybind/mirroring: add interface to list file system mirror peers
authorVenky Shankar <vshankar@redhat.com>
Tue, 9 Mar 2021 04:44:29 +0000 (23:44 -0500)
committerVenky Shankar <vshankar@redhat.com>
Tue, 23 Mar 2021 04:15:25 +0000 (09:45 +0530)
Signed-off-by: Venky Shankar <vshankar@redhat.com>
(cherry picked from commit 8ee88f57355954977320d9967b4cadfe18150f8f)

qa/tasks/cephfs/test_mirroring.py
src/pybind/mgr/mirroring/fs/snapshot_mirror.py
src/pybind/mgr/mirroring/module.py

index 29a5590aa14488730fa1276a15fbaf9e1e9eeb38..feaf864187ede23b6abd5319135a26851aad506c 100644 (file)
@@ -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
index 2b1a633e40a072c10b9243b3d665b155c290464b..be239d4a5580750979183b2ad62d52ae76d5c17b 100644 (file)
@@ -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:
index 8086324f73ed6c3ca80f7efd2248ce144d9554a6..19b0f76edbac9bbfcb9f24548ca04ed1b0fc141c 100644 (file)
@@ -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,