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)
|
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):
|
def attach_eni(self, eni, device_index):
|
||||||
device_index = int(device_index)
|
device_index = int(device_index)
|
||||||
self.nics[device_index] = eni
|
self.nics[device_index] = eni
|
||||||
@ -2663,6 +2667,7 @@ class ElasticAddressBackend(object):
|
|||||||
eip.eni.public_ip = eip.public_ip
|
eip.eni.public_ip = eip.public_ip
|
||||||
if eip.domain == "vpc":
|
if eip.domain == "vpc":
|
||||||
eip.association_id = random_eip_association_id()
|
eip.association_id = random_eip_association_id()
|
||||||
|
instance.set_ip(eip.public_ip)
|
||||||
|
|
||||||
return eip
|
return eip
|
||||||
|
|
||||||
|
@ -207,6 +207,7 @@ EC2_RUN_INSTANCES = """<RunInstancesResponse xmlns="http://ec2.amazonaws.com/doc
|
|||||||
</instanceState>
|
</instanceState>
|
||||||
<privateDnsName>{{ instance.private_dns }}</privateDnsName>
|
<privateDnsName>{{ instance.private_dns }}</privateDnsName>
|
||||||
<publicDnsName>{{ instance.public_dns }}</publicDnsName>
|
<publicDnsName>{{ instance.public_dns }}</publicDnsName>
|
||||||
|
<dnsName>{{ instance.public_dns }}</dnsName>
|
||||||
<reason/>
|
<reason/>
|
||||||
<keyName>{{ instance.key_name }}</keyName>
|
<keyName>{{ instance.key_name }}</keyName>
|
||||||
<amiLaunchIndex>0</amiLaunchIndex>
|
<amiLaunchIndex>0</amiLaunchIndex>
|
||||||
@ -335,6 +336,7 @@ EC2_DESCRIBE_INSTANCES = """<DescribeInstancesResponse xmlns="http://ec2.amazona
|
|||||||
</instanceState>
|
</instanceState>
|
||||||
<privateDnsName>{{ instance.private_dns }}</privateDnsName>
|
<privateDnsName>{{ instance.private_dns }}</privateDnsName>
|
||||||
<publicDnsName>{{ instance.public_dns }}</publicDnsName>
|
<publicDnsName>{{ instance.public_dns }}</publicDnsName>
|
||||||
|
<dnsName>{{ instance.public_dns }}</dnsName>
|
||||||
<reason>{{ instance._reason }}</reason>
|
<reason>{{ instance._reason }}</reason>
|
||||||
<keyName>{{ instance.key_name }}</keyName>
|
<keyName>{{ instance.key_name }}</keyName>
|
||||||
<amiLaunchIndex>0</amiLaunchIndex>
|
<amiLaunchIndex>0</amiLaunchIndex>
|
||||||
|
@ -4,6 +4,7 @@ import tests.backport_assert_raises
|
|||||||
from nose.tools import assert_raises
|
from nose.tools import assert_raises
|
||||||
|
|
||||||
import boto
|
import boto
|
||||||
|
import boto3
|
||||||
from boto.exception import EC2ResponseError
|
from boto.exception import EC2ResponseError
|
||||||
import six
|
import six
|
||||||
|
|
||||||
@ -110,6 +111,32 @@ def test_eip_associate_vpc():
|
|||||||
|
|
||||||
instance.terminate()
|
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
|
@mock_ec2
|
||||||
def test_eip_associate_network_interface():
|
def test_eip_associate_network_interface():
|
||||||
"""Associate/Disassociate EIP to NIC"""
|
"""Associate/Disassociate EIP to NIC"""
|
||||||
|
Loading…
Reference in New Issue
Block a user