diff --git a/moto/elbv2/exceptions.py b/moto/elbv2/exceptions.py index 9550fcb9e..dd2fa6ee9 100644 --- a/moto/elbv2/exceptions.py +++ b/moto/elbv2/exceptions.py @@ -35,9 +35,7 @@ class SubnetNotFoundError(ELBClientError): class TargetGroupNotFoundError(ELBClientError): def __init__(self) -> None: - super().__init__( - "TargetGroupNotFound", "The specified target group does not exist." - ) + super().__init__("TargetGroupNotFound", "One or more target groups not found") class TooManyTagsError(ELBClientError): diff --git a/moto/elbv2/models.py b/moto/elbv2/models.py index 9f0e53e2d..2ae4f3f51 100644 --- a/moto/elbv2/models.py +++ b/moto/elbv2/models.py @@ -1377,20 +1377,33 @@ Member must satisfy regular expression pattern: {expression}" target_group_arns: List[str], names: Optional[List[str]], ) -> Iterable[FakeTargetGroup]: + + args = sum(bool(arg) for arg in [load_balancer_arn, target_group_arns, names]) + + if args > 1: + raise ValidationError( + "Target group names, target group ARNs, and a load balancer ARN cannot be specified at the same time" + ) + if load_balancer_arn: if load_balancer_arn not in self.load_balancers: raise LoadBalancerNotFoundError() - return [ + target_groups = [ tg for tg in self.target_groups.values() if load_balancer_arn in tg.load_balancer_arns ] + if target_groups is None or len(target_groups) == 0: + raise TargetGroupNotFoundError() + return sorted(target_groups, key=lambda tg: tg.name) if target_group_arns: try: - return [self.target_groups[arn] for arn in target_group_arns] + target_groups = [self.target_groups[arn] for arn in target_group_arns] + return sorted(target_groups, key=lambda tg: tg.name) except KeyError: raise TargetGroupNotFoundError() + if names: matched = [] for name in names: @@ -1401,9 +1414,9 @@ Member must satisfy regular expression pattern: {expression}" if not found: raise TargetGroupNotFoundError() matched.append(found) - return matched + return sorted(matched, key=lambda tg: tg.name) - return self.target_groups.values() + return sorted(self.target_groups.values(), key=lambda tg: tg.name) def describe_listeners( self, load_balancer_arn: Optional[str], listener_arns: List[str] diff --git a/moto/elbv2/responses.py b/moto/elbv2/responses.py index 652d5b9b9..443d92fbb 100644 --- a/moto/elbv2/responses.py +++ b/moto/elbv2/responses.py @@ -1070,6 +1070,7 @@ DESCRIBE_TARGET_GROUPS_TEMPLATE = """