def describe_target_groups(names=None,
                           target_group_arns=None,
                           load_balancer_arn=None,
                           region=None,
                           key=None,
                           keyid=None,
                           profile=None):
    '''
    Describes the specified target groups or all of your target groups. By default,
    all target groups are described. Alternatively, you can specify one of the
    following to filter the results: the ARN of the load balancer, the names of
    one or more target groups, or the ARNs of one or more target groups.

    Returns: list

    CLI example:

    .. code-block:: bash

        salt myminion boto_elbv2.describe_target_groups
        salt myminion boto_elbv2.describe_target_groups target_group_name
        salt myminion boto_elbv2.describe_target_groups "[tg_name,tg_name]"
    '''
    if names and target_group_arns:
        raise SaltInvocationError('At most one of names or target_group_arns may '
                                  'be provided')
    if names:
        target_groups = names
    elif target_group_arns:
        target_groups = target_group_arns
    else:
        target_groups = None

    tg_list = []
    if target_groups:
        if isinstance(target_groups, str) or isinstance(target_groups, six.text_type):
            tg_list.append(target_groups)
        else:
            for group in target_groups:
                tg_list.append(group)

    conn = _get_conn(region=region, key=key, keyid=keyid, profile=profile)

    try:
        if names:
            ret = conn.describe_target_groups(Names=tg_list)['TargetGroups']
        elif target_group_arns:
            ret = conn.describe_target_groups(TargetGroupArns=tg_list)['TargetGroups']
        elif load_balancer_arn:
            ret = conn.describe_target_groups(LoadBalancerArn=load_balancer_arn)['TargetGroups']
        else:
            ret = []
            next_marker = ''
            while True:
                r = conn.describe_target_groups(Marker=next_marker)
                for alb in r['TargetGroups']:
                    ret.append(alb)
                if 'NextMarker' in r:
                    next_marker = r['NextMarker']
                else:
                    break
        return ret if ret else []

    except ClientError as error:
        log.warning(error)
        return False