adds basic support for vpc-classic-link
This commit is contained in:
parent
b19abbc63e
commit
17cc46b91e
@ -2217,7 +2217,7 @@
|
||||
- [X] describe_volumes
|
||||
- [ ] describe_volumes_modifications
|
||||
- [X] describe_vpc_attribute
|
||||
- [ ] describe_vpc_classic_link
|
||||
- [X] describe_vpc_classic_link
|
||||
- [ ] describe_vpc_classic_link_dns_support
|
||||
- [ ] describe_vpc_endpoint_connection_notifications
|
||||
- [ ] describe_vpc_endpoint_connections
|
||||
@ -2237,7 +2237,7 @@
|
||||
- [ ] disable_ebs_encryption_by_default
|
||||
- [ ] disable_transit_gateway_route_table_propagation
|
||||
- [ ] disable_vgw_route_propagation
|
||||
- [ ] disable_vpc_classic_link
|
||||
- [X] disable_vpc_classic_link
|
||||
- [ ] disable_vpc_classic_link_dns_support
|
||||
- [X] disassociate_address
|
||||
- [ ] disassociate_client_vpn_target_network
|
||||
@ -2250,7 +2250,7 @@
|
||||
- [ ] enable_transit_gateway_route_table_propagation
|
||||
- [ ] enable_vgw_route_propagation
|
||||
- [ ] enable_volume_io
|
||||
- [ ] enable_vpc_classic_link
|
||||
- [X] enable_vpc_classic_link
|
||||
- [ ] enable_vpc_classic_link_dns_support
|
||||
- [ ] export_client_vpn_client_certificate_revocation_list
|
||||
- [ ] export_client_vpn_client_configuration
|
||||
|
@ -2433,8 +2433,8 @@ class VPC(TaggedEC2Resource):
|
||||
self.dhcp_options = None
|
||||
self.state = "available"
|
||||
self.instance_tenancy = instance_tenancy
|
||||
self.is_default = "true" if is_default else "false"
|
||||
self.enable_dns_support = "true"
|
||||
self.is_default = 'true' if is_default else 'false'
|
||||
self.enable_dns_support = 'true'
|
||||
# This attribute is set to 'true' only for default VPCs
|
||||
# or VPCs created using the wizard of the VPC console
|
||||
self.enable_dns_hostnames = "true" if is_default else "false"
|
||||
@ -2531,6 +2531,21 @@ class VPC(TaggedEC2Resource):
|
||||
self.cidr_block_association_set[association_id] = association_set
|
||||
return association_set
|
||||
|
||||
def enable_vpc_classic_link(self):
|
||||
# Check if current cidr block doesn't fall within the 10.0.0.0/8 block, excluding 10.0.0.0/16 and 10.1.0.0/16.
|
||||
# Doesn't check any route tables, maybe something for in the future?
|
||||
# See https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/vpc-classiclink.html#classiclink-limitations
|
||||
network_address = ipaddress.ip_network(self.cidr_block).network_address
|
||||
if network_address not in ipaddress.ip_network('10.0.0.0/8') or network_address in ipaddress.ip_network(
|
||||
'10.0.0.0/16') or network_address in ipaddress.ip_network('10.1.0.0/16'):
|
||||
self.classic_link_enabled = "true"
|
||||
|
||||
return self.classic_link_enabled
|
||||
|
||||
def disable_vpc_classic_link(self):
|
||||
self.classic_link_enabled = "false"
|
||||
return self.classic_link_enabled
|
||||
|
||||
def disassociate_vpc_cidr_block(self, association_id):
|
||||
if self.cidr_block == self.cidr_block_association_set.get(
|
||||
association_id, {}
|
||||
@ -2661,6 +2676,14 @@ class VPCBackend(object):
|
||||
else:
|
||||
raise InvalidParameterValueError(attr_name)
|
||||
|
||||
def enable_vpc_classic_link(self, vpc_id):
|
||||
vpc = self.get_vpc(vpc_id)
|
||||
return vpc.enable_vpc_classic_link()
|
||||
|
||||
def disable_vpc_classic_link(self, vpc_id):
|
||||
vpc = self.get_vpc(vpc_id)
|
||||
return vpc.disable_vpc_classic_link()
|
||||
|
||||
def modify_vpc_attribute(self, vpc_id, attr_name, attr_value):
|
||||
vpc = self.get_vpc(vpc_id)
|
||||
if attr_name in ("enable_dns_support", "enable_dns_hostnames"):
|
||||
|
@ -50,6 +50,28 @@ class VPCs(BaseResponse):
|
||||
template = self.response_template(DESCRIBE_VPC_ATTRIBUTE_RESPONSE)
|
||||
return template.render(vpc_id=vpc_id, attribute=attribute, value=value)
|
||||
|
||||
def describe_vpc_classic_link(self):
|
||||
vpc_ids = self._get_multi_param('VpcId')
|
||||
filters = filters_from_querystring(self.querystring)
|
||||
vpcs = self.ec2_backend.get_all_vpcs(vpc_ids=vpc_ids, filters=filters)
|
||||
doc_date = '2013-10-15' if 'Boto/' in self.headers.get('user-agent', '') else '2016-11-15'
|
||||
template = self.response_template(DESCRIBE_VPC_CLASSIC_LINK_RESPONSE)
|
||||
return template.render(vpcs=vpcs, doc_date=doc_date)
|
||||
|
||||
def enable_vpc_classic_link(self):
|
||||
vpc_id = self._get_param('VpcId')
|
||||
classic_link_enabled = self.ec2_backend.enable_vpc_classic_link(vpc_id=vpc_id)
|
||||
doc_date = '2013-10-15' if 'Boto/' in self.headers.get('user-agent', '') else '2016-11-15'
|
||||
template = self.response_template(ENABLE_VPC_CLASSIC_LINK_RESPONSE)
|
||||
return template.render(classic_link_enabled=classic_link_enabled, doc_date=doc_date)
|
||||
|
||||
def disable_vpc_classic_link(self):
|
||||
vpc_id = self._get_param('VpcId')
|
||||
classic_link_enabled = self.ec2_backend.disable_vpc_classic_link(vpc_id=vpc_id)
|
||||
doc_date = '2013-10-15' if 'Boto/' in self.headers.get('user-agent', '') else '2016-11-15'
|
||||
template = self.response_template(DISABLE_VPC_CLASSIC_LINK_RESPONSE)
|
||||
return template.render(classic_link_enabled=classic_link_enabled, doc_date=doc_date)
|
||||
|
||||
def modify_vpc_attribute(self):
|
||||
vpc_id = self._get_param("VpcId")
|
||||
|
||||
@ -149,6 +171,31 @@ CREATE_VPC_RESPONSE = """
|
||||
</vpc>
|
||||
</CreateVpcResponse>"""
|
||||
|
||||
DESCRIBE_VPC_CLASSIC_LINK_RESPONSE = """
|
||||
<DescribeVpcClassicLinkResponse xmlns="http://ec2.amazonaws.com/doc/{{doc_date}}/">
|
||||
<requestId>7a62c442-3484-4f42-9342-6942EXAMPLE</requestId>
|
||||
<vpcSet>
|
||||
{% for vpc in vpcs %}
|
||||
<item>
|
||||
<vpcId>{{ vpc.id }}</vpcId>
|
||||
<classicLinkEnabled>{{ vpc.classic_link_enabled }}</classicLinkEnabled>
|
||||
</item>
|
||||
{% endfor %}
|
||||
</vpcSet>
|
||||
</DescribeVpcClassicLinkResponse>"""
|
||||
|
||||
ENABLE_VPC_CLASSIC_LINK_RESPONSE = """
|
||||
<EnableVpcClassicLinkResponse xmlns="http://ec2.amazonaws.com/doc/{{doc_date}}/">
|
||||
<requestId>7a62c442-3484-4f42-9342-6942EXAMPLE</requestId>
|
||||
<return>{{ classic_link_enabled }}</return>
|
||||
</EnableVpcClassicLinkResponse>"""
|
||||
|
||||
DISABLE_VPC_CLASSIC_LINK_RESPONSE = """
|
||||
<DisableVpcClassicLinkResponse xmlns="http://ec2.amazonaws.com/doc/{{doc_date}}/">
|
||||
<requestId>7a62c442-3484-4f42-9342-6942EXAMPLE</requestId>
|
||||
<return>{{ classic_link_enabled }}</return>
|
||||
</DisableVpcClassicLinkResponse>"""
|
||||
|
||||
DESCRIBE_VPCS_RESPONSE = """
|
||||
<DescribeVpcsResponse xmlns="http://ec2.amazonaws.com/doc/{{doc_date}}/">
|
||||
<requestId>7a62c442-3484-4f42-9342-6942EXAMPLE</requestId>
|
||||
|
@ -676,5 +676,73 @@ def test_create_vpc_with_invalid_cidr_range():
|
||||
vpc = ec2.create_vpc(CidrBlock=vpc_cidr_block)
|
||||
str(ex.exception).should.equal(
|
||||
"An error occurred (InvalidVpc.Range) when calling the CreateVpc "
|
||||
"operation: The CIDR '{}' is invalid.".format(vpc_cidr_block)
|
||||
)
|
||||
"operation: The CIDR '{}' is invalid.".format(vpc_cidr_block))
|
||||
|
||||
@mock_ec2
|
||||
def test_enable_vpc_classic_link():
|
||||
ec2 = boto3.resource('ec2', region_name='us-west-1')
|
||||
|
||||
# Create VPC
|
||||
vpc = ec2.create_vpc(CidrBlock='10.1.0.0/16')
|
||||
|
||||
response = ec2.meta.client.enable_vpc_classic_link(VpcId=vpc.id)
|
||||
assert response.get('Return').should.be.true
|
||||
|
||||
@mock_ec2
|
||||
def test_enable_vpc_classic_link_failure():
|
||||
ec2 = boto3.resource('ec2', region_name='us-west-1')
|
||||
|
||||
# Create VPC
|
||||
vpc = ec2.create_vpc(CidrBlock='10.90.0.0/16')
|
||||
|
||||
response = ec2.meta.client.enable_vpc_classic_link(VpcId=vpc.id)
|
||||
assert response.get('Return').should.be.false
|
||||
|
||||
|
||||
@mock_ec2
|
||||
def test_disable_vpc_classic_link():
|
||||
ec2 = boto3.resource('ec2', region_name='us-west-1')
|
||||
|
||||
# Create VPC
|
||||
vpc = ec2.create_vpc(CidrBlock='10.0.0.0/16')
|
||||
|
||||
ec2.meta.client.enable_vpc_classic_link(VpcId=vpc.id)
|
||||
response = ec2.meta.client.disable_vpc_classic_link(VpcId=vpc.id)
|
||||
assert response.get('Return').should.be.false
|
||||
|
||||
|
||||
@mock_ec2
|
||||
def test_describe_classic_link_enabled():
|
||||
ec2 = boto3.resource('ec2', region_name='us-west-1')
|
||||
|
||||
# Create VPC
|
||||
vpc = ec2.create_vpc(CidrBlock='10.0.0.0/16')
|
||||
|
||||
ec2.meta.client.enable_vpc_classic_link(VpcId=vpc.id)
|
||||
response = ec2.meta.client.describe_vpc_classic_link(VpcIds=[vpc.id])
|
||||
assert response.get('Vpcs')[0].get('ClassicLinkEnabled').should.be.true
|
||||
|
||||
|
||||
@mock_ec2
|
||||
def test_describe_classic_link_disabled():
|
||||
ec2 = boto3.resource('ec2', region_name='us-west-1')
|
||||
|
||||
# Create VPC
|
||||
vpc = ec2.create_vpc(CidrBlock='10.90.0.0/16')
|
||||
|
||||
response = ec2.meta.client.describe_vpc_classic_link(VpcIds=[vpc.id])
|
||||
assert response.get('Vpcs')[0].get('ClassicLinkEnabled').should.be.false
|
||||
|
||||
|
||||
@mock_ec2
|
||||
def test_describe_classic_link_multiple():
|
||||
ec2 = boto3.resource('ec2', region_name='us-west-1')
|
||||
|
||||
# Create VPC
|
||||
vpc1 = ec2.create_vpc(CidrBlock='10.90.0.0/16')
|
||||
vpc2 = ec2.create_vpc(CidrBlock='10.0.0.0/16')
|
||||
|
||||
ec2.meta.client.enable_vpc_classic_link(VpcId=vpc2.id)
|
||||
response = ec2.meta.client.describe_vpc_classic_link(VpcIds=[vpc1.id, vpc2.id])
|
||||
assert response.get('Vpcs')[0].get('ClassicLinkEnabled').should.be.false
|
||||
assert response.get('Vpcs')[1].get('ClassicLinkEnabled').should.be.true
|
||||
|
Loading…
Reference in New Issue
Block a user