If route specified in replace_route() doesn't exist then return suitable error response

This commit is contained in:
Lewis Gaul 2023-06-16 09:33:54 -07:00
parent 1c8d1aec2e
commit 0fb3e59e0d
2 changed files with 21 additions and 1 deletions

View File

@ -444,6 +444,14 @@ class InvalidParameterValueErrorTagSpotFleetRequest(EC2ClientError):
)
class InvalidParameterValueErrorReplaceRoute(EC2ClientError):
def __init__(self, cidr: str):
super().__init__(
"InvalidParameterValue",
f"There is no route defined for '{cidr}' in the route table. Use CreateRoute instead.",
)
class EmptyTagSpecError(EC2ClientError):
def __init__(self) -> None:
super().__init__(

View File

@ -18,6 +18,7 @@ from ..exceptions import (
InvalidRouteTableIdError,
InvalidAssociationIdError,
InvalidDestinationCIDRBlockParameterError,
InvalidParameterValueErrorReplaceRoute,
RouteAlreadyExistsError,
RouteNotSupportedError,
)
@ -451,7 +452,18 @@ class RouteBackend:
route_id = generate_route_id(
route_table.id, destination_cidr_block, destination_ipv6_cidr_block
)
route = route_table.routes[route_id]
try:
route = route_table.routes[route_id]
except KeyError:
cidr = (
destination_cidr_block
if destination_cidr_block
else destination_ipv6_cidr_block
)
# This should be 'raise InvalidRouteError(route_table_id, cidr)' in
# line with the delete_route() equivalent, but for some reason AWS
# returns InvalidParameterValue instead in this case.
raise InvalidParameterValueErrorReplaceRoute(cidr) from None
route.gateway = None
route.nat_gateway = None