mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-07-25 14:20:22 -07:00
[cloud][aws] Add metrics_collection options to ec2_asg module (#35180)
* Added metrics_collection management to ec2_asg module to switch ASG metrics on and off. * Fixed typo in documentation of ec2_asg module * Removed extra blank line in ec2_asg.py * Docs fixes for ec2_asg module * Added integration test for ec2_asg metrics flag * Trying different syntax for ec2_asg test
This commit is contained in:
parent
6a223d5576
commit
404f9260d9
2 changed files with 84 additions and 1 deletions
|
@ -173,6 +173,30 @@ options:
|
||||||
default: []
|
default: []
|
||||||
choices: ['Launch', 'Terminate', 'HealthCheck', 'ReplaceUnhealthy', 'AZRebalance', 'AlarmNotification', 'ScheduledActions', 'AddToLoadBalancer']
|
choices: ['Launch', 'Terminate', 'HealthCheck', 'ReplaceUnhealthy', 'AZRebalance', 'AlarmNotification', 'ScheduledActions', 'AddToLoadBalancer']
|
||||||
version_added: "2.3"
|
version_added: "2.3"
|
||||||
|
metrics_collection:
|
||||||
|
description:
|
||||||
|
- Enable ASG metrics collection
|
||||||
|
default: False
|
||||||
|
type: bool
|
||||||
|
version_added: "2.5"
|
||||||
|
metrics_granularity:
|
||||||
|
description:
|
||||||
|
- When metrics_collection is enabled this will determine granularity of metrics collected by CloudWatch
|
||||||
|
default: "1minute"
|
||||||
|
version_added: "2.5"
|
||||||
|
metrics_list:
|
||||||
|
description:
|
||||||
|
- List of autoscaling metrics to collect when enabling metrics_collection
|
||||||
|
default:
|
||||||
|
- 'GroupMinSize'
|
||||||
|
- 'GroupMaxSize'
|
||||||
|
- 'GroupDesiredCapacity'
|
||||||
|
- 'GroupInServiceInstances'
|
||||||
|
- 'GroupPendingInstances'
|
||||||
|
- 'GroupStandbyInstances'
|
||||||
|
- 'GroupTerminatingInstances'
|
||||||
|
- 'GroupTotalInstances'
|
||||||
|
version_added: "2.5"
|
||||||
extends_documentation_fragment:
|
extends_documentation_fragment:
|
||||||
- aws
|
- aws
|
||||||
- ec2
|
- ec2
|
||||||
|
@ -399,6 +423,16 @@ vpc_zone_identifier:
|
||||||
returned: success
|
returned: success
|
||||||
type: str
|
type: str
|
||||||
sample: "subnet-a31ef45f"
|
sample: "subnet-a31ef45f"
|
||||||
|
metrics_collection:
|
||||||
|
description: List of enabled AutosSalingGroup metrics
|
||||||
|
returned: success
|
||||||
|
type: list
|
||||||
|
sample: [
|
||||||
|
{
|
||||||
|
"Granularity": "1Minute",
|
||||||
|
"Metric": "GroupInServiceInstances"
|
||||||
|
}
|
||||||
|
]
|
||||||
'''
|
'''
|
||||||
|
|
||||||
import time
|
import time
|
||||||
|
@ -583,6 +617,7 @@ def get_properties(autoscaling_group):
|
||||||
properties['termination_policies'] = autoscaling_group.get('TerminationPolicies')
|
properties['termination_policies'] = autoscaling_group.get('TerminationPolicies')
|
||||||
properties['target_group_arns'] = autoscaling_group.get('TargetGroupARNs')
|
properties['target_group_arns'] = autoscaling_group.get('TargetGroupARNs')
|
||||||
properties['vpc_zone_identifier'] = autoscaling_group.get('VPCZoneIdentifier')
|
properties['vpc_zone_identifier'] = autoscaling_group.get('VPCZoneIdentifier')
|
||||||
|
properties['metrics_collection'] = autoscaling_group.get('EnabledMetrics')
|
||||||
|
|
||||||
if properties['target_group_arns']:
|
if properties['target_group_arns']:
|
||||||
region, ec2_url, aws_connect_params = get_aws_connection_info(module, boto3=True)
|
region, ec2_url, aws_connect_params = get_aws_connection_info(module, boto3=True)
|
||||||
|
@ -807,6 +842,9 @@ def create_autoscaling_group(connection):
|
||||||
termination_policies = module.params.get('termination_policies')
|
termination_policies = module.params.get('termination_policies')
|
||||||
notification_topic = module.params.get('notification_topic')
|
notification_topic = module.params.get('notification_topic')
|
||||||
notification_types = module.params.get('notification_types')
|
notification_types = module.params.get('notification_types')
|
||||||
|
metrics_collection = module.params.get('metrics_collection')
|
||||||
|
metrics_granularity = module.params.get('metrics_granularity')
|
||||||
|
metrics_list = module.params.get('metrics_list')
|
||||||
try:
|
try:
|
||||||
as_groups = describe_autoscaling_groups(connection, group_name)
|
as_groups = describe_autoscaling_groups(connection, group_name)
|
||||||
except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e:
|
except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e:
|
||||||
|
@ -871,6 +909,8 @@ def create_autoscaling_group(connection):
|
||||||
|
|
||||||
try:
|
try:
|
||||||
create_asg(connection, **ag)
|
create_asg(connection, **ag)
|
||||||
|
if metrics_collection:
|
||||||
|
connection.enable_metrics_collection(AutoScalingGroupName=group_name, Granularity=metrics_granularity, Metrics=metrics_list)
|
||||||
|
|
||||||
all_ag = describe_autoscaling_groups(connection, group_name)
|
all_ag = describe_autoscaling_groups(connection, group_name)
|
||||||
if len(all_ag) == 0:
|
if len(all_ag) == 0:
|
||||||
|
@ -1041,6 +1081,12 @@ def create_autoscaling_group(connection):
|
||||||
ag['VPCZoneIdentifier'] = vpc_zone_identifier
|
ag['VPCZoneIdentifier'] = vpc_zone_identifier
|
||||||
try:
|
try:
|
||||||
update_asg(connection, **ag)
|
update_asg(connection, **ag)
|
||||||
|
|
||||||
|
if metrics_collection:
|
||||||
|
connection.enable_metrics_collection(AutoScalingGroupName=group_name, Granularity=metrics_granularity, Metrics=metrics_list)
|
||||||
|
else:
|
||||||
|
connection.disable_metrics_collection(AutoScalingGroupName=group_name, Metrics=metrics_list)
|
||||||
|
|
||||||
except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e:
|
except (botocore.exceptions.ClientError, botocore.exceptions.BotoCoreError) as e:
|
||||||
module.fail_json(msg="Failed to update autoscaling group: %s" % to_native(e),
|
module.fail_json(msg="Failed to update autoscaling group: %s" % to_native(e),
|
||||||
exception=traceback.format_exc())
|
exception=traceback.format_exc())
|
||||||
|
@ -1401,7 +1447,19 @@ def main():
|
||||||
'autoscaling:EC2_INSTANCE_TERMINATE',
|
'autoscaling:EC2_INSTANCE_TERMINATE',
|
||||||
'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'
|
'autoscaling:EC2_INSTANCE_TERMINATE_ERROR'
|
||||||
]),
|
]),
|
||||||
suspend_processes=dict(type='list', default=[])
|
suspend_processes=dict(type='list', default=[]),
|
||||||
|
metrics_collection=dict(type='bool', default=False),
|
||||||
|
metrics_granularity=dict(type='str', default='1Minute'),
|
||||||
|
metrics_list=dict(type='list', default=[
|
||||||
|
'GroupMinSize',
|
||||||
|
'GroupMaxSize',
|
||||||
|
'GroupDesiredCapacity',
|
||||||
|
'GroupInServiceInstances',
|
||||||
|
'GroupPendingInstances',
|
||||||
|
'GroupStandbyInstances',
|
||||||
|
'GroupTerminatingInstances',
|
||||||
|
'GroupTotalInstances'
|
||||||
|
])
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -208,6 +208,31 @@
|
||||||
that:
|
that:
|
||||||
- "output.viable_instances == 0"
|
- "output.viable_instances == 0"
|
||||||
|
|
||||||
|
- name: kill asg
|
||||||
|
ec2_asg:
|
||||||
|
name: "{{ resource_prefix }}-asg"
|
||||||
|
state: absent
|
||||||
|
<<: *aws_connection_info
|
||||||
|
async: 300
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
- name: create asg with asg metrics enabled
|
||||||
|
ec2_asg:
|
||||||
|
name: "{{ resource_prefix }}-asg"
|
||||||
|
metrics_collection: true
|
||||||
|
launch_config_name: "{{ resource_prefix }}-lc"
|
||||||
|
desired_capacity: 0
|
||||||
|
min_size: 0
|
||||||
|
max_size: 0
|
||||||
|
vpc_zone_identifier: "{{ testing_subnet.subnet.id }}"
|
||||||
|
state: present
|
||||||
|
<<: *aws_connection_info
|
||||||
|
register: output
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- "'Group' in output.metrics_collection.0.Metric"
|
||||||
|
|
||||||
- name: kill asg
|
- name: kill asg
|
||||||
ec2_asg:
|
ec2_asg:
|
||||||
name: "{{ resource_prefix }}-asg"
|
name: "{{ resource_prefix }}-asg"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue