mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Spotinst - adding support for instance health check validation (#49211)
[src] - adding changlog fragment
This commit is contained in:
parent
d3dc8a52bb
commit
2eaf0956b5
2 changed files with 25 additions and 10 deletions
|
@ -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…
Reference in a new issue