def min_party(name,
              zk_hosts,
              min_nodes,
              blocking=False,
              profile=None,
              scheme=None,
              username=None,
              password=None,
              default_acl=None):
    '''
    Ensure that there are `min_nodes` in the party at `name`, optionally blocking if not available.
    '''
    ret = {'name': name,
           'changes': {},
           'result': False,
           'comment': ''}
    conn_kwargs = {'profile': profile, 'scheme': scheme,
                   'username': username, 'password': password, 'default_acl': default_acl}

    if __opts__['test']:
        ret['result'] = None
        ret['comment'] = 'Attempt to ensure min_party'
        return ret

    nodes = __salt__['zk_concurrency.party_members'](name, zk_hosts, min_nodes, blocking=blocking, **conn_kwargs)
    if not isinstance(nodes, list):
        raise Exception('Error from zk_concurrency.party_members, return was not a list: {0}'.format(nodes))

    num_nodes = len(nodes)

    if num_nodes >= min_nodes or blocking:
        ret['result'] = None if __opts__['test'] else True
        if not blocking:
            ret['comment'] = 'Currently {0} nodes, which is >= {1}'.format(num_nodes, min_nodes)
        else:
            ret['comment'] = 'Blocked until {0} nodes were available. Unblocked after {1} nodes became available'.format(min_nodes, num_nodes)
    else:
        ret['result'] = False
        ret['comment'] = 'Currently {0} nodes, which is < {1}'.format(num_nodes, min_nodes)

    return ret
Ensure that there are `min_nodes` in the party at `name`, optionally blocking if not available.