From 9308b2c8e04983b3300538f3ce8a0fac647a6b7a Mon Sep 17 00:00:00 2001 From: IMMORTALxJO Date: Mon, 18 Mar 2019 03:09:55 +0300 Subject: [PATCH] modules: elb_target_group_facts: added targets_health_description (#53902) * MODULE: elb_target_group_facts add targets_health * MODULE: elb_target_group_facts remove trailing whitespace * MODULE: elb_target_group_facts version_added for collect_targets_health * MODULE: elb_target_group_facts fix sample case * MODULE: elb_target_group_facts improve targets_health_description documentation --- .../cloud/amazon/elb_target_group_facts.py | 57 ++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/lib/ansible/modules/cloud/amazon/elb_target_group_facts.py b/lib/ansible/modules/cloud/amazon/elb_target_group_facts.py index 56a21f911ca..46dcae438d8 100644 --- a/lib/ansible/modules/cloud/amazon/elb_target_group_facts.py +++ b/lib/ansible/modules/cloud/amazon/elb_target_group_facts.py @@ -32,6 +32,13 @@ options: description: - The names of the target groups. required: false + collect_targets_health: + description: + - When set to "yes", output contains targets health description + required: false + default: no + type: bool + version_added: 2.8 extends_documentation_fragment: - aws @@ -146,6 +153,41 @@ target_groups: returned: always type: str sample: "arn:aws:elasticloadbalancing:ap-southeast-2:01234567890:targetgroup/mytargetgroup/aabbccddee0044332211" + targets_health_description: + description: Targets health description. + returned: when collect_targets_health is enabled + type: complex + contains: + health_check_port: + description: The port to check target health. + returned: always + type: string + sample: '80' + target: + description: The target metadata. + returned: always + type: complex + contains: + id: + description: The ID of the target. + returned: always + type: string + sample: i-0123456789 + port: + description: The port to use to connect with the target. + returned: always + type: int + sample: 80 + target_health: + description: The target health status. + returned: always + type: complex + contains: + state: + description: The state of the target health. + returned: always + type: string + sample: healthy target_group_name: description: The name of the target group. returned: always @@ -197,11 +239,20 @@ def get_target_group_tags(connection, module, target_group_arn): module.fail_json(msg=e.message, exception=traceback.format_exc(), **camel_dict_to_snake_dict(e.response)) +def get_target_group_targets_health(connection, module, target_group_arn): + + try: + return connection.describe_target_health(TargetGroupArn=target_group_arn)['TargetHealthDescriptions'] + except ClientError as e: + module.fail_json(msg=e.message, exception=traceback.format_exc(), **camel_dict_to_snake_dict(e.response)) + + def list_target_groups(connection, module): load_balancer_arn = module.params.get("load_balancer_arn") target_group_arns = module.params.get("target_group_arns") names = module.params.get("names") + collect_targets_health = module.params.get("collect_targets_health") try: target_group_paginator = connection.get_paginator('describe_target_groups') @@ -231,6 +282,9 @@ def list_target_groups(connection, module): # Get tags for each target group for snaked_target_group in snaked_target_groups: snaked_target_group['tags'] = get_target_group_tags(connection, module, snaked_target_group['target_group_arn']) + if collect_targets_health: + snaked_target_group['targets_health_description'] = [camel_dict_to_snake_dict( + target) for target in get_target_group_targets_health(connection, module, snaked_target_group['target_group_arn'])] module.exit_json(target_groups=snaked_target_groups) @@ -242,7 +296,8 @@ def main(): dict( load_balancer_arn=dict(type='str'), target_group_arns=dict(type='list'), - names=dict(type='list') + names=dict(type='list'), + collect_targets_health=dict(default=False, type='bool', required=False) ) )