From 90a8725c7b77d9f53e3449e576b0019e4a22f011 Mon Sep 17 00:00:00 2001 From: s19n Date: Tue, 16 Feb 2021 18:43:27 +0100 Subject: [PATCH] Add support for Spot allocation --- plugins/modules/ec2_asg.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/plugins/modules/ec2_asg.py b/plugins/modules/ec2_asg.py index 152918b6d6c..8c562990c72 100644 --- a/plugins/modules/ec2_asg.py +++ b/plugins/modules/ec2_asg.py @@ -93,6 +93,14 @@ - A list of instance_types. type: list elements: str + ondemand_base: + description: + - the minimum amount of capacity that must be fulfilled by On-Demand instances + type: int + ondemand_percentage_above_base: + description: + - percentages of on-demand instances beyond OnDemandBaseCapacity + type: int type: dict placement_group: description: @@ -743,6 +751,10 @@ def get_properties(autoscaling_group): raw_mixed_instance_object = autoscaling_group.get('MixedInstancesPolicy') if raw_mixed_instance_object: properties['mixed_instances_policy'] = [x['InstanceType'] for x in raw_mixed_instance_object.get('LaunchTemplate').get('Overrides')] + if 'OnDemandPercentageAboveBaseCapacity' in raw_mixed_instance_object.get('InstancesDistribution', []): + properties['ondemand_percentage_above_base'] = raw_mixed_instance_object.get('InstancesDistribution').get('OnDemandPercentageAboveBaseCapacity') + if 'OnDemandBaseCapacity' in raw_mixed_instance_object.get('InstancesDistribution', []): + properties['ondemand_base'] = raw_mixed_instance_object.get('InstancesDistribution').get('OnDemandBaseCapacity') metrics = autoscaling_group.get('EnabledMetrics') if metrics: @@ -802,6 +814,10 @@ def get_launch_object(connection, ec2_connection): for instance_type in instance_types: instance_type_dict = {'InstanceType': instance_type} policy['LaunchTemplate']['Overrides'].append(instance_type_dict) + policy['InstancesDistribution'] = { + 'OnDemandPercentageAboveBaseCapacity': mixed_instances_policy.get('ondemand_percentage_above_base'), + 'OnDemandBaseCapacity': mixed_instances_policy.get('ondemand_base') + } launch_object['MixedInstancesPolicy'] = policy return launch_object @@ -1661,6 +1677,8 @@ def main(): type='list', elements='str' ), + ondemand_percentage_above_base=dict(type='int'), + ondemand_base=dict(type='int') ) ), placement_group=dict(type='str'),