ELBv2: Fix LoadBalancerNotFound being thrown for listener rules (#4921)

This commit is contained in:
Viren Nadkarni 2022-03-15 18:04:19 +05:30 committed by GitHub
parent fdba9e4dbe
commit 131c448756
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 1 deletions

View File

@ -305,6 +305,7 @@ class FakeListenerRule(CloudFormationModel):
self.conditions = conditions self.conditions = conditions
self.actions = actions self.actions = actions
self.priority = priority self.priority = priority
self.tags = {}
@property @property
def physical_resource_id(self): def physical_resource_id(self):

View File

@ -2,7 +2,7 @@ from moto.core.exceptions import RESTError
from moto.core.utils import amzn_request_id from moto.core.utils import amzn_request_id
from moto.core.responses import BaseResponse from moto.core.responses import BaseResponse
from .models import elbv2_backends from .models import elbv2_backends
from .exceptions import DuplicateTagKeysError from .exceptions import DuplicateTagKeysError, RuleNotFoundError
from .exceptions import LoadBalancerNotFoundError from .exceptions import LoadBalancerNotFoundError
from .exceptions import TargetGroupNotFoundError from .exceptions import TargetGroupNotFoundError
from .exceptions import ListenerNotFoundError from .exceptions import ListenerNotFoundError
@ -467,6 +467,22 @@ class ELBV2Response(BaseResponse):
resource = self.elbv2_backend.load_balancers.get(arn) resource = self.elbv2_backend.load_balancers.get(arn)
if not resource: if not resource:
raise LoadBalancerNotFoundError() raise LoadBalancerNotFoundError()
elif ":listener-rule" in arn:
lb_arn = arn.replace(":listener-rule", ":loadbalancer").rsplit("/", 2)[
0
]
balancer = self.elbv2_backend.load_balancers.get(lb_arn)
if not balancer:
raise LoadBalancerNotFoundError()
listener_arn = arn.replace(":listener-rule", ":listener").rsplit(
"/", 1
)[0]
listener = balancer.listeners.get(listener_arn)
if not listener:
raise ListenerNotFoundError()
resource = listener.rules.get(arn)
if not resource:
raise RuleNotFoundError()
elif ":listener" in arn: elif ":listener" in arn:
lb_arn, _, _ = arn.replace(":listener", ":loadbalancer").rpartition("/") lb_arn, _, _ = arn.replace(":listener", ":loadbalancer").rpartition("/")
balancer = self.elbv2_backend.load_balancers.get(lb_arn) balancer = self.elbv2_backend.load_balancers.get(lb_arn)

View File

@ -117,6 +117,10 @@ def test_create_rule_condition(condition):
response = conn.describe_rules(RuleArns=[rule["RuleArn"]]) response = conn.describe_rules(RuleArns=[rule["RuleArn"]])
response["Rules"].should.equal([rule]) response["Rules"].should.equal([rule])
# assert describe_tags response
response = conn.describe_tags(ResourceArns=[rule["RuleArn"]])
response["TagDescriptions"].should.have.length_of(1)
@mock_elbv2 @mock_elbv2
@mock_ec2 @mock_ec2