summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvan Carter <evanc@seatgeek.com>2015-09-14 11:27:37 -0400
committerEvan Carter <evanc@seatgeek.com>2015-09-14 11:27:37 -0400
commit70ed99ec2678406390ffd6cd7ddf80d6dd0a9403 (patch)
treeb9f9bfe399ac624fcee2ca93c289e1724472207d
parent81a7243bbbdeede4f5fe2e77910001835af36dd3 (diff)
downloadansible-modules-core-70ed99ec2678406390ffd6cd7ddf80d6dd0a9403.tar.gz
Fixing bug #2058 and adding some backwards compatibility
-rw-r--r--cloud/amazon/ec2_eip.py34
1 files changed, 25 insertions, 9 deletions
diff --git a/cloud/amazon/ec2_eip.py b/cloud/amazon/ec2_eip.py
index 5d6532b3..4975f37a 100644
--- a/cloud/amazon/ec2_eip.py
+++ b/cloud/amazon/ec2_eip.py
@@ -121,6 +121,7 @@ except ImportError:
class EIPException(Exception):
pass
+
def associate_ip_and_device(ec2, address, device_id, check_mode, isinstance=True):
if address_is_associated_with_device(ec2, address, device_id, isinstance):
return {'changed': False}
@@ -202,8 +203,12 @@ def allocate_address(ec2, domain, reuse_existing_ip_allowed):
domain_filter = {'domain': domain or 'standard'}
all_addresses = ec2.get_all_addresses(filters=domain_filter)
- unassociated_addresses = [a for a in all_addresses
- if not a.device_id]
+ if domain == 'vpc':
+ unassociated_addresses = [a for a in all_addresses
+ if not a.association_id]
+ else:
+ unassociated_addresses = [a for a in all_addresses
+ if not a.instance_id]
if unassociated_addresses:
return unassociated_addresses[0]
@@ -262,6 +267,9 @@ def ensure_present(ec2, domain, address, device_id,
# Allocate an IP for instance since no public_ip was provided
if isinstance:
instance = find_device(ec2, device_id)
+ if reuse_existing_ip_allowed:
+ if len(instance.vpc_id) > 0 and domain is None:
+ raise EIPException("You must set 'in_vpc' to true to associate an instance with an existing ip in a vpc")
# Associate address object (provided or allocated) with instance
assoc_result = associate_ip_and_device(ec2, address, device_id,
check_mode)
@@ -321,6 +329,7 @@ def main():
ec2 = ec2_connect(module)
device_id = module.params.get('device_id')
+ instance_id = module.params.get('instance_id')
public_ip = module.params.get('public_ip')
state = module.params.get('state')
in_vpc = module.params.get('in_vpc')
@@ -328,10 +337,15 @@ def main():
reuse_existing_ip_allowed = module.params.get('reuse_existing_ip_allowed')
release_on_disassociation = module.params.get('release_on_disassociation')
- if device_id and device_id.startswith('i-'):
- is_instance=True
- elif device_id:
- is_instance=False
+ if instance_id:
+ warnings = ["instance_id is no longer used, please use device_id going forward"]
+ is_instance = True
+ device_id = instance_id
+ else:
+ if device_id and device_id.startswith('i-'):
+ is_instance = True
+ elif device_id:
+ is_instance = False
try:
if device_id:
@@ -353,17 +367,19 @@ def main():
if release_on_disassociation and disassociated['changed']:
released = release_address(ec2, address, module.check_mode)
- result = { 'changed': True, 'disassociated': disassociated, 'released': released }
+ result = {'changed': True, 'disassociated': disassociated, 'released': released}
else:
- result = { 'changed': disassociated['changed'], 'disassociated': disassociated, 'released': { 'changed': False } }
+ result = {'changed': disassociated['changed'], 'disassociated': disassociated, 'released': {'changed': False}}
else:
address = find_address(ec2, public_ip, None)
released = release_address(ec2, address, module.check_mode)
- result = { 'changed': released['changed'], 'disassociated': { 'changed': False }, 'released': released }
+ result = {'changed': released['changed'], 'disassociated': {'changed': False}, 'released': released}
except (boto.exception.EC2ResponseError, EIPException) as e:
module.fail_json(msg=str(e))
+ if instance_id:
+ result['warnings'] = warnings
module.exit_json(**result)
# import module snippets