From a833a5bf2cc31818953f0afdfc2b7fd61cee51ce Mon Sep 17 00:00:00 2001 From: Josh Durgin Date: Tue, 15 Mar 2016 21:36:45 -0700 Subject: [PATCH] misc: make get_mon_names() and get_first_mon() cluster-aware Signed-off-by: Josh Durgin --- teuthology/misc.py | 24 +++++++++++------------- teuthology/test/test_misc.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/teuthology/misc.py b/teuthology/misc.py index 694fd7d9a6..f109919304 100644 --- a/teuthology/misc.py +++ b/teuthology/misc.py @@ -1024,26 +1024,24 @@ def get_user(): return getpass.getuser() + '@' + socket.gethostname() -def get_mon_names(ctx): +def get_mon_names(ctx, cluster='ceph'): """ :returns: a list of monitor names """ - mons = [] - for remote, roles in ctx.cluster.remotes.items(): - for role in roles: - if not role.startswith('mon.'): - continue - mons.append(role) - return mons + is_mon = is_type('mon', cluster) + host_mons = [[role for role in roles if is_mon(role)] + for roles in ctx.cluster.remotes.values()] + return [mon for mons in host_mons for mon in mons] -def get_first_mon(ctx, config): +def get_first_mon(ctx, config, cluster='ceph'): """ - return the "first" mon (alphanumerically, for lack of anything better) + return the "first" mon role (alphanumerically, for lack of anything better) """ - firstmon = sorted(get_mon_names(ctx))[0] - assert firstmon - return firstmon + mons = get_mon_names(ctx, cluster) + if mons: + return sorted(mons)[0] + assert False, 'no mon for cluster found' def replace_all_with_clients(cluster, config): diff --git a/teuthology/test/test_misc.py b/teuthology/test/test_misc.py index a8ae63af84..80f18915d4 100644 --- a/teuthology/test/test_misc.py +++ b/teuthology/test/test_misc.py @@ -89,6 +89,38 @@ def test_get_clients_simple(): next(g) +def test_get_mon_names(): + expected = [ + ([['mon.a', 'osd.0', 'mon.c']], 'ceph', ['mon.a', 'mon.c']), + ([['ceph.mon.a', 'osd.0', 'ceph.mon.c']], 'ceph', ['ceph.mon.a', 'ceph.mon.c']), + ([['mon.a', 'osd.0', 'mon.c'], ['ceph.mon.b']], 'ceph', ['mon.a', 'mon.c', 'ceph.mon.b']), + ([['mon.a', 'osd.0', 'mon.c'], ['foo.mon.a']], 'ceph', ['mon.a', 'mon.c']), + ([['mon.a', 'osd.0', 'mon.c'], ['foo.mon.a']], 'foo', ['foo.mon.a']), + ] + for remote_roles, cluster_name, expected_mons in expected: + ctx = argparse.Namespace() + ctx.cluster = Mock() + ctx.cluster.remotes = {i: roles for i, roles in enumerate(remote_roles)} + mons = misc.get_mon_names(ctx, cluster_name) + assert expected_mons == mons + + +def test_get_first_mon(): + expected = [ + ([['mon.a', 'osd.0', 'mon.c']], 'ceph', 'mon.a'), + ([['ceph.mon.a', 'osd.0', 'ceph.mon.c']], 'ceph', 'ceph.mon.a'), + ([['mon.a', 'osd.0', 'mon.c'], ['ceph.mon.b']], 'ceph', 'ceph.mon.b'), + ([['mon.a', 'osd.0', 'mon.c'], ['foo.mon.a']], 'ceph', 'mon.a'), + ([['foo.mon.b', 'osd.0', 'mon.c'], ['foo.mon.a']], 'foo', 'foo.mon.a'), + ] + for remote_roles, cluster_name, expected_mon in expected: + ctx = argparse.Namespace() + ctx.cluster = Mock() + ctx.cluster.remotes = {i: roles for i, roles in enumerate(remote_roles)} + mon = misc.get_first_mon(ctx, None, cluster_name) + assert expected_mon == mon + + def test_roles_of_type(): expected = [ (['client.0', 'osd.0', 'ceph.osd.1'], 'osd', ['0', '1']), -- 2.39.5