diff --git a/moto/ec2/models.py b/moto/ec2/models.py index c5e93c8f8..89b8408c8 100755 --- a/moto/ec2/models.py +++ b/moto/ec2/models.py @@ -567,13 +567,17 @@ class Instance(TaggedEC2Resource, BotoInstance): def prep_nics(self, nic_spec, private_ip=None, associate_public_ip=None): self.nics = {} - subnet = self.ec2_backend.get_subnet(self.subnet_id) - if not private_ip: - private_ip = subnet.get_available_subnet_ip(instance=self) - else: - subnet.request_ip(private_ip, instance=self) + if self.subnet_id: + subnet = self.ec2_backend.get_subnet(self.subnet_id) + if not private_ip: + private_ip = subnet.get_available_subnet_ip(instance=self) + else: + subnet.request_ip(private_ip, instance=self) - self._private_ips.add(private_ip) + self._private_ips.add(private_ip) + elif private_ip is None: + # Preserve old behaviour if in EC2-Classic mode + private_ip = random_private_ip() # Primary NIC defaults primary_nic = {'SubnetId': self.subnet_id, @@ -2136,7 +2140,7 @@ class Subnet(TaggedEC2Resource): self.id = subnet_id self.vpc_id = vpc_id self.cidr_block = cidr_block - self.cidr = ipaddress.ip_network(self.cidr_block) + self.cidr = ipaddress.ip_network(six.text_type(self.cidr_block)) self._availability_zone = availability_zone self.default_for_az = default_for_az self.map_public_ip_on_launch = map_public_ip_on_launch diff --git a/moto/rds2/models.py b/moto/rds2/models.py index bb66ead57..ee4d28fe2 100644 --- a/moto/rds2/models.py +++ b/moto/rds2/models.py @@ -704,7 +704,8 @@ class RDS2Backend(BaseBackend): if self.arn_regex.match(source_database_id): db_kwargs['region'] = self.region - replica = copy.deepcopy(primary) + # Shoudln't really copy here as the instance is duplicated. RDS replicas have different instances. + replica = copy.copy(primary) replica.update(db_kwargs) replica.set_as_replica() self.databases[database_id] = replica diff --git a/tests/test_ec2/test_instances.py b/tests/test_ec2/test_instances.py index cc8970b04..d4a2a6ff7 100644 --- a/tests/test_ec2/test_instances.py +++ b/tests/test_ec2/test_instances.py @@ -7,6 +7,7 @@ import base64 import datetime import ipaddress +import six import boto import boto3 from boto.ec2.instance import Reservation, InstanceAttribute @@ -414,6 +415,7 @@ def test_get_instances_filtering_by_image_id(): 'Values': [image_id]}])['Reservations'] reservations[0]['Instances'].should.have.length_of(1) + @mock_ec2 def test_get_instances_filtering_by_private_dns(): image_id = 'ami-1234abcd' @@ -428,6 +430,7 @@ def test_get_instances_filtering_by_private_dns(): ])['Reservations'] reservations[0]['Instances'].should.have.length_of(1) + @mock_ec2 def test_get_instances_filtering_by_ni_private_dns(): image_id = 'ami-1234abcd' @@ -442,6 +445,7 @@ def test_get_instances_filtering_by_ni_private_dns(): ])['Reservations'] reservations[0]['Instances'].should.have.length_of(1) + @mock_ec2 def test_get_instances_filtering_by_instance_group_name(): image_id = 'ami-1234abcd' @@ -459,6 +463,7 @@ def test_get_instances_filtering_by_instance_group_name(): ])['Reservations'] reservations[0]['Instances'].should.have.length_of(1) + @mock_ec2 def test_get_instances_filtering_by_instance_group_id(): image_id = 'ami-1234abcd' @@ -477,6 +482,7 @@ def test_get_instances_filtering_by_instance_group_id(): ])['Reservations'] reservations[0]['Instances'].should.have.length_of(1) + @mock_ec2_deprecated def test_get_instances_filtering_by_tag(): conn = boto.connect_ec2() @@ -832,7 +838,7 @@ def test_run_instance_with_placement(): @mock_ec2 -def test_run_instance_with_subnet(): +def test_run_instance_with_subnet_boto3(): client = boto3.client('ec2', region_name='eu-central-1') ip_networks = [ @@ -865,7 +871,7 @@ def test_run_instance_with_subnet(): instance = resp['Instances'][0] instance['SubnetId'].should.equal(subnet_id) - priv_ipv4 = ipaddress.ip_address(instance['PrivateIpAddress']) + priv_ipv4 = ipaddress.ip_address(six.text_type(instance['PrivateIpAddress'])) subnet_cidr.should.contain(priv_ipv4) @@ -899,7 +905,7 @@ def test_run_instance_with_specified_private_ipv4(): ) instance = resp['Instances'][0] instance['SubnetId'].should.equal(subnet_id) - instance['PrivateIpAddress'].shoud.equal('192.168.42.5') + instance['PrivateIpAddress'].should.equal('192.168.42.5') @mock_ec2 @@ -949,7 +955,7 @@ def test_run_instance_with_nic_autocreated(): 'test security group #1', 'this is a test security group') security_group2 = conn.create_security_group( 'test security group #2', 'this is a test security group') - private_ip = "54.0.0.1" + private_ip = "10.0.0.1" reservation = conn.run_instances('ami-1234abcd', subnet_id=subnet.id, security_groups=[security_group1.name], diff --git a/tests/test_ec2/test_route_tables.py b/tests/test_ec2/test_route_tables.py index 6e6c62741..b27484468 100644 --- a/tests/test_ec2/test_route_tables.py +++ b/tests/test_ec2/test_route_tables.py @@ -126,9 +126,9 @@ def test_route_tables_filters_associations(): conn = boto.connect_vpc('the_key', 'the_secret') vpc = conn.create_vpc("10.0.0.0/16") - subnet1 = conn.create_subnet(vpc.id, "10.0.0.0/18") - subnet2 = conn.create_subnet(vpc.id, "10.0.1.0/18") - subnet3 = conn.create_subnet(vpc.id, "10.0.2.0/18") + subnet1 = conn.create_subnet(vpc.id, "10.0.0.0/24") + subnet2 = conn.create_subnet(vpc.id, "10.0.1.0/24") + subnet3 = conn.create_subnet(vpc.id, "10.0.2.0/24") route_table1 = conn.create_route_table(vpc.id) route_table2 = conn.create_route_table(vpc.id)