docs: 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