def _assign_roles_by_maxs(role_bundles, lower_roles, unassigned_hosts,
                          bundled_maxs):
    """Assign roles to host by max restriction."""
    available_lists = []
    default_roles = []
    for bundled_role in role_bundles.keys():
        if bundled_maxs[bundled_role] > 0:
            available_lists.append(
                [bundled_role]*bundled_maxs[bundled_role])
        else:
            default_roles.append(bundled_role)

    available_list = util.flat_lists_with_possibility(available_lists)

    for bundled_role in available_list:
        if not unassigned_hosts:
            break

        host = unassigned_hosts.pop(0)
        lower_roles[host] = list(role_bundles[bundled_role])

    logging.debug('assigned roles after assigning max: %s', lower_roles)
    logging.debug('unassigned_hosts after assigning maxs: %s',
                  unassigned_hosts)

    if default_roles:
        default_iter = itertools.cycle(default_roles)
        while unassigned_hosts:
            host = unassigned_hosts.pop(0)
            bundled_role = default_iter.next()
            lower_roles[host] = list(role_bundles[bundled_role])

    logging.debug('assigned roles are %s', lower_roles)
    logging.debug('unassigned hosts: %s', unassigned_hosts)
Example #2
0
def _assign_roles_by_maxs(role_bundles, lower_roles, unassigned_hosts,
                          bundled_maxs):
    """Assign roles to host by max restriction."""
    available_lists = []
    default_roles = []
    for bundled_role in role_bundles.keys():
        if bundled_maxs[bundled_role] > 0:
            available_lists.append([bundled_role] * bundled_maxs[bundled_role])
        else:
            default_roles.append(bundled_role)

    available_list = util.flat_lists_with_possibility(available_lists)

    for bundled_role in available_list:
        if not unassigned_hosts:
            break

        host = unassigned_hosts.pop(0)
        lower_roles[host] = list(role_bundles[bundled_role])

    logging.debug('assigned roles after assigning max: %s', lower_roles)
    logging.debug('unassigned_hosts after assigning maxs: %s',
                  unassigned_hosts)

    if default_roles:
        default_iter = itertools.cycle(default_roles)
        while unassigned_hosts:
            host = unassigned_hosts.pop(0)
            bundled_role = default_iter.next()
            lower_roles[host] = list(role_bundles[bundled_role])

    logging.debug('assigned roles are %s', lower_roles)
    logging.debug('unassigned hosts: %s', unassigned_hosts)
Example #3
0
 def test_simple_case(self):
     """test simple case."""
     lists = [["role1"], ["role2"], ["role3"]]
     self.assertEqual(util.flat_lists_with_possibility(lists), ["role1", "role2", "role3"])
     lists = [["role1", "role1"], ["role2"], ["role3"]]
     self.assertEqual(util.flat_lists_with_possibility(lists), ["role1", "role2", "role3", "role1"])
     lists = [["role1", "role1", "role1"], ["role2", "role2"], ["role3"]]
     self.assertEqual(
         util.flat_lists_with_possibility(lists), ["role1", "role2", "role3", "role1", "role2", "role1"]
     )
     lists = [["role1", "role1", "role1", "role1"], ["role2", "role2"], ["role3"]]
     self.assertEqual(
         util.flat_lists_with_possibility(lists), ["role1", "role2", "role3", "role1", "role1", "role2", "role1"]
     )
     lists = [["role3"], ["role2", "role2"], ["role1", "role1", "role1", "role1"]]
     self.assertEqual(
         util.flat_lists_with_possibility(lists), ["role1", "role2", "role3", "role1", "role1", "role2", "role1"]
     )
Example #4
0
 def test_simple_case(self):
     lists = [['role1'], ['role2'], ['role3']]
     self.assertEqual(util.flat_lists_with_possibility(lists),
                      ['role1', 'role2', 'role3'])
     lists = [['role1', 'role1'], ['role2'], ['role3']]
     self.assertEqual(util.flat_lists_with_possibility(lists),
                      ['role1', 'role2', 'role3', 'role1'])
     lists = [['role1', 'role1', 'role1'], ['role2', 'role2'], ['role3']]
     self.assertEqual(
         util.flat_lists_with_possibility(lists),
         ['role1', 'role2', 'role3', 'role1', 'role2', 'role1'])
     lists = [['role1', 'role1', 'role1', 'role1'], ['role2', 'role2'],
              ['role3']]
     self.assertEqual(
         util.flat_lists_with_possibility(lists),
         ['role1', 'role2', 'role3', 'role1', 'role1', 'role2', 'role1'])
     lists = [['role3'], ['role2', 'role2'],
              ['role1', 'role1', 'role1', 'role1']]
     self.assertEqual(
         util.flat_lists_with_possibility(lists),
         ['role1', 'role2', 'role3', 'role1', 'role1', 'role2', 'role1'])
Example #5
0
 def test_simple_case(self):
     lists = [['role1'], ['role2'], ['role3']]
     self.assertEqual(util.flat_lists_with_possibility(lists),
                      ['role1', 'role2', 'role3'])
     lists = [['role1', 'role1'], ['role2'], ['role3']]
     self.assertEqual(util.flat_lists_with_possibility(lists),
                      ['role1', 'role2', 'role3', 'role1'])
     lists = [['role1', 'role1', 'role1'], ['role2', 'role2'], ['role3']]
     self.assertEqual(util.flat_lists_with_possibility(lists),
                      ['role1', 'role2', 'role3',
                       'role1', 'role2', 'role1'])
     lists = [['role1', 'role1', 'role1', 'role1'],
              ['role2', 'role2'], ['role3']]
     self.assertEqual(util.flat_lists_with_possibility(lists),
                      ['role1', 'role2', 'role3', 'role1',
                       'role1', 'role2', 'role1'])
     lists = [['role3'],
              ['role2', 'role2'],
              ['role1', 'role1', 'role1', 'role1']]
     self.assertEqual(util.flat_lists_with_possibility(lists),
                      ['role1', 'role2', 'role3', 'role1',
                       'role1', 'role2', 'role1'])