Add support for EC2 transit gateway associations (#4089)
Co-authored-by: Nevil Macwan <macnev2013@gmail.com> Co-authored-by: monty16597 <alonjamohit77@gmail.com>
This commit is contained in:
parent
6803a473dc
commit
6eeb4b4b32
@ -33,7 +33,7 @@ from moto.core.utils import (
|
||||
)
|
||||
from moto.core import ACCOUNT_ID
|
||||
from moto.kms import kms_backends
|
||||
from moto.utilities.utils import load_resource, merge_multiple_dicts
|
||||
from moto.utilities.utils import load_resource, merge_multiple_dicts, filter_resources
|
||||
from os import listdir
|
||||
|
||||
from .exceptions import (
|
||||
@ -6016,29 +6016,18 @@ class TransitGatewayBackend(object):
|
||||
return transit_gateway
|
||||
|
||||
def get_all_transit_gateways(self, filters):
|
||||
transit_gateways = self.transit_gateways.values()
|
||||
transit_gateways = list(self.transit_gateways.values())
|
||||
|
||||
if filters is not None:
|
||||
if filters.get("transit-gateway-id") is not None:
|
||||
transit_gateways = [
|
||||
transit_gateway
|
||||
for transit_gateway in transit_gateways
|
||||
if transit_gateway.id in filters["transit-gateway-id"]
|
||||
]
|
||||
if filters.get("state") is not None:
|
||||
transit_gateways = [
|
||||
transit_gateway
|
||||
for transit_gateway in transit_gateways
|
||||
if transit_gateway.state in filters["state"]
|
||||
]
|
||||
if filters.get("owner-id") is not None:
|
||||
transit_gateways = [
|
||||
transit_gateway
|
||||
for transit_gateway in transit_gateways
|
||||
if transit_gateway.owner_id in filters["owner-id"]
|
||||
]
|
||||
attr_pairs = (
|
||||
("transit-gateway-id", "id"),
|
||||
("state", "state"),
|
||||
("owner-id", "owner_id"),
|
||||
)
|
||||
|
||||
return transit_gateways
|
||||
result = transit_gateways
|
||||
if filters:
|
||||
result = filter_resources(transit_gateways, filters, attr_pairs)
|
||||
return result
|
||||
|
||||
def delete_transit_gateway(self, transit_gateway_id):
|
||||
return self.transit_gateways.pop(transit_gateway_id)
|
||||
@ -6074,6 +6063,8 @@ class TransitGatewayRouteTable(TaggedEC2Resource):
|
||||
self.state = "available"
|
||||
self.routes = {}
|
||||
self.add_tags(tags or {})
|
||||
self.route_table_association = {}
|
||||
self.route_table_propagation = {}
|
||||
|
||||
@property
|
||||
def physical_resource_id(self):
|
||||
@ -6109,9 +6100,9 @@ class TransitGatewayRouteTableBackend(object):
|
||||
return transit_gateways_route_table
|
||||
|
||||
def get_all_transit_gateway_route_tables(
|
||||
self, transit_gateway_ids=None, filters=None
|
||||
self, transit_gateway_route_table_ids=None, filters=None
|
||||
):
|
||||
transit_gateway_route_tables = self.transit_gateways_route_tables.values()
|
||||
transit_gateway_route_tables = list(self.transit_gateways_route_tables.values())
|
||||
|
||||
attr_pairs = (
|
||||
("default-association-route-table", "default_association_route_table"),
|
||||
@ -6121,28 +6112,24 @@ class TransitGatewayRouteTableBackend(object):
|
||||
("transit-gateway-route-table-id", "id"),
|
||||
)
|
||||
|
||||
if transit_gateway_ids:
|
||||
if transit_gateway_route_table_ids:
|
||||
transit_gateway_route_tables = [
|
||||
transit_gateway_route_table
|
||||
for transit_gateway_route_table in transit_gateway_route_tables
|
||||
if transit_gateway_route_table.id in transit_gateway_ids
|
||||
if transit_gateway_route_table.id in transit_gateway_route_table_ids
|
||||
]
|
||||
|
||||
result = transit_gateway_route_tables
|
||||
if filters:
|
||||
for attrs in attr_pairs:
|
||||
values = filters.get(attrs[0]) or None
|
||||
if values is not None:
|
||||
transit_gateway_route_tables = [
|
||||
transit_gateway_route_table
|
||||
for transit_gateway_route_table in transit_gateway_route_tables
|
||||
if not values
|
||||
or getattr(transit_gateway_route_table, attrs[1]) in values
|
||||
]
|
||||
|
||||
return transit_gateway_route_tables
|
||||
result = filter_resources(transit_gateway_route_tables, filters, attr_pairs)
|
||||
return result
|
||||
|
||||
def delete_transit_gateway_route_table(self, transit_gateway_route_table_id):
|
||||
return self.transit_gateways_route_tables.pop(transit_gateway_route_table_id)
|
||||
transit_gateways_route_table = self.transit_gateways_route_tables[
|
||||
transit_gateway_route_table_id
|
||||
]
|
||||
transit_gateways_route_table.state = "deleted"
|
||||
return transit_gateways_route_table
|
||||
|
||||
def create_transit_gateway_route(
|
||||
self,
|
||||
@ -6151,22 +6138,31 @@ class TransitGatewayRouteTableBackend(object):
|
||||
transit_gateway_attachment_id=None,
|
||||
blackhole=False,
|
||||
):
|
||||
transit_gateways_route_table = self.transit_gateways_route_tables[
|
||||
transit_gateways_route_table = self.transit_gateways_route_tables.get(
|
||||
transit_gateway_route_table_id
|
||||
]
|
||||
)
|
||||
transit_gateway_attachment = self.transit_gateway_attachments.get(
|
||||
transit_gateway_attachment_id
|
||||
)
|
||||
transit_gateways_route_table.routes[destination_cidr_block] = {
|
||||
"destinationCidrBlock": destination_cidr_block,
|
||||
"prefixListId": "",
|
||||
"state": "blackhole" if blackhole else "active",
|
||||
# TODO: needs to be fixed once we have support for transit gateway attachments
|
||||
"transitGatewayAttachments": {
|
||||
"resourceId": "TODO",
|
||||
"resourceType": "TODO",
|
||||
"transitGatewayAttachmentId": transit_gateway_attachment_id,
|
||||
},
|
||||
"type": "TODO",
|
||||
"type": "static",
|
||||
}
|
||||
return transit_gateways_route_table
|
||||
|
||||
if transit_gateway_attachment:
|
||||
transit_gateway_attachment_dict = {
|
||||
"transitGatewayAttachments": {
|
||||
"resourceId": transit_gateway_attachment.resource_id,
|
||||
"resourceType": transit_gateway_attachment.resource_type,
|
||||
"transitGatewayAttachmentId": transit_gateway_attachment_id,
|
||||
}
|
||||
}
|
||||
transit_gateways_route_table.routes[destination_cidr_block].update(
|
||||
transit_gateway_attachment_dict
|
||||
)
|
||||
return transit_gateways_route_table.routes[destination_cidr_block]
|
||||
|
||||
def delete_transit_gateway_route(
|
||||
self, transit_gateway_route_table_id, destination_cidr_block,
|
||||
@ -6180,27 +6176,120 @@ class TransitGatewayRouteTableBackend(object):
|
||||
def search_transit_gateway_routes(
|
||||
self, transit_gateway_route_table_id, filters, max_results=None
|
||||
):
|
||||
transit_gateway_route_table = self.transit_gateways_route_tables[
|
||||
transit_gateway_route_table = self.transit_gateways_route_tables.get(
|
||||
transit_gateway_route_table_id
|
||||
]
|
||||
)
|
||||
if not transit_gateway_route_table:
|
||||
return []
|
||||
|
||||
attr_pairs = (
|
||||
("type", "type"),
|
||||
("state", "state"),
|
||||
)
|
||||
|
||||
for attrs in attr_pairs:
|
||||
values = filters.get(attrs[0]) or None
|
||||
if values:
|
||||
routes = [
|
||||
transit_gateway_route_table.routes[key]
|
||||
for key in transit_gateway_route_table.routes
|
||||
if transit_gateway_route_table.routes[key][attrs[1]] in values
|
||||
]
|
||||
routes = transit_gateway_route_table.routes.copy()
|
||||
for key in transit_gateway_route_table.routes:
|
||||
for attrs in attr_pairs:
|
||||
values = filters.get(attrs[0]) or None
|
||||
if values:
|
||||
if routes.get(key).get(attrs[1]) not in values:
|
||||
routes.pop(key)
|
||||
break
|
||||
if max_results:
|
||||
routes = routes[: int(max_results)]
|
||||
return routes
|
||||
|
||||
def set_route_table_association(
|
||||
self, transit_gateway_attachment_id, transit_gateway_route_table_id
|
||||
):
|
||||
self.transit_gateways_route_tables[
|
||||
transit_gateway_route_table_id
|
||||
].route_table_association = {
|
||||
"resourceId": self.transit_gateway_attachments[
|
||||
transit_gateway_attachment_id
|
||||
].resource_id,
|
||||
"resourceType": self.transit_gateway_attachments[
|
||||
transit_gateway_attachment_id
|
||||
].resource_type,
|
||||
"state": "associated",
|
||||
"transitGatewayAttachmentId": transit_gateway_attachment_id,
|
||||
}
|
||||
|
||||
def set_route_table_propagation(
|
||||
self, transit_gateway_attachment_id, transit_gateway_route_table_id
|
||||
):
|
||||
self.transit_gateways_route_tables[
|
||||
transit_gateway_route_table_id
|
||||
].route_table_propagation = {
|
||||
"resourceId": self.transit_gateway_attachments[
|
||||
transit_gateway_attachment_id
|
||||
].resource_id,
|
||||
"resourceType": self.transit_gateway_attachments[
|
||||
transit_gateway_attachment_id
|
||||
].resource_type,
|
||||
"state": "enabled",
|
||||
"transitGatewayAttachmentId": transit_gateway_attachment_id,
|
||||
}
|
||||
|
||||
def disable_route_table_propagation(self, transit_gateway_route_table_id):
|
||||
self.transit_gateways_route_tables[
|
||||
transit_gateway_route_table_id
|
||||
].route_table_propagation = {}
|
||||
|
||||
def get_all_transit_gateway_route_table_associations(
|
||||
self, transit_gateway_route_table_id=None, filters=None
|
||||
):
|
||||
transit_gateway_route_tables = list(self.transit_gateways_route_tables.values())
|
||||
|
||||
if transit_gateway_route_tables:
|
||||
transit_gateway_route_tables = [
|
||||
transit_gateway_route_table
|
||||
for transit_gateway_route_table in transit_gateway_route_tables
|
||||
if transit_gateway_route_table.id in transit_gateway_route_table_id
|
||||
]
|
||||
|
||||
attr_pairs = (
|
||||
("resource-id", "route_table_association", "resourceId"),
|
||||
("resource-type", "route_table_association", "resourceType"),
|
||||
(
|
||||
"transit-gateway-attachment-id",
|
||||
"route_table_association",
|
||||
"transitGatewayAttachmentId",
|
||||
),
|
||||
)
|
||||
|
||||
result = transit_gateway_route_tables
|
||||
if filters:
|
||||
result = filter_resources(transit_gateway_route_tables, filters, attr_pairs)
|
||||
return result
|
||||
|
||||
def get_all_transit_gateway_route_table_propagations(
|
||||
self, transit_gateway_route_table_id=None, filters=None
|
||||
):
|
||||
transit_gateway_route_tables = list(self.transit_gateways_route_tables.values())
|
||||
|
||||
if transit_gateway_route_tables:
|
||||
transit_gateway_route_tables = [
|
||||
transit_gateway_route_table
|
||||
for transit_gateway_route_table in transit_gateway_route_tables
|
||||
if transit_gateway_route_table.id in transit_gateway_route_table_id
|
||||
]
|
||||
|
||||
attr_pairs = (
|
||||
("resource-id", "route_table_propagation", "resourceId"),
|
||||
("resource-type", "route_table_propagation", "resourceType"),
|
||||
(
|
||||
"transit-gateway-attachment-id",
|
||||
"route_table_propagation",
|
||||
"transitGatewayAttachmentId",
|
||||
),
|
||||
)
|
||||
|
||||
result = transit_gateway_route_tables
|
||||
if filters:
|
||||
result = filter_resources(transit_gateway_route_tables, filters, attr_pairs)
|
||||
return result
|
||||
|
||||
|
||||
class TransitGatewayAttachment(TaggedEC2Resource):
|
||||
def __init__(
|
||||
@ -6209,6 +6298,7 @@ class TransitGatewayAttachment(TaggedEC2Resource):
|
||||
|
||||
self.ec2_backend = backend
|
||||
self.association = {}
|
||||
self.propagation = {}
|
||||
self.resource_id = resource_id
|
||||
self.resource_type = resource_type
|
||||
|
||||
@ -6261,7 +6351,7 @@ class TransitGatewayVpcAttachment(TransitGatewayAttachment):
|
||||
|
||||
class TransitGatewayAttachmentBackend(object):
|
||||
def __init__(self):
|
||||
self.transit_gateways_attachments = {}
|
||||
self.transit_gateway_attachments = {}
|
||||
super(TransitGatewayAttachmentBackend, self).__init__()
|
||||
|
||||
def create_transit_gateway_vpn_attachment(
|
||||
@ -6274,7 +6364,7 @@ class TransitGatewayAttachmentBackend(object):
|
||||
transit_gateway_id=transit_gateway_id,
|
||||
tags=tags,
|
||||
)
|
||||
self.transit_gateways_attachments[
|
||||
self.transit_gateway_attachments[
|
||||
transit_gateway_vpn_attachment.id
|
||||
] = transit_gateway_vpn_attachment
|
||||
return transit_gateway_vpn_attachment
|
||||
@ -6290,7 +6380,7 @@ class TransitGatewayAttachmentBackend(object):
|
||||
subnet_ids=subnet_ids,
|
||||
options=options,
|
||||
)
|
||||
self.transit_gateways_attachments[
|
||||
self.transit_gateway_attachments[
|
||||
transit_gateway_vpc_attachment.id
|
||||
] = transit_gateway_vpc_attachment
|
||||
return transit_gateway_vpc_attachment
|
||||
@ -6298,7 +6388,7 @@ class TransitGatewayAttachmentBackend(object):
|
||||
def describe_transit_gateway_attachments(
|
||||
self, transit_gateways_attachment_ids=None, filters=None, max_results=0
|
||||
):
|
||||
transit_gateways_attachments = self.transit_gateways_attachments.values()
|
||||
transit_gateway_attachments = list(self.transit_gateway_attachments.values())
|
||||
|
||||
attr_pairs = (
|
||||
("resource-id", "resource_id"),
|
||||
@ -6306,28 +6396,25 @@ class TransitGatewayAttachmentBackend(object):
|
||||
("transit-gateway-id", "transit_gateway_id"),
|
||||
)
|
||||
|
||||
if transit_gateways_attachment_ids:
|
||||
transit_gateways_attachments = [
|
||||
if (
|
||||
not transit_gateways_attachment_ids == []
|
||||
and transit_gateways_attachment_ids is not None
|
||||
):
|
||||
transit_gateway_attachments = [
|
||||
transit_gateways_attachment
|
||||
for transit_gateways_attachment in transit_gateways_attachments
|
||||
for transit_gateways_attachment in transit_gateway_attachments
|
||||
if transit_gateways_attachment.id in transit_gateways_attachment_ids
|
||||
]
|
||||
|
||||
result = transit_gateway_attachments
|
||||
if filters:
|
||||
for attrs in attr_pairs:
|
||||
values = filters.get(attrs[0]) or None
|
||||
if values is not None:
|
||||
transit_gateways_attachments = [
|
||||
transit_gateways_attachment
|
||||
for transit_gateways_attachment in transit_gateways_attachments
|
||||
if getattr(transit_gateways_attachment, attrs[1]) in values
|
||||
]
|
||||
return transit_gateways_attachments
|
||||
result = filter_resources(transit_gateway_attachments, filters, attr_pairs)
|
||||
return result
|
||||
|
||||
def describe_transit_gateway_vpc_attachments(
|
||||
self, transit_gateways_attachment_ids=None, filters=None, max_results=0
|
||||
):
|
||||
transit_gateways_attachments = self.transit_gateways_attachments.values()
|
||||
transit_gateway_attachments = list(self.transit_gateway_attachments.values())
|
||||
|
||||
attr_pairs = (
|
||||
("state", "state"),
|
||||
@ -6340,23 +6427,155 @@ class TransitGatewayAttachmentBackend(object):
|
||||
not transit_gateways_attachment_ids == []
|
||||
and transit_gateways_attachment_ids is not None
|
||||
):
|
||||
transit_gateways_attachments = [
|
||||
transit_gateway_attachments = [
|
||||
transit_gateways_attachment
|
||||
for transit_gateways_attachment in transit_gateways_attachments
|
||||
for transit_gateways_attachment in transit_gateway_attachments
|
||||
if transit_gateways_attachment.id in transit_gateways_attachment_ids
|
||||
]
|
||||
|
||||
result = transit_gateway_attachments
|
||||
if filters:
|
||||
for attrs in attr_pairs:
|
||||
values = filters.get(attrs[0]) or None
|
||||
if values is not None:
|
||||
transit_gateways_attachments = [
|
||||
transit_gateways_attachment
|
||||
for transit_gateways_attachment in transit_gateways_attachments
|
||||
if getattr(transit_gateways_attachment, attrs[1]) in values
|
||||
]
|
||||
result = filter_resources(transit_gateway_attachments, filters, attr_pairs)
|
||||
return result
|
||||
|
||||
return transit_gateways_attachments
|
||||
def delete_transit_gateway_vpc_attachment(self, transit_gateway_attachment_id=None):
|
||||
transit_gateway_attachment = self.transit_gateway_attachments.pop(
|
||||
transit_gateway_attachment_id
|
||||
)
|
||||
transit_gateway_attachment.state = "deleted"
|
||||
return transit_gateway_attachment
|
||||
|
||||
def modify_transit_gateway_vpc_attachment(
|
||||
self,
|
||||
add_subnet_ids=None,
|
||||
options=None,
|
||||
remove_subnet_ids=None,
|
||||
transit_gateway_attachment_id=None,
|
||||
):
|
||||
|
||||
tgw_attachment = self.transit_gateway_attachments[transit_gateway_attachment_id]
|
||||
if remove_subnet_ids:
|
||||
tgw_attachment.subnet_ids = [
|
||||
id for id in tgw_attachment.subnet_ids if id not in remove_subnet_ids
|
||||
]
|
||||
|
||||
if options:
|
||||
tgw_attachment.options.update(options)
|
||||
|
||||
if add_subnet_ids:
|
||||
for id in add_subnet_ids:
|
||||
tgw_attachment.subnet_ids.append(id)
|
||||
|
||||
return tgw_attachment
|
||||
|
||||
def set_attachment_association(
|
||||
self, transit_gateway_attachment_id=None, transit_gateway_route_table_id=None
|
||||
):
|
||||
self.transit_gateway_attachments[transit_gateway_attachment_id].association = {
|
||||
"state": "associated",
|
||||
"transitGatewayRouteTableId": transit_gateway_route_table_id,
|
||||
}
|
||||
|
||||
def set_attachment_propagation(
|
||||
self, transit_gateway_attachment_id=None, transit_gateway_route_table_id=None
|
||||
):
|
||||
self.transit_gateway_attachments[transit_gateway_attachment_id].propagation = {
|
||||
"state": "enabled",
|
||||
"transitGatewayRouteTableId": transit_gateway_route_table_id,
|
||||
}
|
||||
|
||||
def disable_attachment_propagation(self, transit_gateway_attachment_id=None):
|
||||
self.transit_gateway_attachments[transit_gateway_attachment_id].propagation[
|
||||
"state"
|
||||
] = "disabled"
|
||||
|
||||
|
||||
class TransitGatewayRelations(object):
|
||||
# this class is for TransitGatewayAssociation and TransitGatewayPropagation
|
||||
def __init__(
|
||||
self,
|
||||
backend,
|
||||
transit_gateway_attachment_id=None,
|
||||
transit_gateway_route_table_id=None,
|
||||
state=None,
|
||||
):
|
||||
self.ec2_backend = backend
|
||||
self.transit_gateway_attachment_id = transit_gateway_attachment_id
|
||||
self.transit_gateway_route_table_id = transit_gateway_route_table_id
|
||||
self.resource_id = backend.transit_gateway_attachments[
|
||||
transit_gateway_attachment_id
|
||||
].resource_id
|
||||
self.resource_type = backend.transit_gateway_attachments[
|
||||
transit_gateway_attachment_id
|
||||
].resource_type
|
||||
self.state = state
|
||||
|
||||
|
||||
class TransitGatewayRelationsBackend(object):
|
||||
def __init__(self):
|
||||
self.transit_gateway_associations = {}
|
||||
self.transit_gateway_propagations = {}
|
||||
super(TransitGatewayRelationsBackend, self).__init__()
|
||||
|
||||
def associate_transit_gateway_route_table(
|
||||
self, transit_gateway_attachment_id=None, transit_gateway_route_table_id=None
|
||||
):
|
||||
transit_gateway_association = TransitGatewayRelations(
|
||||
self,
|
||||
transit_gateway_attachment_id,
|
||||
transit_gateway_route_table_id,
|
||||
state="associated",
|
||||
)
|
||||
self.set_route_table_association(
|
||||
transit_gateway_attachment_id, transit_gateway_route_table_id
|
||||
)
|
||||
self.set_attachment_association(
|
||||
transit_gateway_attachment_id, transit_gateway_route_table_id
|
||||
)
|
||||
self.transit_gateway_associations[
|
||||
transit_gateway_attachment_id
|
||||
] = transit_gateway_association
|
||||
|
||||
return transit_gateway_association
|
||||
|
||||
def enable_transit_gateway_route_table_propagation(
|
||||
self, transit_gateway_attachment_id=None, transit_gateway_route_table_id=None
|
||||
):
|
||||
transit_gateway_propagation = TransitGatewayRelations(
|
||||
self,
|
||||
transit_gateway_attachment_id,
|
||||
transit_gateway_route_table_id,
|
||||
state="enabled",
|
||||
)
|
||||
self.set_route_table_propagation(
|
||||
transit_gateway_attachment_id, transit_gateway_route_table_id
|
||||
)
|
||||
self.set_attachment_propagation(
|
||||
transit_gateway_attachment_id, transit_gateway_route_table_id
|
||||
)
|
||||
self.transit_gateway_propagations[
|
||||
transit_gateway_attachment_id
|
||||
] = transit_gateway_propagation
|
||||
|
||||
return transit_gateway_propagation
|
||||
|
||||
def disable_transit_gateway_route_table_propagation(
|
||||
self, transit_gateway_attachment_id=None, transit_gateway_route_table_id=None
|
||||
):
|
||||
self.disable_route_table_propagation(
|
||||
transit_gateway_route_table_id=transit_gateway_route_table_id
|
||||
)
|
||||
self.disable_attachment_propagation(
|
||||
transit_gateway_attachment_id=transit_gateway_attachment_id
|
||||
)
|
||||
self.transit_gateway_propagations[
|
||||
transit_gateway_attachment_id
|
||||
].state = "disabled"
|
||||
transit_gateway_propagation = self.transit_gateway_propagations.pop(
|
||||
transit_gateway_attachment_id
|
||||
)
|
||||
|
||||
return transit_gateway_propagation
|
||||
|
||||
|
||||
class NatGateway(CloudFormationModel):
|
||||
@ -6721,6 +6940,7 @@ class EC2Backend(
|
||||
TransitGatewayBackend,
|
||||
TransitGatewayRouteTableBackend,
|
||||
TransitGatewayAttachmentBackend,
|
||||
TransitGatewayRelationsBackend,
|
||||
LaunchTemplateBackend,
|
||||
IamInstanceProfileAssociationBackend,
|
||||
):
|
||||
|
@ -41,6 +41,21 @@ class TransitGatewayAttachment(BaseResponse):
|
||||
transit_gateway_vpc_attachments=transit_gateway_vpc_attachments
|
||||
)
|
||||
|
||||
def modify_transit_gateway_vpc_attachment(self):
|
||||
add_subnet_ids = self._get_multi_param("AddSubnetIds")
|
||||
options = self._get_multi_param_dict("Options")
|
||||
remove_subnet_ids = self._get_multi_param("RemoveSubnetIds")
|
||||
transit_gateway_attachment_id = self._get_param("TransitGatewayAttachmentId")
|
||||
|
||||
transit_gateway_attachment = self.ec2_backend.modify_transit_gateway_vpc_attachment(
|
||||
add_subnet_ids=add_subnet_ids,
|
||||
options=options,
|
||||
remove_subnet_ids=remove_subnet_ids,
|
||||
transit_gateway_attachment_id=transit_gateway_attachment_id,
|
||||
)
|
||||
template = self.response_template(MODIFY_TRANSIT_GATEWAY_VPC_ATTACHMENTS)
|
||||
return template.render(transit_gateway_attachment=transit_gateway_attachment)
|
||||
|
||||
def describe_transit_gateway_attachments(self):
|
||||
transit_gateways_attachment_ids = self._get_multi_param(
|
||||
"TransitGatewayAttachmentIds"
|
||||
@ -55,6 +70,44 @@ class TransitGatewayAttachment(BaseResponse):
|
||||
template = self.response_template(DESCRIBE_TRANSIT_GATEWAY_ATTACHMENTS)
|
||||
return template.render(transit_gateway_attachments=transit_gateway_attachments)
|
||||
|
||||
def delete_transit_gateway_vpc_attachment(self):
|
||||
transit_gateway_attachment_id = self._get_param("TransitGatewayAttachmentId")
|
||||
transit_gateway_attachment = self.ec2_backend.delete_transit_gateway_vpc_attachment(
|
||||
transit_gateway_attachment_id=transit_gateway_attachment_id
|
||||
)
|
||||
template = self.response_template(DELETE_TRANSIT_GATEWAY_VPC_ATTACHMENTS)
|
||||
return template.render(transit_gateway_attachment=transit_gateway_attachment)
|
||||
|
||||
def associate_transit_gateway_route_table(self):
|
||||
transit_gateway_attachment_id = self._get_param("TransitGatewayAttachmentId")
|
||||
transit_gateway_route_table_id = self._get_param("TransitGatewayRouteTableId")
|
||||
transit_gateway_association = self.ec2_backend.associate_transit_gateway_route_table(
|
||||
transit_gateway_attachment_id=transit_gateway_attachment_id,
|
||||
transit_gateway_route_table_id=transit_gateway_route_table_id,
|
||||
)
|
||||
template = self.response_template(TRANSIT_GATEWAY_ASSOCIATION)
|
||||
return template.render(transit_gateway_association=transit_gateway_association)
|
||||
|
||||
def enable_transit_gateway_route_table_propagation(self):
|
||||
transit_gateway_attachment_id = self._get_param("TransitGatewayAttachmentId")
|
||||
transit_gateway_route_table_id = self._get_param("TransitGatewayRouteTableId")
|
||||
transit_gateway_propagation = self.ec2_backend.enable_transit_gateway_route_table_propagation(
|
||||
transit_gateway_attachment_id=transit_gateway_attachment_id,
|
||||
transit_gateway_route_table_id=transit_gateway_route_table_id,
|
||||
)
|
||||
template = self.response_template(TRANSIT_GATEWAY_PROPAGATION)
|
||||
return template.render(transit_gateway_propagation=transit_gateway_propagation)
|
||||
|
||||
def disable_transit_gateway_route_table_propagation(self):
|
||||
transit_gateway_attachment_id = self._get_param("TransitGatewayAttachmentId")
|
||||
transit_gateway_route_table_id = self._get_param("TransitGatewayRouteTableId")
|
||||
transit_gateway_propagation = self.ec2_backend.disable_transit_gateway_route_table_propagation(
|
||||
transit_gateway_attachment_id=transit_gateway_attachment_id,
|
||||
transit_gateway_route_table_id=transit_gateway_route_table_id,
|
||||
)
|
||||
template = self.response_template(TRANSIT_GATEWAY_PROPAGATION)
|
||||
return template.render(transit_gateway_propagation=transit_gateway_propagation)
|
||||
|
||||
|
||||
CREATE_TRANSIT_GATEWAY_VPC_ATTACHMENT = """<CreateTransitGatewayVpcAttachmentResponse xmlns="http://ec2.amazonaws.com/doc/2016-11-15/">
|
||||
<requestId>9b5766ac-2af6-4b92-9a8a-4d74ae46ae79</requestId>
|
||||
@ -153,3 +206,91 @@ DESCRIBE_TRANSIT_GATEWAY_VPC_ATTACHMENTS = """<DescribeTransitGatewayVpcAttachme
|
||||
</transitGatewayVpcAttachments>
|
||||
</DescribeTransitGatewayVpcAttachmentsResponse>
|
||||
"""
|
||||
|
||||
|
||||
MODIFY_TRANSIT_GATEWAY_VPC_ATTACHMENTS = """<ModifyTransitGatewayVpcAttachmentResponse xmlns="http://ec2.amazonaws.com/doc/2016-11-15/">
|
||||
<requestId>9b5766ac-2af6-4b92-9a8a-4d74ae46ae79</requestId>
|
||||
<transitGatewayVpcAttachment>
|
||||
<createTime>{{ transit_gateway_attachment.create_time }}</createTime>
|
||||
<options>
|
||||
<applianceModeSupport>{{ transit_gateway_attachment.options.ApplianceModeSupport }}</applianceModeSupport>
|
||||
<dnsSupport>{{ transit_gateway_attachment.options.DnsSupport }}</dnsSupport>
|
||||
<ipv6Support>{{ transit_gateway_attachment.options.Ipv6Support }}</ipv6Support>
|
||||
</options>
|
||||
<state>{{ transit_gateway_attachment.state }}</state>
|
||||
<subnetIds>
|
||||
{% for subnet_id in transit_gateway_attachment.subnet_ids %}
|
||||
<item>{{ subnet_id }}</item>
|
||||
{% endfor %}
|
||||
</subnetIds>
|
||||
<tagSet>
|
||||
{% for tag in transit_gateway_attachment.get_tags() %}
|
||||
<item>
|
||||
<key>{{ tag.key }}</key>
|
||||
<value>{{ tag.value }}</value>
|
||||
</item>
|
||||
{% endfor %}
|
||||
</tagSet>
|
||||
<transitGatewayAttachmentId>{{ transit_gateway_attachment.id }}</transitGatewayAttachmentId>
|
||||
<transitGatewayId>{{ transit_gateway_attachment.transit_gateway_id }}</transitGatewayId>
|
||||
<vpcId>{{ transit_gateway_attachment.vpc_id }}</vpcId>
|
||||
<vpcOwnerId>{{ transit_gateway_attachment.resource_owner_id }}</vpcOwnerId>
|
||||
</transitGatewayVpcAttachment>
|
||||
</ModifyTransitGatewayVpcAttachmentResponse>"""
|
||||
|
||||
|
||||
DELETE_TRANSIT_GATEWAY_VPC_ATTACHMENTS = """<DeleteTransitGatewayVpcAttachmentResponse xmlns="http://ec2.amazonaws.com/doc/2016-11-15/">
|
||||
<requestId>9b5766ac-2af6-4b92-9a8a-4d74ae46ae79</requestId>
|
||||
<transitGatewayVpcAttachment>
|
||||
<createTime>{{ transit_gateway_attachment.create_time }}</createTime>
|
||||
<options>
|
||||
<applianceModeSupport>{{ transit_gateway_attachment.options.ApplianceModeSupport }}</applianceModeSupport>
|
||||
<dnsSupport>{{ transit_gateway_attachment.options.DnsSupport }}</dnsSupport>
|
||||
<ipv6Support>{{ transit_gateway_attachment.options.Ipv6Support }}</ipv6Support>
|
||||
</options>
|
||||
<state>{{ transit_gateway_attachment.state }}</state>
|
||||
<subnetIds>
|
||||
{% for subnet_id in transit_gateway_attachment.subnet_ids %}
|
||||
<item>{{ subnet_id }}</item>
|
||||
{% endfor %}
|
||||
</subnetIds>
|
||||
<tagSet>
|
||||
{% for tag in transit_gateway_attachment.get_tags() %}
|
||||
<item>
|
||||
<key>{{ tag.key }}</key>
|
||||
<value>{{ tag.value }}</value>
|
||||
</item>
|
||||
{% endfor %}
|
||||
</tagSet>
|
||||
<transitGatewayAttachmentId>{{ transit_gateway_attachment.id }}</transitGatewayAttachmentId>
|
||||
<transitGatewayId>{{ transit_gateway_attachment.transit_gateway_id }}</transitGatewayId>
|
||||
<vpcId>{{ transit_gateway_attachment.vpc_id }}</vpcId>
|
||||
<vpcOwnerId>{{ transit_gateway_attachment.resource_owner_id }}</vpcOwnerId>
|
||||
</transitGatewayVpcAttachment>
|
||||
</DeleteTransitGatewayVpcAttachmentResponse>"""
|
||||
|
||||
|
||||
TRANSIT_GATEWAY_ASSOCIATION = """<AssociateTransitGatewayRouteTableResponse xmlns="http://ec2.amazonaws.com/doc/2016-11-15/">
|
||||
<requestId>86a597cf-93ec-44a3-9559-4641863642a5</requestId>
|
||||
<association>
|
||||
<resourceId>{{ transit_gateway_association.resource_id }}</resourceId>
|
||||
<resourceType>{{ transit_gateway_association.resource_type }}</resourceType>
|
||||
<state>{{ transit_gateway_association.state }}</state>
|
||||
<transitGatewayAttachmentId>{{ transit_gateway_association.transit_gateway_attachment_id }}</transitGatewayAttachmentId>
|
||||
<transitGatewayRouteTableId>{{ transit_gateway_association.transit_gateway_route_table_id }}</transitGatewayRouteTableId>
|
||||
</association>
|
||||
</AssociateTransitGatewayRouteTableResponse>
|
||||
"""
|
||||
|
||||
|
||||
TRANSIT_GATEWAY_PROPAGATION = """<EnableTransitGatewayRouteTablePropagationResponse xmlns="http://ec2.amazonaws.com/doc/2016-11-15/">
|
||||
<requestId>c78427d4-e498-46ae-bc14-32841b16bff4</requestId>
|
||||
<propagation>
|
||||
<resourceId>{{ transit_gateway_propagation.resource_id }}</resourceId>
|
||||
<resourceType>{{ transit_gateway_propagation.resource_type }}</resourceType>
|
||||
<state>{{ transit_gateway_propagation.state }}</state>
|
||||
<transitGatewayAttachmentId>{{ transit_gateway_propagation.transit_gateway_attachment_id }}</transitGatewayAttachmentId>
|
||||
<transitGatewayRouteTableId>{{ transit_gateway_propagation.transit_gateway_route_table_id }}</transitGatewayRouteTableId>
|
||||
</propagation>
|
||||
</EnableTransitGatewayRouteTablePropagationResponse>
|
||||
"""
|
||||
|
@ -20,11 +20,11 @@ class TransitGatewayRouteTable(BaseResponse):
|
||||
|
||||
def describe_transit_gateway_route_tables(self):
|
||||
filters = filters_from_querystring(self.querystring)
|
||||
transit_gateway_ids = (
|
||||
transit_gateway_route_table_ids = (
|
||||
self._get_multi_param("TransitGatewayRouteTableIds") or None
|
||||
)
|
||||
transit_gateway_route_tables = self.ec2_backend.get_all_transit_gateway_route_tables(
|
||||
transit_gateway_ids, filters
|
||||
transit_gateway_route_table_ids, filters
|
||||
)
|
||||
template = self.response_template(DESCRIBE_TRANSIT_GATEWAY_ROUTE_TABLE_RESPONSE)
|
||||
return template.render(
|
||||
@ -83,6 +83,32 @@ class TransitGatewayRouteTable(BaseResponse):
|
||||
template = self.response_template(SEARCH_TRANSIT_GATEWAY_ROUTES_RESPONSE)
|
||||
return template.render(transit_gateway_routes=transit_gateway_routes)
|
||||
|
||||
def get_transit_gateway_route_table_associations(self):
|
||||
transit_gateway_route_table_id = self._get_param("TransitGatewayRouteTableId")
|
||||
filters = filters_from_querystring(self.querystring)
|
||||
transit_gateway_route_table_associations = self.ec2_backend.get_all_transit_gateway_route_table_associations(
|
||||
transit_gateway_route_table_id, filters
|
||||
)
|
||||
template = self.response_template(
|
||||
GET_TRANSIT_GATEWAY_ROUTE_TABLE_ASSOCIATIONS_RESPONSE
|
||||
)
|
||||
return template.render(
|
||||
transit_gateway_route_table_associations=transit_gateway_route_table_associations
|
||||
)
|
||||
|
||||
def get_transit_gateway_route_table_propagations(self):
|
||||
transit_gateway_route_table_id = self._get_param("TransitGatewayRouteTableId")
|
||||
filters = filters_from_querystring(self.querystring)
|
||||
transit_gateway_route_table_propagations = self.ec2_backend.get_all_transit_gateway_route_table_propagations(
|
||||
transit_gateway_route_table_id, filters
|
||||
)
|
||||
template = self.response_template(
|
||||
GET_TRANSIT_GATEWAY_ROUTE_TABLE_PROPAGATIONS_RESPONSE
|
||||
)
|
||||
return template.render(
|
||||
transit_gateway_route_table_propagations=transit_gateway_route_table_propagations
|
||||
)
|
||||
|
||||
|
||||
CREATE_TRANSIT_GATEWAY_ROUTE_TABLE_RESPONSE = """<CreateTransitGatewayRouteTableResponse xmlns="http://ec2.amazonaws.com/doc/2016-11-15/">
|
||||
<requestId>3a495d25-08d4-466d-822e-477c9b1fc606</requestId>
|
||||
@ -133,16 +159,12 @@ DESCRIBE_TRANSIT_GATEWAY_ROUTE_TABLE_RESPONSE = """<DescribeTransitGatewayRouteT
|
||||
DELETE_TRANSIT_GATEWAY_ROUTE_TABLE_RESPONSE = """<DeleteTransitGatewayRouteTableResponse xmlns="http://ec2.amazonaws.com/doc/2016-11-15/">
|
||||
<requestId>a9a07226-c7b1-4305-9934-0bcfc3ef1c5e</requestId>
|
||||
<transitGatewayRouteTable>
|
||||
{% for transit_gateway_route_table in transit_gateway_route_tables %}
|
||||
<item>
|
||||
<creationTime>{{ transit_gateway_route_table.create_time }}</creationTime>
|
||||
<defaultAssociationRouteTable>{{ transit_gateway_route_table.default_association_route_table }}</defaultAssociationRouteTable>
|
||||
<defaultPropagationRouteTable>{{ transit_gateway_route_table.default_propagation_route_table }}</defaultPropagationRouteTable>
|
||||
<state>{{ transit_gateway_route_table.state }}</state>
|
||||
<transitGatewayId>{{ transit_gateway_route_table.transit_gateway_id }}</transitGatewayId>
|
||||
<transitGatewayRouteTableId>{{ transit_gateway_route_table.id }}</transitGatewayRouteTableId>
|
||||
</item>
|
||||
{% endfor %}
|
||||
<creationTime>{{ transit_gateway_route_table.create_time }}</creationTime>
|
||||
<defaultAssociationRouteTable>{{ transit_gateway_route_table.default_association_route_table }}</defaultAssociationRouteTable>
|
||||
<defaultPropagationRouteTable>{{ transit_gateway_route_table.default_propagation_route_table }}</defaultPropagationRouteTable>
|
||||
<state>{{ transit_gateway_route_table.state }}</state>
|
||||
<transitGatewayId>{{ transit_gateway_route_table.transit_gateway_id }}</transitGatewayId>
|
||||
<transitGatewayRouteTableId>{{ transit_gateway_route_table.id }}</transitGatewayRouteTableId>
|
||||
</transitGatewayRouteTable>
|
||||
</DeleteTransitGatewayRouteTableResponse>
|
||||
"""
|
||||
@ -152,9 +174,18 @@ CREATE_TRANSIT_GATEWAY_ROUTE_RESPONSE = """<?xml version="1.0" encoding="UTF-8"?
|
||||
<CreateTransitGatewayRouteResponse xmlns="http://ec2.amazonaws.com/doc/2016-11-15/">
|
||||
<requestId>072b02ce-df3a-4de6-a20b-6653ae4b91a4</requestId>
|
||||
<route>
|
||||
<destinationCidrBlock>{{ transit_gateway_route_table.routes[destination_cidr_block]['destinationCidrBlock'] }}</destinationCidrBlock>
|
||||
<state>{{ transit_gateway_route_table.routes[destination_cidr_block]['state'] }}</state>
|
||||
<type>{{ transit_gateway_route_table.routes[destination_cidr_block]['type'] }}</type>
|
||||
<destinationCidrBlock>{{ transit_gateway_route_table.destinationCidrBlock }}</destinationCidrBlock>
|
||||
<state>{{ transit_gateway_route_table.state }}</state>
|
||||
<type>{{ transit_gateway_route_table.type }}</type>
|
||||
<transitGatewayAttachments>
|
||||
{% if transit_gateway_route_table.state != 'blackhole' and transit_gateway_route_table.transitGatewayAttachments %}
|
||||
<item>
|
||||
<resourceId>{{ transit_gateway_route_table.transitGatewayAttachments.resourceId }}</resourceId>
|
||||
<resourceType>{{ transit_gateway_route_table.transitGatewayAttachments.resourceType }}</resourceType>
|
||||
<transitGatewayAttachmentId>{{ transit_gateway_route_table.transitGatewayAttachments.transitGatewayAttachmentId }}</transitGatewayAttachmentId>
|
||||
</item>
|
||||
{% endif %}
|
||||
</transitGatewayAttachments>
|
||||
</route>
|
||||
</CreateTransitGatewayRouteResponse>
|
||||
"""
|
||||
@ -163,9 +194,9 @@ DELETE_TRANSIT_GATEWAY_ROUTE_RESPONSE = """<?xml version="1.0" encoding="UTF-8"?
|
||||
<DeleteTransitGatewayRouteResponse xmlns="http://ec2.amazonaws.com/doc/2016-11-15/">
|
||||
<requestId>2109d5bb-f874-4f35-b419-4723792a638f</requestId>
|
||||
<route>
|
||||
<destinationCidrBlock>{{ transit_gateway_route_table.routes[destination_cidr_block]['destinationCidrBlock'] }}</destinationCidrBlock>
|
||||
<state>{{ transit_gateway_route_table.routes[destination_cidr_block]['state'] }}</state>
|
||||
<type>{{ transit_gateway_route_table.routes[destination_cidr_block]['type'] }}</type>
|
||||
<destinationCidrBlock>{{ transit_gateway_route_table.routes[destination_cidr_block].destinationCidrBlock }}</destinationCidrBlock>
|
||||
<state>{{ transit_gateway_route_table.routes[destination_cidr_block].state }}</state>
|
||||
<type>{{ transit_gateway_route_table.routes[destination_cidr_block].type }}</type>
|
||||
</route>
|
||||
</DeleteTransitGatewayRouteResponse>
|
||||
"""
|
||||
@ -176,12 +207,49 @@ SEARCH_TRANSIT_GATEWAY_ROUTES_RESPONSE = """<?xml version="1.0" encoding="UTF-8"
|
||||
<routeSet>
|
||||
{% for route in transit_gateway_routes %}
|
||||
<item>
|
||||
<destinationCidrBlock>{{ route['destinationCidrBlock'] }}</destinationCidrBlock>
|
||||
<state>{{ route['state'] }}</state>
|
||||
<type>{{ route['type'] }}</type>
|
||||
<destinationCidrBlock>{{ transit_gateway_routes[route].destinationCidrBlock }}</destinationCidrBlock>
|
||||
<state>{{ transit_gateway_routes[route].state }}</state>
|
||||
<type>{{ transit_gateway_routes[route].type }}</type>
|
||||
{% if transit_gateway_routes[route].get('transitGatewayAttachments') %}
|
||||
<transitGatewayAttachments>
|
||||
<item>
|
||||
<resourceId>{{ transit_gateway_routes[route].transitGatewayAttachments.resourceId }}</resourceId>
|
||||
<resourceType>{{ transit_gateway_routes[route].transitGatewayAttachments.resourceType }}</resourceType>
|
||||
<transitGatewayAttachmentId>{{ transit_gateway_routes[route].transitGatewayAttachments.transitGatewayAttachmentId }}</transitGatewayAttachmentId>
|
||||
</item>
|
||||
</transitGatewayAttachments>
|
||||
{% endif %}
|
||||
</item>
|
||||
{% endfor %}
|
||||
</routeSet>
|
||||
<additionalRoutesAvailable>false</additionalRoutesAvailable>
|
||||
</SearchTransitGatewayRoutesResponse>
|
||||
"""
|
||||
|
||||
GET_TRANSIT_GATEWAY_ROUTE_TABLE_ASSOCIATIONS_RESPONSE = """<GetTransitGatewayRouteTableAssociationsResponse xmlns="http://ec2.amazonaws.com/doc/2016-11-15/">
|
||||
<requestId>92fdc91d-c374-4217-b2b4-33f2fb0a2be7</requestId>
|
||||
<associations>
|
||||
{% for route_table in transit_gateway_route_table_associations %}
|
||||
<item>
|
||||
<resourceId>{{ route_table.route_table_association.resourceId }}</resourceId>
|
||||
<resourceType>{{ route_table.route_table_association.resourceType }}</resourceType>
|
||||
<state>{{ route_table.route_table_association.state }}</state>
|
||||
<transitGatewayAttachmentId>{{ route_table.route_table_association.transitGatewayAttachmentId }}</transitGatewayAttachmentId>
|
||||
</item>
|
||||
{% endfor %}
|
||||
</associations>
|
||||
</GetTransitGatewayRouteTableAssociationsResponse>"""
|
||||
|
||||
GET_TRANSIT_GATEWAY_ROUTE_TABLE_PROPAGATIONS_RESPONSE = """<GetTransitGatewayRouteTablePropagationsResponse xmlns="http://ec2.amazonaws.com/doc/2016-11-15/">
|
||||
<requestId>541bc42d-9ed9-4aef-a5f7-2ea32fbdec16</requestId>
|
||||
<transitGatewayRouteTablePropagations>
|
||||
{% for route_table in transit_gateway_route_table_propagations %}
|
||||
<item>
|
||||
<resourceId>{{ route_table.route_table_propagation.resourceId }}</resourceId>
|
||||
<resourceType>{{ route_table.route_table_propagation.resourceType }}</resourceType>
|
||||
<state>{{ route_table.route_table_propagation.state }}</state>
|
||||
<transitGatewayAttachmentId>{{ route_table.route_table_propagation.transitGatewayAttachmentId }}</transitGatewayAttachmentId>
|
||||
</item>
|
||||
{% endfor %}
|
||||
</transitGatewayRouteTablePropagations>
|
||||
</GetTransitGatewayRouteTablePropagationsResponse>"""
|
||||
|
@ -14,6 +14,21 @@ class TransitGateways(BaseResponse):
|
||||
transit_gateway = self.ec2_backend.create_transit_gateway(
|
||||
description=description, options=options, tags=tags
|
||||
)
|
||||
|
||||
# creating default route table
|
||||
transit_gateway_route_table = self.ec2_backend.create_transit_gateway_route_table(
|
||||
transit_gateway_id=transit_gateway.id,
|
||||
tags={},
|
||||
default_association_route_table=True,
|
||||
default_propagation_route_table=True,
|
||||
)
|
||||
transit_gateway.options[
|
||||
"AssociationDefaultRouteTableId"
|
||||
] = transit_gateway_route_table.id
|
||||
transit_gateway.options[
|
||||
"PropagationDefaultRouteTableId"
|
||||
] = transit_gateway_route_table.id
|
||||
|
||||
template = self.response_template(CREATE_TRANSIT_GATEWAY_RESPONSE)
|
||||
return template.render(transit_gateway=transit_gateway)
|
||||
|
||||
|
@ -34,3 +34,21 @@ def merge_multiple_dicts(*args):
|
||||
for d in args:
|
||||
result.update(d)
|
||||
return result
|
||||
|
||||
|
||||
def filter_resources(resources, filters, attr_pairs):
|
||||
"""
|
||||
Used to filter resources. Usually in get and describe apis.
|
||||
"""
|
||||
result = resources.copy()
|
||||
for resource in resources:
|
||||
for attrs in attr_pairs:
|
||||
values = filters.get(attrs[0]) or None
|
||||
if values:
|
||||
instance = getattr(resource, attrs[1])
|
||||
if (len(attrs) <= 2 and instance not in values) or (
|
||||
len(attrs) == 3 and instance.get(attrs[2]) not in values
|
||||
):
|
||||
result.remove(resource)
|
||||
break
|
||||
return result
|
||||
|
@ -2,10 +2,7 @@ TestAccAWSEc2TransitGatewayDxGatewayAttachmentDataSource
|
||||
TestAccAWSEc2TransitGatewayPeeringAttachment
|
||||
TestAccAWSEc2TransitGatewayPeeringAttachmentAccepter
|
||||
TestAccAWSEc2TransitGatewayPeeringAttachmentDataSource
|
||||
TestAccAWSEc2TransitGatewayRoute
|
||||
TestAccAWSEc2TransitGatewayRouteTableAssociation
|
||||
TestAccAWSEc2TransitGatewayRouteTablePropagation
|
||||
TestAccAWSEc2TransitGatewayVpcAttachment
|
||||
TestAccAWSEc2TransitGatewayVpcAttachmentDataSource
|
||||
TestAccAWSFms
|
||||
TestAccAWSIAMRolePolicy
|
@ -26,10 +26,18 @@ TestAccAWSEc2InstanceTypeOfferingDataSource
|
||||
TestAccAWSEc2InstanceTypeOfferingsDataSource
|
||||
TestAccAWSEc2Tag
|
||||
TestAccAWSEc2TransitGateway
|
||||
TestAccAWSEc2TransitGatewayRoute
|
||||
TestAccAWSEc2TransitGatewayDataSource
|
||||
TestAccAWSEc2TransitGatewayRouteTable
|
||||
TestAccAWSEc2TransitGatewayRouteTableDataSource
|
||||
TestAccAWSEc2TransitGatewayRouteTablePropagation
|
||||
TestAccAWSEc2TransitGatewayVpcAttachment_basic
|
||||
TestAccAWSEc2TransitGatewayVpcAttachment_disappears
|
||||
TestAccAWSEc2TransitGatewayVpcAttachment_ApplianceModeSupport
|
||||
TestAccAWSEc2TransitGatewayVpcAttachment_DnsSupport
|
||||
TestAccAWSEc2TransitGatewayVpcAttachment_SharedTransitGateway
|
||||
TestAccAWSEc2TransitGatewayVpcAttachmentAccepter
|
||||
TestAccAWSEc2TransitGatewayVpcAttachmentDataSource
|
||||
TestAccAWSEc2TransitGatewayVpnAttachmentDataSource
|
||||
TestAccAWSElasticBeanstalkSolutionStackDataSource
|
||||
TestAccAWSElbHostedZoneId
|
||||
|
@ -194,8 +194,7 @@ def test_create_transit_gateway_route_table():
|
||||
table.should.have.key("Tags").equals([])
|
||||
|
||||
tables = ec2.describe_transit_gateway_route_tables()["TransitGatewayRouteTables"]
|
||||
tables.should.have.length_of(1)
|
||||
tables[0].should.equal(table)
|
||||
tables.should.have.length_of(2)
|
||||
|
||||
|
||||
@mock_ec2
|
||||
@ -235,14 +234,16 @@ def test_delete_transit_gateway_route_table():
|
||||
]
|
||||
|
||||
tables = ec2.describe_transit_gateway_route_tables()["TransitGatewayRouteTables"]
|
||||
tables.should.have.length_of(1)
|
||||
tables.should.have.length_of(2)
|
||||
|
||||
ec2.delete_transit_gateway_route_table(
|
||||
table = ec2.delete_transit_gateway_route_table(
|
||||
TransitGatewayRouteTableId=table["TransitGatewayRouteTableId"]
|
||||
)
|
||||
|
||||
table["TransitGatewayRouteTable"].should.have.key("State").equals("deleted")
|
||||
|
||||
tables = ec2.describe_transit_gateway_route_tables()["TransitGatewayRouteTables"]
|
||||
tables.should.have.length_of(0)
|
||||
tables.should.have.length_of(2)
|
||||
|
||||
|
||||
@mock_ec2
|
||||
@ -278,7 +279,7 @@ def test_create_transit_gateway_route():
|
||||
)["Route"]
|
||||
|
||||
route.should.have.key("DestinationCidrBlock").equal("0.0.0.0")
|
||||
route.should.have.key("Type").equal("TODO")
|
||||
route.should.have.key("Type").equal("static")
|
||||
route.should.have.key("State").equal("active")
|
||||
|
||||
|
||||
@ -299,7 +300,7 @@ def test_create_transit_gateway_route_as_blackhole():
|
||||
)["Route"]
|
||||
|
||||
route.should.have.key("DestinationCidrBlock").equal("192.168.0.1")
|
||||
route.should.have.key("Type").equal("TODO")
|
||||
route.should.have.key("Type").equal("static")
|
||||
route.should.have.key("State").equal("blackhole")
|
||||
|
||||
|
||||
@ -329,7 +330,7 @@ def test_search_transit_gateway_routes_by_state():
|
||||
)["Routes"]
|
||||
|
||||
routes.should.equal(
|
||||
[{"DestinationCidrBlock": "192.168.0.0", "Type": "TODO", "State": "active"}]
|
||||
[{"DestinationCidrBlock": "192.168.0.0", "Type": "static", "State": "active"}]
|
||||
)
|
||||
|
||||
routes = ec2.search_transit_gateway_routes(
|
||||
@ -338,7 +339,13 @@ def test_search_transit_gateway_routes_by_state():
|
||||
)["Routes"]
|
||||
|
||||
routes.should.equal(
|
||||
[{"DestinationCidrBlock": "192.168.0.1", "Type": "TODO", "State": "blackhole"}]
|
||||
[
|
||||
{
|
||||
"DestinationCidrBlock": "192.168.0.1",
|
||||
"Type": "static",
|
||||
"State": "blackhole",
|
||||
}
|
||||
]
|
||||
)
|
||||
|
||||
routes = ec2.search_transit_gateway_routes(
|
||||
@ -371,7 +378,7 @@ def test_delete_transit_gateway_route():
|
||||
)
|
||||
|
||||
response["Route"].should.equal(
|
||||
{"DestinationCidrBlock": "192.168.0.0", "Type": "TODO", "State": "deleted"}
|
||||
{"DestinationCidrBlock": "192.168.0.0", "Type": "static", "State": "deleted"}
|
||||
)
|
||||
|
||||
routes = ec2.search_transit_gateway_routes(
|
||||
@ -380,7 +387,7 @@ def test_delete_transit_gateway_route():
|
||||
)["Routes"]
|
||||
|
||||
routes.should.equal(
|
||||
[{"DestinationCidrBlock": "192.168.0.1", "Type": "TODO", "State": "active"}]
|
||||
[{"DestinationCidrBlock": "192.168.0.1", "Type": "static", "State": "active"}]
|
||||
)
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user