elb_target / elb_target_info : Integration test fixups (#61256)

* Update AWS policy to enable management of TargetGroups

* elb_target: (integration tests) migrate to using module_defaults

* elb_target: (integration tests) lookup the AMI by name rather than hard coding AMI IDs

* elb_target_info: (integration tests) finish rename of integration test role

* elb_target: (integration tests) rename various resources to consistently use {{ resource_prefix }}

* elb_target_info: (integration tests) Migrate to using module_defaults

* elb_target_info: (integration tests) Lookup AMI by name rather than hard coding AMI IDs

* Apply suggestions from code review

Co-Authored-By: Jill R <4121322+jillr@users.noreply.github.com>

* elb_target: (integration tests) Remove the 'unsupported' alias

* Try bumping up the timeout

* Rules don't permit 'shippable' (resource_prefix uses this when run in shippable)

* Try bumping up more timeouts :/

* Avoid double evaluation of target_health assertion

* Simplify target_type usage a little (rather than constantly performing a lookup)

* mark elb_target tests 'unstable' for now, they're slow

Co-authored-by: Jill R <4121322+jillr@users.noreply.github.com>
This commit is contained in:
Mark Chappell 2020-02-21 01:13:10 +01:00 committed by GitHub
parent 65646179f1
commit 9c6495d4d4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 145 additions and 192 deletions

View file

@ -97,17 +97,16 @@
"elasticloadbalancing:*TargetGroup", "elasticloadbalancing:*TargetGroup",
"elasticloadbalancing:AddTags", "elasticloadbalancing:AddTags",
"elasticloadbalancing:ConfigureHealthCheck", "elasticloadbalancing:ConfigureHealthCheck",
"elasticloadbalancing:CreateListener", "elasticloadbalancing:Create*",
"elasticloadbalancing:CreateRule", "elasticloadbalancing:Delete*",
"elasticloadbalancing:DeleteListener", "elasticloadbalancing:DeregisterInstancesFromLoadBalancer",
"elasticloadbalancing:DeleteRule", "elasticloadbalancing:Describe*",
"elasticloadbalancing:DescribeInstanceHealth", "elasticloadbalancing:DisableAvailabilityZonesForLoadBalancer",
"elasticloadbalancing:DescribeLoadBalancer*", "elasticloadbalancing:EnableAvailabilityZonesForLoadBalancer",
"elasticloadbalancing:DescribeTags", "elasticloadbalancing:Modify*",
"elasticloadbalancing:ModifyListener", "elasticloadbalancing:Register*",
"elasticloadbalancing:ModifyLoadBalancerAttributes", "elasticloadbalancing:Deregister*",
"elasticloadbalancing:ModifyRule", "elasticloadbalancing:Remove*"
"elasticloadbalancing:RemoveTags"
], ],
"Resource": "*" "Resource": "*"
}, },

View file

@ -449,8 +449,10 @@ def create_or_update_target_group(connection, module):
changed = False changed = False
new_target_group = False new_target_group = False
params = dict() params = dict()
target_type = module.params.get("target_type")
params['Name'] = module.params.get("name") params['Name'] = module.params.get("name")
if module.params.get("target_type") != "lambda": params['TargetType'] = target_type
if target_type != "lambda":
params['Protocol'] = module.params.get("protocol").upper() params['Protocol'] = module.params.get("protocol").upper()
params['Port'] = module.params.get("port") params['Port'] = module.params.get("port")
params['VpcId'] = module.params.get("vpc_id") params['VpcId'] = module.params.get("vpc_id")
@ -500,10 +502,8 @@ def create_or_update_target_group(connection, module):
params['Matcher']['HttpCode'] = module.params.get("successful_response_codes") params['Matcher']['HttpCode'] = module.params.get("successful_response_codes")
# Get target type # Get target type
if module.params.get("target_type") is not None: if target_type == 'ip':
params['TargetType'] = module.params.get("target_type") fail_if_ip_target_type_not_supported(module)
if params['TargetType'] == 'ip':
fail_if_ip_target_type_not_supported(module)
# Get target group # Get target group
tg = get_target_group(connection, module) tg = get_target_group(connection, module)
@ -578,7 +578,7 @@ def create_or_update_target_group(connection, module):
if module.params.get("targets"): if module.params.get("targets"):
if module.params.get("target_type") != "lambda": if target_type != "lambda":
params['Targets'] = module.params.get("targets") params['Targets'] = module.params.get("targets")
# Correct type of target ports # Correct type of target ports
@ -660,7 +660,7 @@ def create_or_update_target_group(connection, module):
module.fail_json_aws( module.fail_json_aws(
e, msg="Couldn't register targets") e, msg="Couldn't register targets")
else: else:
if module.params.get("target_type") != "lambda": if target_type != "lambda":
current_instances = current_targets['TargetHealthDescriptions'] current_instances = current_targets['TargetHealthDescriptions']
@ -701,7 +701,7 @@ def create_or_update_target_group(connection, module):
tg = get_target_group(connection, module) tg = get_target_group(connection, module)
if module.params.get("targets"): if module.params.get("targets"):
if module.params.get("target_type") != "lambda": if target_type != "lambda":
params['Targets'] = module.params.get("targets") params['Targets'] = module.params.get("targets")
try: try:
connection.register_targets(TargetGroupArn=tg['TargetGroupArn'], Targets=params['Targets']) connection.register_targets(TargetGroupArn=tg['TargetGroupArn'], Targets=params['Targets'])

View file

@ -1,3 +1,4 @@
cloud/aws cloud/aws
unsupported
elb_target_group elb_target_group
shippable/aws/group4
unstable

View file

@ -0,0 +1,5 @@
resource_shortprefix: 'ansible-test-{{ resource_prefix | regex_search("([0-9]+)$") }}'
lambda_role_name: '{{ resource_shortprefix }}-elb-target-lambda'
#lambda_role_name: '{{ resource_prefix }}-elb-target-lambda'
lambda_name: '{{ resource_prefix }}-elb-target-lambda'
elb_target_group_name: '{{ resource_shortprefix }}-elb-tg'

View file

@ -1,14 +1,12 @@
--- ---
- name: set up aws connection info - name: set up lambda as elb_target
set_fact:
aws_connection_info: &aws_connection_info module_defaults:
group/aws:
aws_access_key: "{{ aws_access_key }}" aws_access_key: "{{ aws_access_key }}"
aws_secret_key: "{{ aws_secret_key }}" aws_secret_key: "{{ aws_secret_key }}"
security_token: "{{ security_token }}" security_token: "{{ security_token | default(omit) }}"
region: "{{ aws_region }}" region: "{{ aws_region }}"
no_log: yes
- name: set up lambda as elb_target
block: block:
- name: create zip to deploy lambda code - name: create zip to deploy lambda code
@ -19,21 +17,19 @@
- name: "create or update service-role for lambda" - name: "create or update service-role for lambda"
iam_role: iam_role:
<<: *aws_connection_info name: '{{ lambda_role_name }}'
name: ansible_lambda_execution
assume_role_policy_document: "{{ lookup('file', role_path + '/files/assume-role.json') }}" assume_role_policy_document: "{{ lookup('file', role_path + '/files/assume-role.json') }}"
managed_policy: managed_policy:
- arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
register: ROLE_ARN register: ROLE_ARN
- name: when it is to fast, the role is not usable. - name: when it is too fast, the role is not usable.
pause: pause:
minutes: 1 seconds: 10
- name: deploy lambda.zip to ansible_lambda_target function - name: deploy lambda.zip to ansible_lambda_target function
lambda: lambda:
<<: *aws_connection_info name: "{{ lambda_name }}"
name: "ansible_lambda_target"
state: present state: present
zip_file: "/tmp/lambda.zip" zip_file: "/tmp/lambda.zip"
runtime: "python3.7" runtime: "python3.7"
@ -47,8 +43,7 @@
- name: create empty target group - name: create empty target group
elb_target_group: elb_target_group:
<<: *aws_connection_info name: '{{ elb_target_group_name }}'
name: ansible-lambda-targetgroup
target_type: lambda target_type: lambda
state: present state: present
modify_targets: False modify_targets: False
@ -61,9 +56,8 @@
- name: allow elb to invoke the lambda function - name: allow elb to invoke the lambda function
lambda_policy: lambda_policy:
<<: *aws_connection_info
state: present state: present
function_name: ansible_lambda_target function_name: "{{ lambda_name }}"
version: "{{ lambda_function.configuration.version }}" version: "{{ lambda_function.configuration.version }}"
statement_id: elb1 statement_id: elb1
action: lambda:InvokeFunction action: lambda:InvokeFunction
@ -72,8 +66,7 @@
- name: add lambda to elb target - name: add lambda to elb target
elb_target_group: elb_target_group:
<<: *aws_connection_info name: "{{ elb_target_group_name }}"
name: ansible-lambda-targetgroup
target_type: lambda target_type: lambda
state: present state: present
targets: targets:
@ -87,8 +80,7 @@
- name: re-add lambda to elb target (idempotency) - name: re-add lambda to elb target (idempotency)
elb_target_group: elb_target_group:
<<: *aws_connection_info name: "{{ elb_target_group_name }}"
name: ansible-lambda-targetgroup
target_type: lambda target_type: lambda
state: present state: present
targets: targets:
@ -102,8 +94,7 @@
- name: remove lambda target from target group - name: remove lambda target from target group
elb_target_group: elb_target_group:
<<: *aws_connection_info name: "{{ elb_target_group_name }}"
name: ansible-lambda-targetgroup
target_type: lambda target_type: lambda
state: absent state: absent
targets: [] targets: []
@ -117,19 +108,19 @@
always: always:
- name: remove elb target group - name: remove elb target group
elb_target_group: elb_target_group:
<<: *aws_connection_info name: "{{ elb_target_group_name }}"
name: ansible-lambda-targetgroup
target_type: lambda target_type: lambda
state: absent state: absent
ignore_errors: yes
- name: remove lambda function - name: remove lambda function
lambda: lambda:
<<: *aws_connection_info name: "{{ lambda_name }}"
name: "ansible_lambda_target"
state: absent state: absent
ignore_errors: yes
- name: remove iam role for lambda - name: remove iam role for lambda
iam_role: iam_role:
<<: *aws_connection_info name: '{{ lambda_role_name }}'
name: ansible_lambda_execution
state: absent state: absent
ignore_errors: yes

View file

@ -1,8 +1,10 @@
--- ---
ec2_ami_image: ec2_ami_name: 'amzn2-ami-hvm-2.0.20190612-x86_64-gp2'
us-east-1: ami-8c1be5f6
us-east-2: ami-c5062ba0
tg_name: "ansible-test-{{ resource_prefix | regex_search('([0-9]+)$') }}-tg" resource_shortprefix: 'ansible-test-{{ resource_prefix | regex_search("([0-9]+)$") }}'
tg_tcpudp_name: "ansible-test-{{ resource_prefix | regex_search('([0-9]+)$') }}-tgtcpudp" tg_name: "{{ resource_shortprefix }}-tg"
lb_name: "ansible-test-{{ resource_prefix | regex_search('([0-9]+)$') }}-lb" tg_tcpudp_name: "{{ resource_shortprefix }}-tgtcpudp"
lb_name: "{{ resource_shortprefix }}-lb"
healthy_state:
state: 'healthy'

View file

@ -1,29 +1,35 @@
--- ---
- name: set up elb_target test prerequisites - name: set up elb_target test prerequisites
module_defaults:
group/aws:
aws_access_key: "{{ aws_access_key }}"
aws_secret_key: "{{ aws_secret_key }}"
security_token: "{{ security_token | default(omit) }}"
region: "{{ aws_region }}"
block: block:
# ============================================================
- name: - name:
debug: msg="********** Setting up elb_target test dependencies **********" debug: msg="********** Setting up elb_target test dependencies **********"
# ============================================================
- name: set up aws connection info
set_fact:
aws_connection_info: &aws_connection_info
aws_access_key: "{{ aws_access_key }}"
aws_secret_key: "{{ aws_secret_key }}"
security_token: "{{ security_token }}"
region: "{{ aws_region }}"
no_log: yes
# ============================================================ # ============================================================
- name: Find AMI to use
ec2_ami_info:
owners: 'amazon'
filters:
name: '{{ ec2_ami_name }}'
register: ec2_amis
- set_fact:
ec2_ami_image: '{{ ec2_amis.images[0].image_id }}'
- name: set up testing VPC - name: set up testing VPC
ec2_vpc_net: ec2_vpc_net:
name: "{{ resource_prefix }}-vpc" name: "{{ resource_prefix }}-vpc"
state: present state: present
cidr_block: 20.0.0.0/16 cidr_block: 20.0.0.0/16
<<: *aws_connection_info
tags: tags:
Name: "{{ resource_prefix }}-vpc" Name: "{{ resource_prefix }}-vpc"
Description: "Created by ansible-test" Description: "Created by ansible-test"
@ -33,7 +39,6 @@
ec2_vpc_igw: ec2_vpc_igw:
vpc_id: "{{ vpc.vpc.id }}" vpc_id: "{{ vpc.vpc.id }}"
state: present state: present
<<: *aws_connection_info
register: igw register: igw
- name: set up testing subnet - name: set up testing subnet
@ -44,7 +49,6 @@
az: "{{ aws_region }}a" az: "{{ aws_region }}a"
resource_tags: resource_tags:
Name: "{{ resource_prefix }}-subnet" Name: "{{ resource_prefix }}-subnet"
<<: *aws_connection_info
register: subnet_1 register: subnet_1
- name: set up testing subnet - name: set up testing subnet
@ -55,7 +59,6 @@
az: "{{ aws_region }}b" az: "{{ aws_region }}b"
resource_tags: resource_tags:
Name: "{{ resource_prefix }}-subnet" Name: "{{ resource_prefix }}-subnet"
<<: *aws_connection_info
register: subnet_2 register: subnet_2
- name: create routing rules - name: create routing rules
@ -69,7 +72,6 @@
subnets: subnets:
- "{{ subnet_1.subnet.id }}" - "{{ subnet_1.subnet.id }}"
- "{{ subnet_2.subnet.id }}" - "{{ subnet_2.subnet.id }}"
<<: *aws_connection_info
register: route_table register: route_table
- name: create testing security group - name: create testing security group
@ -86,7 +88,6 @@
from_port: 22 from_port: 22
to_port: 22 to_port: 22
cidr_ip: 0.0.0.0/0 cidr_ip: 0.0.0.0/0
<<: *aws_connection_info
register: sg register: sg
- name: set up testing target group (type=instance) - name: set up testing target group (type=instance)
@ -100,7 +101,6 @@
target_type: instance target_type: instance
tags: tags:
Description: "Created by {{ resource_prefix }}" Description: "Created by {{ resource_prefix }}"
<<: *aws_connection_info
- name: set up testing target group (type=instance) with UDP protocol - name: set up testing target group (type=instance) with UDP protocol
elb_target_group: elb_target_group:
@ -113,7 +113,6 @@
tags: tags:
Protocol: "UDP" Protocol: "UDP"
Description: "Created by {{ resource_prefix }}" Description: "Created by {{ resource_prefix }}"
<<: *aws_connection_info
- name: set up testing target group for ALB (type=instance) - name: set up testing target group for ALB (type=instance)
elb_target_group: elb_target_group:
@ -126,13 +125,12 @@
target_type: instance target_type: instance
tags: tags:
Description: "Created by {{ resource_prefix }}" Description: "Created by {{ resource_prefix }}"
<<: *aws_connection_info
- name: set up ec2 instance to use as a target - name: set up ec2 instance to use as a target
ec2: ec2:
group_id: "{{ sg.group_id }}" group_id: "{{ sg.group_id }}"
instance_type: t2.micro instance_type: t3.micro
image: "{{ ec2_ami_image[aws_region] }}" image: "{{ ec2_ami_image }}"
vpc_subnet_id: "{{ subnet_2.subnet.id }}" vpc_subnet_id: "{{ subnet_2.subnet.id }}"
instance_tags: instance_tags:
Name: "{{ resource_prefix }}-inst" Name: "{{ resource_prefix }}-inst"
@ -152,7 +150,6 @@
runcmd: runcmd:
- "service httpd start" - "service httpd start"
- echo "HELLO ANSIBLE" > /var/www/html/index.html - echo "HELLO ANSIBLE" > /var/www/html/index.html
<<: *aws_connection_info
register: ec2 register: ec2
- name: create an application load balancer - name: create an application load balancer
@ -170,7 +167,6 @@
- Type: forward - Type: forward
TargetGroupName: "{{ tg_name }}-used" TargetGroupName: "{{ tg_name }}-used"
state: present state: present
<<: *aws_connection_info
# ============================================================ # ============================================================
@ -184,7 +180,6 @@
target_group_name: "{{ tg_name }}" target_group_name: "{{ tg_name }}"
target_id: "{{ ec2.instance_ids[0] }}" target_id: "{{ ec2.instance_ids[0] }}"
state: present state: present
<<: *aws_connection_info
register: result register: result
- name: target is registered - name: target is registered
@ -192,7 +187,7 @@
that: that:
- result.changed - result.changed
- result.target_group_arn - result.target_group_arn
- "'{{ result.target_health_descriptions.target.id }}' == '{{ ec2.instance_ids[0] }}'" - result.target_health_descriptions.target.id == ec2.instance_ids[0]
# ============================================================ # ============================================================
@ -201,7 +196,6 @@
target_group_name: "{{ tg_name }}" target_group_name: "{{ tg_name }}"
target_id: "{{ ec2.instance_ids[0] }}" target_id: "{{ ec2.instance_ids[0] }}"
state: present state: present
<<: *aws_connection_info
register: result register: result
- name: target was already registered - name: target was already registered
@ -217,7 +211,6 @@
target_id: "{{ ec2.instance_ids[0] }}" target_id: "{{ ec2.instance_ids[0] }}"
state: absent state: absent
deregister_unused: true deregister_unused: true
<<: *aws_connection_info
register: result register: result
- name: target group was deleted - name: target group was deleted
@ -234,8 +227,7 @@
target_id: "{{ ec2.instance_ids[0] }}" target_id: "{{ ec2.instance_ids[0] }}"
state: present state: present
target_status: healthy target_status: healthy
target_status_timeout: 200 target_status_timeout: 400
<<: *aws_connection_info
register: result register: result
- name: target is registered - name: target is registered
@ -243,8 +235,8 @@
that: that:
- result.changed - result.changed
- result.target_group_arn - result.target_group_arn
- "'{{ result.target_health_descriptions.target.id }}' == '{{ ec2.instance_ids[0] }}'" - result.target_health_descriptions.target.id == ec2.instance_ids[0]
- "{{ result.target_health_descriptions.target_health }} == {'state': 'healthy'}" - result.target_health_descriptions.target_health == healthy_state
# ============================================================ # ============================================================
@ -255,7 +247,6 @@
state: absent state: absent
target_status: unused target_status: unused
target_status_timeout: 400 target_status_timeout: 400
<<: *aws_connection_info
register: result register: result
- name: target was deregistered - name: target was deregistered
@ -270,7 +261,6 @@
target_group_name: "{{ tg_name }}-used" target_group_name: "{{ tg_name }}-used"
target_id: "{{ ec2.instance_ids[0] }}" target_id: "{{ ec2.instance_ids[0] }}"
state: absent state: absent
<<: *aws_connection_info
register: result register: result
- name: target was already deregistered - name: target was already deregistered
@ -286,8 +276,7 @@
target_id: "{{ ec2.instance_ids[0] }}" target_id: "{{ ec2.instance_ids[0] }}"
state: present state: present
target_status: healthy target_status: healthy
target_status_timeout: 200 target_status_timeout: 400
<<: *aws_connection_info
register: result register: result
- name: target is registered - name: target is registered
@ -295,15 +284,14 @@
that: that:
- result.changed - result.changed
- result.target_group_arn - result.target_group_arn
- "'{{ result.target_health_descriptions.target.id }}' == '{{ ec2.instance_ids[0] }}'" - result.target_health_descriptions.target.id == ec2.instance_ids[0]
- "{{ result.target_health_descriptions.target_health }} == {'state': 'healthy'}" - result.target_health_descriptions.target_health == healthy_state
- name: start deregisteration but don't wait - name: start deregisteration but don't wait
elb_target: elb_target:
target_group_name: "{{ tg_name }}-used" target_group_name: "{{ tg_name }}-used"
target_id: "{{ ec2.instance_ids[0] }}" target_id: "{{ ec2.instance_ids[0] }}"
state: absent state: absent
<<: *aws_connection_info
register: result register: result
- name: target is starting to deregister - name: target is starting to deregister
@ -319,7 +307,6 @@
state: absent state: absent
target_status: unused target_status: unused
target_status_timeout: 400 target_status_timeout: 400
<<: *aws_connection_info
register: result register: result
- name: target was deregistered already and now has finished - name: target was deregistered already and now has finished
@ -339,7 +326,7 @@
ec2: ec2:
group_id: "{{ sg.group_id }}" group_id: "{{ sg.group_id }}"
instance_type: t2.micro instance_type: t2.micro
image: "{{ ec2_ami_image[aws_region] }}" image: "{{ ec2_ami_image }}"
vpc_subnet_id: "{{ subnet_2.subnet.id }}" vpc_subnet_id: "{{ subnet_2.subnet.id }}"
instance_tags: instance_tags:
Name: "{{ resource_prefix }}-inst" Name: "{{ resource_prefix }}-inst"
@ -350,7 +337,6 @@
volumes: [] volumes: []
wait: true wait: true
ebs_optimized: false ebs_optimized: false
<<: *aws_connection_info
ignore_errors: true ignore_errors: true
- name: remove testing target groups - name: remove testing target groups
@ -365,8 +351,7 @@
tags: tags:
Description: "Created by {{ resource_prefix }}" Description: "Created by {{ resource_prefix }}"
wait: true wait: true
wait_timeout: 200 wait_timeout: 400
<<: *aws_connection_info
register: removed register: removed
retries: 10 retries: 10
until: removed is not failed until: removed is not failed
@ -387,8 +372,7 @@
Description: "Created by {{ resource_prefix }}" Description: "Created by {{ resource_prefix }}"
Protocol: "UDP" Protocol: "UDP"
wait: true wait: true
wait_timeout: 200 wait_timeout: 400
<<: *aws_connection_info
register: removed register: removed
retries: 10 retries: 10
until: removed is not failed until: removed is not failed
@ -412,8 +396,7 @@
TargetGroupName: "{{ tg_name }}-used" TargetGroupName: "{{ tg_name }}-used"
state: absent state: absent
wait: true wait: true
wait_timeout: 200 wait_timeout: 400
<<: *aws_connection_info
register: removed register: removed
retries: 10 retries: 10
until: removed is not failed until: removed is not failed
@ -434,7 +417,6 @@
from_port: 22 from_port: 22
to_port: 22 to_port: 22
cidr_ip: 0.0.0.0/0 cidr_ip: 0.0.0.0/0
<<: *aws_connection_info
register: removed register: removed
retries: 10 retries: 10
until: removed is not failed until: removed is not failed
@ -445,7 +427,6 @@
state: absent state: absent
lookup: id lookup: id
route_table_id: "{{ route_table.route_table.id }}" route_table_id: "{{ route_table.route_table.id }}"
<<: *aws_connection_info
register: removed register: removed
retries: 10 retries: 10
until: removed is not failed until: removed is not failed
@ -459,7 +440,6 @@
az: "{{ aws_region }}a" az: "{{ aws_region }}a"
resource_tags: resource_tags:
Name: "{{ resource_prefix }}-subnet" Name: "{{ resource_prefix }}-subnet"
<<: *aws_connection_info
register: removed register: removed
retries: 10 retries: 10
until: removed is not failed until: removed is not failed
@ -473,7 +453,6 @@
az: "{{ aws_region }}b" az: "{{ aws_region }}b"
resource_tags: resource_tags:
Name: "{{ resource_prefix }}-subnet" Name: "{{ resource_prefix }}-subnet"
<<: *aws_connection_info
register: removed register: removed
retries: 10 retries: 10
until: removed is not failed until: removed is not failed
@ -483,7 +462,6 @@
ec2_vpc_igw: ec2_vpc_igw:
vpc_id: "{{ vpc.vpc.id }}" vpc_id: "{{ vpc.vpc.id }}"
state: absent state: absent
<<: *aws_connection_info
register: removed register: removed
retries: 10 retries: 10
until: removed is not failed until: removed is not failed
@ -497,7 +475,6 @@
tags: tags:
Name: "{{ resource_prefix }}-vpc" Name: "{{ resource_prefix }}-vpc"
Description: "Created by ansible-test" Description: "Created by ansible-test"
<<: *aws_connection_info
register: removed register: removed
retries: 10 retries: 10
until: removed is not failed until: removed is not failed

View file

@ -4,31 +4,38 @@
tasks: tasks:
- name: set up aws connection info - name: set up aws connection info
set_fact: module_defaults:
aws_connection_info: &aws_connection_info group/aws:
aws_access_key: madeup aws_access_key: "{{ aws_access_key }}"
aws_secret_key: madeup aws_secret_key: "{{ aws_secret_key }}"
security_token: madeup security_token: "{{ security_token | default(omit) }}"
region: "{{ aws_region }}" region: "{{ aws_region }}"
no_log: yes block:
- name: set up testing target group (type=ip)
elb_target_group:
state: present
#name: "{{ resource_shortprefix }}-tg"
name: "ansible-test-{{ resource_prefix | regex_search('([0-9]+)$') }}-tg"
health_check_port: 80
protocol: http
port: 80
vpc_id: 'vpc-abcd1234'
target_type: ip
tags:
Description: "Created by {{ resource_prefix }}"
register: elb_target_group_type_ip
ignore_errors: yes
- name: set up testing target group (type=ip) - name: check that setting up target group with type=ip fails with friendly message
elb_target_group: assert:
name: "ansible-test-{{ resource_prefix | regex_search('([0-9]+)$') }}-tg" that:
health_check_port: 80 - elb_target_group_type_ip is failed
protocol: http - "'msg' in elb_target_group_type_ip"
port: 80
vpc_id: 'vpc-abcd1234'
state: present
target_type: ip
tags:
Description: "Created by {{ resource_prefix }}"
<<: *aws_connection_info
register: elb_target_group_type_ip
ignore_errors: yes
- name: check that setting up target group with type=ip fails with friendly message # In the off-chance that this went (partially) through when it shouldn't...
assert: always:
that: - name: Remove testing target group (type=ip)
- elb_target_group_type_ip is failed elb_target_group:
- "'msg' in elb_target_group_type_ip" state: absent
#name: "{{ resource_shortprefix }}-tg"
name: "ansible-test-{{ resource_prefix | regex_search('([0-9]+)$') }}-tg"

View file

@ -1,7 +1,5 @@
--- ---
ec2_ami_image: ec2_ami_name: 'amzn2-ami-hvm-2.0.20190612-x86_64-gp2'
us-east-1: ami-8c1be5f6
us-east-2: ami-c5062ba0
tg_name: "ansible-test-{{ resource_prefix | regex_search('([0-9]+)$') }}-tg" tg_name: "ansible-test-{{ resource_prefix | regex_search('([0-9]+)$') }}-tg"
lb_name: "ansible-test-{{ resource_prefix | regex_search('([0-9]+)$') }}-lb" lb_name: "ansible-test-{{ resource_prefix | regex_search('([0-9]+)$') }}-lb"

View file

@ -1,20 +1,27 @@
--- ---
- name: set up elb_target_info test prerequisites - name: set up elb_target_info test prerequisites
module_defaults:
group/aws:
aws_access_key: "{{ aws_access_key }}"
aws_secret_key: "{{ aws_secret_key }}"
security_token: "{{ security_token | default(omit) }}"
region: "{{ aws_region }}"
block: block:
- name:
debug: msg="********** Setting up elb_target_info test dependencies **********"
# ============================================================ # ============================================================
- name: set up aws connection info - name:
set_fact: debug: msg="********** Setting up elb_target_info test dependencies **********"
aws_connection_info: &aws_connection_info
aws_access_key: "{{ aws_access_key }}" - name: Find AMI to use
aws_secret_key: "{{ aws_secret_key }}" ec2_ami_info:
security_token: "{{ security_token }}" owners: 'amazon'
region: "{{ aws_region }}" filters:
no_log: yes name: '{{ ec2_ami_name }}'
register: ec2_amis
- set_fact:
ec2_ami_image: '{{ ec2_amis.images[0].image_id }}'
# ============================================================ # ============================================================
@ -23,7 +30,6 @@
name: "{{ resource_prefix }}-vpc" name: "{{ resource_prefix }}-vpc"
state: present state: present
cidr_block: 20.0.0.0/16 cidr_block: 20.0.0.0/16
<<: *aws_connection_info
tags: tags:
Name: "{{ resource_prefix }}-vpc" Name: "{{ resource_prefix }}-vpc"
Description: "Created by ansible-test" Description: "Created by ansible-test"
@ -33,7 +39,6 @@
ec2_vpc_igw: ec2_vpc_igw:
vpc_id: "{{ vpc.vpc.id }}" vpc_id: "{{ vpc.vpc.id }}"
state: present state: present
<<: *aws_connection_info
register: igw register: igw
- name: set up testing subnet - name: set up testing subnet
@ -44,7 +49,6 @@
az: "{{ aws_region }}a" az: "{{ aws_region }}a"
resource_tags: resource_tags:
Name: "{{ resource_prefix }}-subnet" Name: "{{ resource_prefix }}-subnet"
<<: *aws_connection_info
register: subnet_1 register: subnet_1
- name: set up testing subnet - name: set up testing subnet
@ -55,7 +59,6 @@
az: "{{ aws_region }}b" az: "{{ aws_region }}b"
resource_tags: resource_tags:
Name: "{{ resource_prefix }}-subnet" Name: "{{ resource_prefix }}-subnet"
<<: *aws_connection_info
register: subnet_2 register: subnet_2
- name: create routing rules - name: create routing rules
@ -69,7 +72,6 @@
subnets: subnets:
- "{{ subnet_1.subnet.id }}" - "{{ subnet_1.subnet.id }}"
- "{{ subnet_2.subnet.id }}" - "{{ subnet_2.subnet.id }}"
<<: *aws_connection_info
register: route_table register: route_table
- name: create testing security group - name: create testing security group
@ -86,7 +88,6 @@
from_port: 22 from_port: 22
to_port: 22 to_port: 22
cidr_ip: 0.0.0.0/0 cidr_ip: 0.0.0.0/0
<<: *aws_connection_info
register: sg register: sg
- name: set up testing target group (type=instance) - name: set up testing target group (type=instance)
@ -103,7 +104,6 @@
deregistration_delay_timeout: 30 deregistration_delay_timeout: 30
tags: tags:
Description: "Created by {{ resource_prefix }}" Description: "Created by {{ resource_prefix }}"
<<: *aws_connection_info
- name: set up testing target group (type=ip) - name: set up testing target group (type=ip)
register: nlb_target_group register: nlb_target_group
@ -116,10 +116,9 @@
state: present state: present
# set this to 30 to test polling for changes, instead of having everything go out immediately # set this to 30 to test polling for changes, instead of having everything go out immediately
deregistration_delay_timeout: 30 deregistration_delay_timeout: 30
target_type: ip target_type: ip
tags: tags:
Description: "Created by {{ resource_prefix }}" Description: "Created by {{ resource_prefix }}"
<<: *aws_connection_info
- name: set up testing target group which will not be associated with any load balancers - name: set up testing target group which will not be associated with any load balancers
register: idle_target_group register: idle_target_group
@ -130,16 +129,15 @@
port: 80 port: 80
vpc_id: '{{ vpc.vpc.id }}' vpc_id: '{{ vpc.vpc.id }}'
state: present state: present
target_type: instance target_type: instance
tags: tags:
Description: "Created by {{ resource_prefix }}" Description: "Created by {{ resource_prefix }}"
<<: *aws_connection_info
- name: set up ec2 instance to use as a target - name: set up ec2 instance to use as a target
ec2: ec2:
group_id: "{{ sg.group_id }}" group_id: "{{ sg.group_id }}"
instance_type: t2.micro instance_type: t2.micro
image: "{{ ec2_ami_image[aws_region] }}" image: "{{ ec2_ami_image }}"
vpc_subnet_id: "{{ subnet_2.subnet.id }}" vpc_subnet_id: "{{ subnet_2.subnet.id }}"
instance_tags: instance_tags:
Name: "{{ resource_prefix }}-inst" Name: "{{ resource_prefix }}-inst"
@ -159,7 +157,6 @@
runcmd: runcmd:
- "service httpd start" - "service httpd start"
- echo "HELLO ANSIBLE" > /var/www/html/index.html - echo "HELLO ANSIBLE" > /var/www/html/index.html
<<: *aws_connection_info
register: ec2 register: ec2
- name: create an application load balancer - name: create an application load balancer
@ -177,7 +174,6 @@
- Type: forward - Type: forward
TargetGroupName: "{{ tg_name }}-inst" TargetGroupName: "{{ tg_name }}-inst"
state: present state: present
<<: *aws_connection_info
- name: create a network load balancer - name: create a network load balancer
@ -193,23 +189,20 @@
- Type: forward - Type: forward
TargetGroupName: "{{ tg_name }}-ip" TargetGroupName: "{{ tg_name }}-ip"
state: present state: present
<<: *aws_connection_info
- name: register with the ALB - name: register with the ALB
elb_target: elb_target:
target_group_name: "{{ tg_name }}-inst" target_group_name: "{{ tg_name }}-inst"
target_id: "{{ ec2.instance_ids[0] }}" target_id: "{{ ec2.instance_ids[0] }}"
state: present state: present
target_status: "initial" target_status: "initial"
<<: *aws_connection_info
- name: register with the NLB IP target group - name: register with the NLB IP target group
elb_target: elb_target:
target_group_name: "{{ tg_name }}-ip" target_group_name: "{{ tg_name }}-ip"
target_id: "{{ ec2.instances[0].private_ip }}" target_id: "{{ ec2.instances[0].private_ip }}"
state: present state: present
target_status: "initial" target_status: "initial"
<<: *aws_connection_info
# ============================================================ # ============================================================
@ -219,7 +212,6 @@
- name: gather facts - name: gather facts
elb_target_info: elb_target_info:
instance_id: "{{ ec2.instance_ids[0]}}" instance_id: "{{ ec2.instance_ids[0]}}"
<<: *aws_connection_info
register: target_facts register: target_facts
- assert: - assert:
@ -237,12 +229,10 @@
target_id: "{{ ec2.instance_ids[0]}}" target_id: "{{ ec2.instance_ids[0]}}"
state: present state: present
target_status: "unused" target_status: "unused"
<<: *aws_connection_info
- name: gather facts again, including the idle group - name: gather facts again, including the idle group
elb_target_info: elb_target_info:
instance_id: "{{ ec2.instance_ids[0]}}" instance_id: "{{ ec2.instance_ids[0]}}"
<<: *aws_connection_info
register: target_facts register: target_facts
- assert: - assert:
@ -257,7 +247,6 @@
elb_target_info: elb_target_info:
instance_id: "{{ ec2.instance_ids[0]}}" instance_id: "{{ ec2.instance_ids[0]}}"
get_unused_target_groups: false get_unused_target_groups: false
<<: *aws_connection_info
register: target_facts register: target_facts
- assert: - assert:
@ -267,29 +256,27 @@
- "{{ idle_target_group.target_group_arn not in (target_facts.instance_target_groups | map(attribute='target_group_arn')) }}" - "{{ idle_target_group.target_group_arn not in (target_facts.instance_target_groups | map(attribute='target_group_arn')) }}"
- (target_facts.instance_target_groups | length) == 2 - (target_facts.instance_target_groups | length) == 2
msg: "target_facts.instance_target_groups did not gather unused target groups when variable was set" msg: "target_facts.instance_target_groups did not gather unused target groups when variable was set"
- name: register twice in the same target group - name: register twice in the same target group
elb_target: elb_target:
target_group_name: "{{ tg_name }}-ip" target_group_name: "{{ tg_name }}-ip"
target_port: 22 target_port: 22
target_id: "{{ ec2.instances[0].private_ip }}" target_id: "{{ ec2.instances[0].private_ip }}"
state: present state: present
target_status: "healthy" target_status: "healthy"
target_status_timeout: 300 target_status_timeout: 400
<<: *aws_connection_info
- name: gather facts - name: gather facts
elb_target_info: elb_target_info:
instance_id: "{{ ec2.instance_ids[0] }}" instance_id: "{{ ec2.instance_ids[0] }}"
get_unused_target_groups: false get_unused_target_groups: false
<<: *aws_connection_info
register: target_facts register: target_facts
- assert: - assert:
that: that:
- alb_target_group.target_group_arn in (target_facts.instance_target_groups | map(attribute='target_group_arn')) - alb_target_group.target_group_arn in (target_facts.instance_target_groups | map(attribute='target_group_arn'))
- nlb_target_group.target_group_arn in (target_facts.instance_target_groups | map(attribute='target_group_arn')) - nlb_target_group.target_group_arn in (target_facts.instance_target_groups | map(attribute='target_group_arn'))
- (target_facts.instance_target_groups | length) == 2 - (target_facts.instance_target_groups | length) == 2
- (target_facts.instance_target_groups | - (target_facts.instance_target_groups |
selectattr('target_group_arn', 'equalto', nlb_target_group.target_group_arn) | selectattr('target_group_arn', 'equalto', nlb_target_group.target_group_arn) |
map(attribute='targets') | map(attribute='targets') |
@ -309,7 +296,6 @@
target_id: "{{ item.1.target_id }}" target_id: "{{ item.1.target_id }}"
state: absent state: absent
target_status: "draining" target_status: "draining"
<<: *aws_connection_info
with_subelements: with_subelements:
- "{{ original_target_groups }}" - "{{ original_target_groups }}"
- "targets" - "targets"
@ -318,7 +304,6 @@
elb_target_info: elb_target_info:
get_unused_target_groups: false get_unused_target_groups: false
instance_id: "{{ ec2.instance_ids[0] }}" instance_id: "{{ ec2.instance_ids[0] }}"
<<: *aws_connection_info
register: target_facts register: target_facts
until: (target_facts.instance_target_groups | length) == 0 until: (target_facts.instance_target_groups | length) == 0
retries: 60 retries: 60
@ -332,7 +317,6 @@
target_id: "{{ item.1.target_id }}" target_id: "{{ item.1.target_id }}"
state: present state: present
target_status: "initial" target_status: "initial"
<<: *aws_connection_info
with_subelements: with_subelements:
- "{{ original_target_groups }}" - "{{ original_target_groups }}"
- "targets" - "targets"
@ -343,7 +327,6 @@
elb_target_info: elb_target_info:
get_unused_target_groups: false get_unused_target_groups: false
instance_id: "{{ ec2.instance_ids[0] }}" instance_id: "{{ ec2.instance_ids[0] }}"
<<: *aws_connection_info
register: target_facts register: target_facts
until: > until: >
(target_facts.instance_target_groups | (target_facts.instance_target_groups |
@ -361,7 +344,7 @@
that: that:
- alb_target_group.target_group_arn in (target_facts.instance_target_groups | map(attribute='target_group_arn')) - alb_target_group.target_group_arn in (target_facts.instance_target_groups | map(attribute='target_group_arn'))
- nlb_target_group.target_group_arn in (target_facts.instance_target_groups | map(attribute='target_group_arn')) - nlb_target_group.target_group_arn in (target_facts.instance_target_groups | map(attribute='target_group_arn'))
- (target_facts.instance_target_groups | length) == 2 - (target_facts.instance_target_groups | length) == 2
- (target_facts.instance_target_groups | - (target_facts.instance_target_groups |
selectattr('target_group_arn', 'equalto', nlb_target_group.target_group_arn) | selectattr('target_group_arn', 'equalto', nlb_target_group.target_group_arn) |
map(attribute='targets') | map(attribute='targets') |
@ -379,7 +362,7 @@
ec2: ec2:
group_id: "{{ sg.group_id }}" group_id: "{{ sg.group_id }}"
instance_type: t2.micro instance_type: t2.micro
image: "{{ ec2_ami_image[aws_region] }}" image: "{{ ec2_ami_image }}"
vpc_subnet_id: "{{ subnet_2.subnet.id }}" vpc_subnet_id: "{{ subnet_2.subnet.id }}"
instance_tags: instance_tags:
Name: "{{ resource_prefix }}-inst" Name: "{{ resource_prefix }}-inst"
@ -390,7 +373,6 @@
volumes: [] volumes: []
wait: true wait: true
ebs_optimized: false ebs_optimized: false
<<: *aws_connection_info
ignore_errors: true ignore_errors: true
- name: remove application load balancer - name: remove application load balancer
@ -410,7 +392,6 @@
state: absent state: absent
wait: true wait: true
wait_timeout: 200 wait_timeout: 200
<<: *aws_connection_info
register: removed register: removed
retries: 10 retries: 10
until: removed is not failed until: removed is not failed
@ -421,7 +402,6 @@
elb_network_lb: elb_network_lb:
name: "{{ lb_name }}-nlb" name: "{{ lb_name }}-nlb"
state: absent state: absent
<<: *aws_connection_info
- name: remove testing target groups - name: remove testing target groups
elb_target_group: elb_target_group:
@ -436,7 +416,6 @@
Description: "Created by {{ resource_prefix }}" Description: "Created by {{ resource_prefix }}"
wait: true wait: true
wait_timeout: 200 wait_timeout: 200
<<: *aws_connection_info
register: removed register: removed
retries: 10 retries: 10
until: removed is not failed until: removed is not failed
@ -461,7 +440,6 @@
from_port: 22 from_port: 22
to_port: 22 to_port: 22
cidr_ip: 0.0.0.0/0 cidr_ip: 0.0.0.0/0
<<: *aws_connection_info
register: removed register: removed
retries: 10 retries: 10
until: removed is not failed until: removed is not failed
@ -472,7 +450,6 @@
state: absent state: absent
lookup: id lookup: id
route_table_id: "{{ route_table.route_table.id }}" route_table_id: "{{ route_table.route_table.id }}"
<<: *aws_connection_info
register: removed register: removed
retries: 10 retries: 10
until: removed is not failed until: removed is not failed
@ -486,7 +463,6 @@
az: "{{ aws_region }}a" az: "{{ aws_region }}a"
resource_tags: resource_tags:
Name: "{{ resource_prefix }}-subnet" Name: "{{ resource_prefix }}-subnet"
<<: *aws_connection_info
register: removed register: removed
retries: 10 retries: 10
until: removed is not failed until: removed is not failed
@ -500,7 +476,6 @@
az: "{{ aws_region }}b" az: "{{ aws_region }}b"
resource_tags: resource_tags:
Name: "{{ resource_prefix }}-subnet" Name: "{{ resource_prefix }}-subnet"
<<: *aws_connection_info
register: removed register: removed
retries: 10 retries: 10
until: removed is not failed until: removed is not failed
@ -510,7 +485,6 @@
ec2_vpc_igw: ec2_vpc_igw:
vpc_id: "{{ vpc.vpc.id }}" vpc_id: "{{ vpc.vpc.id }}"
state: absent state: absent
<<: *aws_connection_info
register: removed register: removed
retries: 10 retries: 10
until: removed is not failed until: removed is not failed
@ -524,7 +498,6 @@
tags: tags:
Name: "{{ resource_prefix }}-vpc" Name: "{{ resource_prefix }}-vpc"
Description: "Created by ansible-test" Description: "Created by ansible-test"
<<: *aws_connection_info
register: removed register: removed
retries: 10 retries: 10
until: removed is not failed until: removed is not failed