Spotinst - adding support for instance health check validation (#49211)

[src] - adding changlog fragment
pull/51081/head
Jeffrey Noehren 6 years ago committed by John R Barker
parent d3dc8a52bb
commit 2eaf0956b5

@ -0,0 +1,3 @@
minor_changes:
- spotinst - Added Instance Health Check Validation on creation of Elastigroup if "health_check_type" parameter set in playbook
- spotinst - Added "SPOTINST_ACCOUNT_ID" or "ACCOUNT" env var

@ -21,7 +21,6 @@ description:
token = <YOUR TOKEN> token = <YOUR TOKEN>
Full documentation available at https://help.spotinst.com/hc/en-us/articles/115003530285-Ansible- Full documentation available at https://help.spotinst.com/hc/en-us/articles/115003530285-Ansible-
requirements: requirements:
- spotinst >= 1.0.21
- python >= 2.7 - python >= 2.7
- spotinst_sdk >= 1.0.38 - spotinst_sdk >= 1.0.38
options: options:
@ -755,8 +754,8 @@ import time
from ansible.module_utils.basic import AnsibleModule from ansible.module_utils.basic import AnsibleModule
try: try:
import spotinst import spotinst_sdk as spotinst
from spotinst import SpotinstClientException from spotinst_sdk import SpotinstClientException
HAS_SPOTINST_SDK = True HAS_SPOTINST_SDK = True
@ -959,6 +958,7 @@ def handle_elastigroup(client, module):
) )
roll_response = client.roll_group(group_roll=eg_roll, group_id=group_id) roll_response = client.roll_group(group_roll=eg_roll, group_id=group_id)
message = 'Updated and started rolling the group successfully.' message = 'Updated and started rolling the group successfully.'
except SpotinstClientException as exc: except SpotinstClientException as exc:
message = 'Updated group successfully, but failed to perform roll. Error:' + str(exc) message = 'Updated group successfully, but failed to perform roll. Error:' + str(exc)
has_changed = True has_changed = True
@ -982,6 +982,8 @@ def retrieve_group_instances(client, module, group_id):
wait_timeout = module.params.get('wait_timeout') wait_timeout = module.params.get('wait_timeout')
wait_for_instances = module.params.get('wait_for_instances') wait_for_instances = module.params.get('wait_for_instances')
health_check_type = module.params.get('health_check_type')
if wait_timeout is None: if wait_timeout is None:
wait_timeout = 300 wait_timeout = 300
@ -996,12 +998,22 @@ def retrieve_group_instances(client, module, group_id):
while is_amount_fulfilled is False and wait_timeout > time.time(): while is_amount_fulfilled is False and wait_timeout > time.time():
instances = list() instances = list()
amount_of_fulfilled_instances = 0 amount_of_fulfilled_instances = 0
active_instances = client.get_elastigroup_active_instances(group_id=group_id)
for active_instance in active_instances: if health_check_type is not None:
if active_instance.get('private_ip') is not None: healthy_instances = client.get_instance_healthiness(group_id=group_id)
amount_of_fulfilled_instances += 1
instances.append(active_instance) for healthy_instance in healthy_instances:
if(healthy_instance.get('healthStatus') == 'HEALTHY'):
amount_of_fulfilled_instances += 1
instances.append(healthy_instance)
else:
active_instances = client.get_elastigroup_active_instances(group_id=group_id)
for active_instance in active_instances:
if active_instance.get('private_ip') is not None:
amount_of_fulfilled_instances += 1
instances.append(active_instance)
if amount_of_fulfilled_instances >= target: if amount_of_fulfilled_instances >= target:
is_amount_fulfilled = True is_amount_fulfilled = True
@ -1464,7 +1476,7 @@ def main():
module = AnsibleModule(argument_spec=fields) module = AnsibleModule(argument_spec=fields)
if not HAS_SPOTINST_SDK: if not HAS_SPOTINST_SDK:
module.fail_json(msg="the Spotinst SDK library is required. (pip install spotinst)") module.fail_json(msg="the Spotinst SDK library is required. (pip install spotinst_sdk)")
# Retrieve creds file variables # Retrieve creds file variables
creds_file_loaded_vars = dict() creds_file_loaded_vars = dict()
@ -1490,7 +1502,7 @@ def main():
account = module.params.get('account_id') account = module.params.get('account_id')
if not account: if not account:
account = os.environ.get('ACCOUNT') account = os.environ.get('SPOTINST_ACCOUNT_ID') or os.environ.get('ACCOUNT')
if not account: if not account:
account = creds_file_loaded_vars.get("account") account = creds_file_loaded_vars.get("account")

Loading…
Cancel
Save