From 866239e01af12ef1fe2d4c6202c5b8bd4329c01f Mon Sep 17 00:00:00 2001 From: Rob Date: Tue, 23 Jan 2018 08:47:41 +1100 Subject: [PATCH] [cloud] Add support for using IP addresses in target groups (#34266) * Add support for IP based ELB target groups. Fixes #30962 * Add support for using IP addresses in target groups --- .../modules/cloud/amazon/elb_target_group.py | 77 ++++++++++++++----- 1 file changed, 57 insertions(+), 20 deletions(-) diff --git a/lib/ansible/modules/cloud/amazon/elb_target_group.py b/lib/ansible/modules/cloud/amazon/elb_target_group.py index 5042bf37ae..eb5918e259 100644 --- a/lib/ansible/modules/cloud/amazon/elb_target_group.py +++ b/lib/ansible/modules/cloud/amazon/elb_target_group.py @@ -13,10 +13,11 @@ ANSIBLE_METADATA = {'metadata_version': '1.1', DOCUMENTATION = ''' --- module: elb_target_group -short_description: Manage a target group for an Application load balancer +short_description: Manage a target group for an Application or Network load balancer description: - - Manage an AWS Application Elastic Load Balancer target group. See - U(http://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html) for details. + - Manage an AWS Elastic Load Balancer target group. See + U(http://docs.aws.amazon.com/elasticloadbalancing/latest/application/load-balancer-target-groups.html) or + U(http://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-target-groups.html) for details. version_added: "2.4" requirements: [ boto3 ] author: "Rob White (@wimnat)" @@ -97,14 +98,25 @@ options: default: lb_cookie successful_response_codes: description: - - > - The HTTP codes to use when checking for a successful response from a target. You can specify multiple values (for example, "200,202") or a range of + - The HTTP codes to use when checking for a successful response from a target. You can specify multiple values (for example, "200,202") or a range of values (for example, "200-299"). required: false tags: description: - A dictionary of one or more tags to assign to the target group. required: false + target_type: + description: + - The type of target that you must specify when registering targets with this target group. The possible values are + C(instance) (targets are specified by instance ID) or C(ip) (targets are specified by IP address). + Note that you can't specify targets for a target group using both instance IDs and IP addresses. + If the target type is ip, specify IP addresses from the subnets of the virtual private cloud (VPC) for the target + group, the RFC 1918 range (10.0.0.0/8, 172.16.0.0/12, and 192.168.0.0/16), and the RFC 6598 range (100.64.0.0/10). + You can't specify publicly routable IP addresses. + required: false + default: instance + choices: ['instance', 'ip'] + version_added: 2.5 targets: description: - A list of targets to assign to the target group. This parameter defaults to an empty list. Unless you set the 'modify_targets' parameter then @@ -151,22 +163,42 @@ EXAMPLES = ''' name: mytargetgroup state: absent -# Create a target group with targets +# Create a target group with instance targets - elb_target_group: - name: mytargetgroup - protocol: http - port: 81 - vpc_id: vpc-01234567 - health_check_path: / - successful_response_codes: "200,250-260" - targets: - - Id: i-01234567 - Port: 80 - - Id: i-98765432 - Port: 80 - state: present - wait_timeout: 200 - wait: True + name: mytargetgroup + protocol: http + port: 81 + vpc_id: vpc-01234567 + health_check_path: / + successful_response_codes: "200,250-260" + targets: + - Id: i-01234567 + Port: 80 + - Id: i-98765432 + Port: 80 + state: present + wait_timeout: 200 + wait: True + +# Create a target group with IP address targets +- elb_target_group: + name: mytargetgroup + protocol: http + port: 81 + vpc_id: vpc-01234567 + health_check_path: / + successful_response_codes: "200,250-260" + target_type: ip + targets: + - Id: 10.0.0.10 + Port: 80 + AvailabilityZone: all + - Id: 10.0.0.20 + Port: 80 + state: present + wait_timeout: 200 + wait: True + ''' RETURN = ''' @@ -380,6 +412,10 @@ def create_or_update_target_group(connection, module): params['Matcher'] = {} params['Matcher']['HttpCode'] = module.params.get("successful_response_codes") + # Get target type + if module.params.get("target_type") is not None: + params['TargetType'] = module.params.get("target_type") + # Get target group tg = get_target_group(connection, module) @@ -645,6 +681,7 @@ def main(): state=dict(required=True, choices=['present', 'absent'], type='str'), successful_response_codes=dict(type='str'), tags=dict(default={}, type='dict'), + target_type=dict(type='str', default='instance', choices=['instance', 'ip']), targets=dict(type='list'), unhealthy_threshold_count=dict(type='int'), vpc_id=dict(type='str'),