#2877 - Ensure NetworkInterfaces are assigned to the default Subnet

This commit is contained in:
Bert Blommers 2020-04-08 13:53:53 +01:00
parent 7419f527d4
commit 5c7e0b56af
3 changed files with 56 additions and 2 deletions

View File

@ -775,7 +775,14 @@ class Instance(TaggedEC2Resource, BotoInstance):
if "SubnetId" in nic:
subnet = self.ec2_backend.get_subnet(nic["SubnetId"])
else:
subnet = None
# Get default Subnet
subnet = [
subnet
for subnet in self.ec2_backend.get_all_subnets(
filters={"availabilityZone": self._placement.zone}
)
if subnet.default_for_az
][0]
group_id = nic.get("SecurityGroupId")
group_ids = [group_id] if group_id else []

View File

@ -71,7 +71,7 @@ def test_instance_launch_and_terminate():
instance.id.should.equal(instance.id)
instance.state.should.equal("running")
instance.launch_time.should.equal("2014-01-01T05:00:00.000Z")
instance.vpc_id.should.equal(None)
instance.vpc_id.shouldnt.equal(None)
instance.placement.should.equal("us-east-1a")
root_device_name = instance.root_device_name

View File

@ -599,3 +599,50 @@ def validate_subnet_details_after_creating_eni(
for eni in enis_created:
client.delete_network_interface(NetworkInterfaceId=eni["NetworkInterfaceId"])
client.delete_subnet(SubnetId=subnet["SubnetId"])
@mock_ec2
def test_run_instances_should_attach_to_default_subnet():
ec2 = boto3.resource("ec2", region_name="us-west-1")
client = boto3.client("ec2", region_name="us-west-1")
ec2.create_security_group(GroupName="sg01", Description="Test security group sg01")
# run_instances
instances = client.run_instances(
MinCount=1,
MaxCount=1,
SecurityGroups=["sg01"],
TagSpecifications=[
{
"ResourceType": "instance",
"Tags": [{"Key": "Name", "Value": "test-01"},],
}
],
)
default_subnet_id = client.describe_subnets()["Subnets"][0]["SubnetId"]
instances["Instances"][0]["NetworkInterfaces"][0]["SubnetId"].should.equal(
default_subnet_id
)
@mock_ec2
def test_describe_subnets_where_network_interface_has_no_subnets_attached():
# https://github.com/spulec/moto/issues/2877
# create security groups
ec2 = boto3.resource("ec2", region_name="us-west-1")
client = boto3.client("ec2", region_name="us-west-1")
ec2.create_security_group(GroupName="sg01", Description="Test security group sg01")
# run_instances
client.run_instances(
MinCount=1,
MaxCount=1,
SecurityGroups=["sg01"],
TagSpecifications=[
{
"ResourceType": "instance",
"Tags": [{"Key": "Name", "Value": "test-01"},],
}
],
)
# describe_subnets
subnets = client.describe_subnets()["Subnets"]
subnets[0]["AvailableIpAddressCount"].should.equal(4090)