Fix assigning public ip to instances. Closes #729.
This commit is contained in:
parent
094b10cea1
commit
27f1bece9b
@ -549,6 +549,10 @@ class Instance(BotoInstance, TaggedEC2Resource):
|
||||
|
||||
self.attach_eni(use_nic, device_index)
|
||||
|
||||
def set_ip(self, ip_address):
|
||||
# Should we be creating a new ENI?
|
||||
self.nics[0].public_ip = ip_address
|
||||
|
||||
def attach_eni(self, eni, device_index):
|
||||
device_index = int(device_index)
|
||||
self.nics[device_index] = eni
|
||||
@ -2663,6 +2667,7 @@ class ElasticAddressBackend(object):
|
||||
eip.eni.public_ip = eip.public_ip
|
||||
if eip.domain == "vpc":
|
||||
eip.association_id = random_eip_association_id()
|
||||
instance.set_ip(eip.public_ip)
|
||||
|
||||
return eip
|
||||
|
||||
|
@ -207,6 +207,7 @@ EC2_RUN_INSTANCES = """<RunInstancesResponse xmlns="http://ec2.amazonaws.com/doc
|
||||
</instanceState>
|
||||
<privateDnsName>{{ instance.private_dns }}</privateDnsName>
|
||||
<publicDnsName>{{ instance.public_dns }}</publicDnsName>
|
||||
<dnsName>{{ instance.public_dns }}</dnsName>
|
||||
<reason/>
|
||||
<keyName>{{ instance.key_name }}</keyName>
|
||||
<amiLaunchIndex>0</amiLaunchIndex>
|
||||
@ -335,6 +336,7 @@ EC2_DESCRIBE_INSTANCES = """<DescribeInstancesResponse xmlns="http://ec2.amazona
|
||||
</instanceState>
|
||||
<privateDnsName>{{ instance.private_dns }}</privateDnsName>
|
||||
<publicDnsName>{{ instance.public_dns }}</publicDnsName>
|
||||
<dnsName>{{ instance.public_dns }}</dnsName>
|
||||
<reason>{{ instance._reason }}</reason>
|
||||
<keyName>{{ instance.key_name }}</keyName>
|
||||
<amiLaunchIndex>0</amiLaunchIndex>
|
||||
|
@ -4,6 +4,7 @@ import tests.backport_assert_raises
|
||||
from nose.tools import assert_raises
|
||||
|
||||
import boto
|
||||
import boto3
|
||||
from boto.exception import EC2ResponseError
|
||||
import six
|
||||
|
||||
@ -110,6 +111,32 @@ def test_eip_associate_vpc():
|
||||
|
||||
instance.terminate()
|
||||
|
||||
@mock_ec2
|
||||
def test_eip_boto3_vpc_association():
|
||||
"""Associate EIP to VPC instance in a new subnet with boto3"""
|
||||
session = boto3.session.Session(region_name='us-west-1')
|
||||
service = session.resource('ec2')
|
||||
client = session.client('ec2')
|
||||
vpc_res = client.create_vpc(CidrBlock='10.0.0.0/24')
|
||||
subnet_res = client.create_subnet(
|
||||
VpcId=vpc_res['Vpc']['VpcId'], CidrBlock='10.0.0.0/24')
|
||||
instance = service.create_instances(**{
|
||||
'InstanceType': 't2.micro',
|
||||
'ImageId': 'ami-test',
|
||||
'MinCount': 1,
|
||||
'MaxCount': 1,
|
||||
'SubnetId': subnet_res['Subnet']['SubnetId']
|
||||
})[0]
|
||||
allocation_id = client.allocate_address(Domain='vpc')['AllocationId']
|
||||
association_id = client.associate_address(
|
||||
InstanceId=instance.id,
|
||||
AllocationId=allocation_id,
|
||||
AllowReassociation=False)
|
||||
instance.load()
|
||||
instance.public_ip_address.should_not.be.none
|
||||
instance.public_dns_name.should_not.be.none
|
||||
|
||||
|
||||
@mock_ec2
|
||||
def test_eip_associate_network_interface():
|
||||
"""Associate/Disassociate EIP to NIC"""
|
||||
|
Loading…
Reference in New Issue
Block a user