Fix: Ec2 - add destinationIpv6CIDR support. (#3106)
* Fix: Ec2 - add destinationIpv6CIDR support. * removing unneccessary debug statements * modifying existing test case * Linting Co-authored-by: usmankb <usman@krazybee.com> Co-authored-by: Bert Blommers <info@bertblommers.nl>
This commit is contained in:
parent
1299fef8b8
commit
81be4b37a1
@ -3547,6 +3547,7 @@ class Route(object):
|
|||||||
self,
|
self,
|
||||||
route_table,
|
route_table,
|
||||||
destination_cidr_block,
|
destination_cidr_block,
|
||||||
|
destination_ipv6_cidr_block,
|
||||||
local=False,
|
local=False,
|
||||||
gateway=None,
|
gateway=None,
|
||||||
instance=None,
|
instance=None,
|
||||||
@ -3554,9 +3555,12 @@ class Route(object):
|
|||||||
interface=None,
|
interface=None,
|
||||||
vpc_pcx=None,
|
vpc_pcx=None,
|
||||||
):
|
):
|
||||||
self.id = generate_route_id(route_table.id, destination_cidr_block)
|
self.id = generate_route_id(
|
||||||
|
route_table.id, destination_cidr_block, destination_ipv6_cidr_block
|
||||||
|
)
|
||||||
self.route_table = route_table
|
self.route_table = route_table
|
||||||
self.destination_cidr_block = destination_cidr_block
|
self.destination_cidr_block = destination_cidr_block
|
||||||
|
self.destination_ipv6_cidr_block = destination_ipv6_cidr_block
|
||||||
self.local = local
|
self.local = local
|
||||||
self.gateway = gateway
|
self.gateway = gateway
|
||||||
self.instance = instance
|
self.instance = instance
|
||||||
@ -3632,6 +3636,7 @@ class RouteBackend(object):
|
|||||||
self,
|
self,
|
||||||
route_table_id,
|
route_table_id,
|
||||||
destination_cidr_block,
|
destination_cidr_block,
|
||||||
|
destination_ipv6_cidr_block=None,
|
||||||
local=False,
|
local=False,
|
||||||
gateway_id=None,
|
gateway_id=None,
|
||||||
instance_id=None,
|
instance_id=None,
|
||||||
@ -3656,9 +3661,10 @@ class RouteBackend(object):
|
|||||||
gateway = self.get_internet_gateway(gateway_id)
|
gateway = self.get_internet_gateway(gateway_id)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
ipaddress.IPv4Network(
|
if destination_cidr_block:
|
||||||
six.text_type(destination_cidr_block), strict=False
|
ipaddress.IPv4Network(
|
||||||
)
|
six.text_type(destination_cidr_block), strict=False
|
||||||
|
)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
raise InvalidDestinationCIDRBlockParameterError(destination_cidr_block)
|
raise InvalidDestinationCIDRBlockParameterError(destination_cidr_block)
|
||||||
|
|
||||||
@ -3668,6 +3674,7 @@ class RouteBackend(object):
|
|||||||
route = Route(
|
route = Route(
|
||||||
route_table,
|
route_table,
|
||||||
destination_cidr_block,
|
destination_cidr_block,
|
||||||
|
destination_ipv6_cidr_block,
|
||||||
local=local,
|
local=local,
|
||||||
gateway=gateway,
|
gateway=gateway,
|
||||||
instance=self.get_instance(instance_id) if instance_id else None,
|
instance=self.get_instance(instance_id) if instance_id else None,
|
||||||
|
@ -16,6 +16,7 @@ class RouteTables(BaseResponse):
|
|||||||
def create_route(self):
|
def create_route(self):
|
||||||
route_table_id = self._get_param("RouteTableId")
|
route_table_id = self._get_param("RouteTableId")
|
||||||
destination_cidr_block = self._get_param("DestinationCidrBlock")
|
destination_cidr_block = self._get_param("DestinationCidrBlock")
|
||||||
|
destination_ipv6_cidr_block = self._get_param("DestinationIpv6CidrBlock")
|
||||||
gateway_id = self._get_param("GatewayId")
|
gateway_id = self._get_param("GatewayId")
|
||||||
instance_id = self._get_param("InstanceId")
|
instance_id = self._get_param("InstanceId")
|
||||||
nat_gateway_id = self._get_param("NatGatewayId")
|
nat_gateway_id = self._get_param("NatGatewayId")
|
||||||
@ -25,6 +26,7 @@ class RouteTables(BaseResponse):
|
|||||||
self.ec2_backend.create_route(
|
self.ec2_backend.create_route(
|
||||||
route_table_id,
|
route_table_id,
|
||||||
destination_cidr_block,
|
destination_cidr_block,
|
||||||
|
destination_ipv6_cidr_block,
|
||||||
gateway_id=gateway_id,
|
gateway_id=gateway_id,
|
||||||
instance_id=instance_id,
|
instance_id=instance_id,
|
||||||
nat_gateway_id=nat_gateway_id,
|
nat_gateway_id=nat_gateway_id,
|
||||||
|
@ -189,7 +189,9 @@ def random_ipv6_cidr():
|
|||||||
return "2400:6500:{}:{}::/56".format(random_resource_id(4), random_resource_id(4))
|
return "2400:6500:{}:{}::/56".format(random_resource_id(4), random_resource_id(4))
|
||||||
|
|
||||||
|
|
||||||
def generate_route_id(route_table_id, cidr_block):
|
def generate_route_id(route_table_id, cidr_block, ipv6_cidr_block=None):
|
||||||
|
if ipv6_cidr_block and not cidr_block:
|
||||||
|
cidr_block = ipv6_cidr_block
|
||||||
return "%s~%s" % (route_table_id, cidr_block)
|
return "%s~%s" % (route_table_id, cidr_block)
|
||||||
|
|
||||||
|
|
||||||
|
@ -582,6 +582,17 @@ def test_create_route_with_invalid_destination_cidr_block_parameter():
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
route_table.create_route(
|
||||||
|
DestinationIpv6CidrBlock="2001:db8::/125", GatewayId=internet_gateway.id
|
||||||
|
)
|
||||||
|
new_routes = [
|
||||||
|
route
|
||||||
|
for route in route_table.routes
|
||||||
|
if route.destination_cidr_block != vpc.cidr_block
|
||||||
|
]
|
||||||
|
new_routes.should.have.length_of(1)
|
||||||
|
new_routes[0].route_table_id.shouldnt.be.equal(None)
|
||||||
|
|
||||||
|
|
||||||
@mock_ec2
|
@mock_ec2
|
||||||
def test_create_route_with_network_interface_id():
|
def test_create_route_with_network_interface_id():
|
||||||
|
Loading…
Reference in New Issue
Block a user