def roles_of_type(roles_for_host, type_):
+ """
+ Generator of ids.
+
+ Each call returns the next possible role of the type specified.
+ :param roles_for host: list of roles possible
+ :param type_: type of role
+ """
+ for role in cluster_roles_of_type(roles_for_host, type_, None):
+ _, _, id_ = split_role(role)
+ yield id_
+
+
+def cluster_roles_of_type(roles_for_host, type_, cluster):
"""
Generator of roles.
Each call returns the next possible role of the type specified.
:param roles_for host: list of roles possible
:param type_: type of role
+ :param cluster: cluster name
"""
- is_of_type = is_type(type_)
- for name in roles_for_host:
- if not is_of_type(name):
+ is_type_in_cluster = is_type(type_, cluster)
+ for role in roles_for_host:
+ if not is_type_in_cluster(role):
continue
- _, _, id_ = split_role(name)
- yield id_
+ yield role
def all_roles(cluster):
assert ids == expected_ids
+def test_cluster_roles_of_type():
+ expected = [
+ (['client.0', 'osd.0', 'ceph.osd.1'], 'osd', 'ceph',
+ ['osd.0', 'ceph.osd.1']),
+ (['client.0', 'osd.0', 'ceph.osd.1'], 'client', 'ceph',
+ ['client.0']),
+ (['foo.client.1', 'bar.client.2.3', 'baz.osd.1'], 'mon', None, []),
+ (['foo.client.1', 'bar.client.2.3', 'baz.osd.1'], 'client', None,
+ ['foo.client.1', 'bar.client.2.3']),
+ (['foo.client.1', 'bar.client.2.3', 'baz.osd.1'], 'client', 'bar',
+ ['bar.client.2.3']),
+ ]
+ for roles_for_host, type_, cluster, expected_roles in expected:
+ roles = list(misc.cluster_roles_of_type(roles_for_host, type_, cluster))
+ assert roles == expected_roles
+
+
def test_all_roles_of_type():
expected = [
([['client.0', 'osd.0', 'ceph.osd.1'], ['bar.osd.2']],