9451212855
* New module - elb_target * Work to add deregister functionality * Add jurajseffer work on waiting for status change * List the set of statuses as a choices list * default target_status_timeout is 60 * Add 'unavailable' as a target status choice per API docs * Add support to remove targets that are in unused state * add support for availability zone selection Fix deregistering targets from used target groups Fix waiting for unused state for targets that have started deregistering
482 lines
14 KiB
YAML
482 lines
14 KiB
YAML
---
|
|
- name: set up elb_target test prerequisites
|
|
|
|
block:
|
|
|
|
- name:
|
|
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: create target group name
|
|
set_fact:
|
|
tg_name: "ansible-test-{{ resource_prefix | regex_search('([0-9]+)$') }}-tg"
|
|
|
|
- name: create application load balancer name
|
|
set_fact:
|
|
lb_name: "ansible-test-{{ resource_prefix | regex_search('([0-9]+)$') }}-lb"
|
|
|
|
# ============================================================
|
|
|
|
- name: set up testing VPC
|
|
ec2_vpc_net:
|
|
name: "{{ resource_prefix }}-vpc"
|
|
state: present
|
|
cidr_block: 20.0.0.0/16
|
|
<<: *aws_connection_info
|
|
tags:
|
|
Name: "{{ resource_prefix }}-vpc"
|
|
Description: "Created by ansible-test"
|
|
register: vpc
|
|
|
|
- name: set up testing internet gateway
|
|
ec2_vpc_igw:
|
|
vpc_id: "{{ vpc.vpc.id }}"
|
|
state: present
|
|
<<: *aws_connection_info
|
|
register: igw
|
|
|
|
- name: set up testing subnet
|
|
ec2_vpc_subnet:
|
|
state: present
|
|
vpc_id: "{{ vpc.vpc.id }}"
|
|
cidr: 20.0.0.0/18
|
|
az: "{{ aws_region }}a"
|
|
resource_tags:
|
|
Name: "{{ resource_prefix }}-subnet"
|
|
<<: *aws_connection_info
|
|
register: subnet_1
|
|
|
|
- name: set up testing subnet
|
|
ec2_vpc_subnet:
|
|
state: present
|
|
vpc_id: "{{ vpc.vpc.id }}"
|
|
cidr: 20.0.64.0/18
|
|
az: "{{ aws_region }}b"
|
|
resource_tags:
|
|
Name: "{{ resource_prefix }}-subnet"
|
|
<<: *aws_connection_info
|
|
register: subnet_2
|
|
|
|
- name: create routing rules
|
|
ec2_vpc_route_table:
|
|
vpc_id: "{{ vpc.vpc.id }}"
|
|
tags:
|
|
created: "{{ resource_prefix }}-route"
|
|
routes:
|
|
- dest: 0.0.0.0/0
|
|
gateway_id: "{{ igw.gateway_id }}"
|
|
subnets:
|
|
- "{{ subnet_1.subnet.id }}"
|
|
- "{{ subnet_2.subnet.id }}"
|
|
<<: *aws_connection_info
|
|
register: route_table
|
|
|
|
- name: create testing security group
|
|
ec2_group:
|
|
name: "{{ resource_prefix }}-sg"
|
|
description: a security group for ansible tests
|
|
vpc_id: "{{ vpc.vpc.id }}"
|
|
rules:
|
|
- proto: tcp
|
|
from_port: 80
|
|
to_port: 80
|
|
cidr_ip: 0.0.0.0/0
|
|
- proto: tcp
|
|
from_port: 22
|
|
to_port: 22
|
|
cidr_ip: 0.0.0.0/0
|
|
<<: *aws_connection_info
|
|
register: sg
|
|
|
|
- name: set up testing target group (type=instance)
|
|
elb_target_group:
|
|
name: "{{ tg_name }}"
|
|
health_check_port: 80
|
|
protocol: http
|
|
port: 80
|
|
vpc_id: '{{ vpc.vpc.id }}'
|
|
state: present
|
|
target_type: instance
|
|
tags:
|
|
Description: "Created by {{ resource_prefix }}"
|
|
<<: *aws_connection_info
|
|
|
|
- name: set up testing target group for ALB (type=instance)
|
|
elb_target_group:
|
|
name: "{{ tg_name }}-used"
|
|
health_check_port: 80
|
|
protocol: http
|
|
port: 80
|
|
vpc_id: '{{ vpc.vpc.id }}'
|
|
state: present
|
|
target_type: instance
|
|
tags:
|
|
Description: "Created by {{ resource_prefix }}"
|
|
<<: *aws_connection_info
|
|
|
|
- name: set up ec2 instance to use as a target
|
|
ec2:
|
|
group_id: "{{ sg.group_id }}"
|
|
instance_type: t2.micro
|
|
image: "{{ ec2_ami_image[aws_region] }}"
|
|
vpc_subnet_id: "{{ subnet_2.subnet.id }}"
|
|
instance_tags:
|
|
Name: "{{ resource_prefix }}-inst"
|
|
exact_count: 1
|
|
count_tag:
|
|
Name: "{{ resource_prefix }}-inst"
|
|
assign_public_ip: true
|
|
volumes: []
|
|
wait: true
|
|
ebs_optimized: false
|
|
user_data: |
|
|
#cloud-config
|
|
package_upgrade: true
|
|
package_update: true
|
|
packages:
|
|
- httpd
|
|
runcmd:
|
|
- "service httpd start"
|
|
- echo "HELLO ANSIBLE" > /var/www/html/index.html
|
|
<<: *aws_connection_info
|
|
register: ec2
|
|
|
|
- name: create an application load balancer
|
|
elb_application_lb:
|
|
name: "{{ lb_name }}"
|
|
security_groups:
|
|
- "{{ sg.group_id }}"
|
|
subnets:
|
|
- "{{ subnet_1.subnet.id }}"
|
|
- "{{ subnet_2.subnet.id }}"
|
|
listeners:
|
|
- Protocol: HTTP
|
|
Port: 80
|
|
DefaultActions:
|
|
- Type: forward
|
|
TargetGroupName: "{{ tg_name }}-used"
|
|
state: present
|
|
<<: *aws_connection_info
|
|
|
|
# ============================================================
|
|
|
|
- name:
|
|
debug: msg="********** Running elb_target integration tests **********"
|
|
|
|
# ============================================================
|
|
|
|
- name: register an instance to unused target group
|
|
elb_target:
|
|
target_group_name: "{{ tg_name }}"
|
|
target_id: "{{ ec2.instance_ids[0] }}"
|
|
state: present
|
|
<<: *aws_connection_info
|
|
register: result
|
|
|
|
- name: target is registered
|
|
assert:
|
|
that:
|
|
- result.changed
|
|
- result.target_group_arn
|
|
- "'{{ result.target_health_descriptions.target.id }}' == '{{ ec2.instance_ids[0] }}'"
|
|
|
|
# ============================================================
|
|
|
|
- name: test idempotence
|
|
elb_target:
|
|
target_group_name: "{{ tg_name }}"
|
|
target_id: "{{ ec2.instance_ids[0] }}"
|
|
state: present
|
|
<<: *aws_connection_info
|
|
register: result
|
|
|
|
- name: target was already registered
|
|
assert:
|
|
that:
|
|
- not result.changed
|
|
|
|
# ============================================================
|
|
|
|
- name: remove an unused target
|
|
elb_target:
|
|
target_group_name: "{{ tg_name }}"
|
|
target_id: "{{ ec2.instance_ids[0] }}"
|
|
state: absent
|
|
deregister_unused: true
|
|
<<: *aws_connection_info
|
|
register: result
|
|
|
|
- name: target group was deleted
|
|
assert:
|
|
that:
|
|
- result.changed
|
|
- not result.target_health_descriptions
|
|
|
|
# ============================================================
|
|
|
|
- name: register an instance to used target group and wait until healthy
|
|
elb_target:
|
|
target_group_name: "{{ tg_name }}-used"
|
|
target_id: "{{ ec2.instance_ids[0] }}"
|
|
state: present
|
|
target_status: healthy
|
|
target_status_timeout: 200
|
|
<<: *aws_connection_info
|
|
register: result
|
|
|
|
- name: target is registered
|
|
assert:
|
|
that:
|
|
- result.changed
|
|
- result.target_group_arn
|
|
- "'{{ result.target_health_descriptions.target.id }}' == '{{ ec2.instance_ids[0] }}'"
|
|
- "{{ result.target_health_descriptions.target_health }} == {'state': 'healthy'}"
|
|
|
|
# ============================================================
|
|
|
|
- name: remove a target from used target group
|
|
elb_target:
|
|
target_group_name: "{{ tg_name }}-used"
|
|
target_id: "{{ ec2.instance_ids[0] }}"
|
|
state: absent
|
|
target_status: unused
|
|
target_status_timeout: 400
|
|
<<: *aws_connection_info
|
|
register: result
|
|
|
|
- name: target was deregistered
|
|
assert:
|
|
that:
|
|
- result.changed
|
|
|
|
# ============================================================
|
|
|
|
- name: test idempotence
|
|
elb_target:
|
|
target_group_name: "{{ tg_name }}-used"
|
|
target_id: "{{ ec2.instance_ids[0] }}"
|
|
state: absent
|
|
<<: *aws_connection_info
|
|
register: result
|
|
|
|
- name: target was already deregistered
|
|
assert:
|
|
that:
|
|
- not result.changed
|
|
|
|
# ============================================================
|
|
|
|
- name: register an instance to used target group and wait until healthy again to test deregistering differently
|
|
elb_target:
|
|
target_group_name: "{{ tg_name }}-used"
|
|
target_id: "{{ ec2.instance_ids[0] }}"
|
|
state: present
|
|
target_status: healthy
|
|
target_status_timeout: 200
|
|
<<: *aws_connection_info
|
|
register: result
|
|
|
|
- name: target is registered
|
|
assert:
|
|
that:
|
|
- result.changed
|
|
- result.target_group_arn
|
|
- "'{{ result.target_health_descriptions.target.id }}' == '{{ ec2.instance_ids[0] }}'"
|
|
- "{{ result.target_health_descriptions.target_health }} == {'state': 'healthy'}"
|
|
|
|
- name: start deregisteration but don't wait
|
|
elb_target:
|
|
target_group_name: "{{ tg_name }}-used"
|
|
target_id: "{{ ec2.instance_ids[0] }}"
|
|
state: absent
|
|
<<: *aws_connection_info
|
|
register: result
|
|
|
|
- name: target is starting to deregister
|
|
assert:
|
|
that:
|
|
- result.changed
|
|
- result.target_health_descriptions.target_health.reason == "Target.DeregistrationInProgress"
|
|
|
|
- name: now wait for target to finish deregistering
|
|
elb_target:
|
|
target_group_name: "{{ tg_name }}-used"
|
|
target_id: "{{ ec2.instance_ids[0] }}"
|
|
state: absent
|
|
target_status: unused
|
|
target_status_timeout: 400
|
|
<<: *aws_connection_info
|
|
register: result
|
|
|
|
- name: target was deregistered already and now has finished
|
|
assert:
|
|
that:
|
|
- not result.changed
|
|
- not result.target_health_descriptions
|
|
|
|
# ============================================================
|
|
|
|
always:
|
|
|
|
- name:
|
|
debug: msg="********** Tearing down elb_target test dependencies **********"
|
|
|
|
- name: remove ec2 instance
|
|
ec2:
|
|
group_id: "{{ sg.group_id }}"
|
|
instance_type: t2.micro
|
|
image: "{{ ec2_ami_image[aws_region] }}"
|
|
vpc_subnet_id: "{{ subnet_2.subnet.id }}"
|
|
instance_tags:
|
|
Name: "{{ resource_prefix }}-inst"
|
|
exact_count: 0
|
|
count_tag:
|
|
Name: "{{ resource_prefix }}-inst"
|
|
assign_public_ip: true
|
|
volumes: []
|
|
wait: true
|
|
ebs_optimized: false
|
|
<<: *aws_connection_info
|
|
ignore_errors: true
|
|
|
|
- name: remove testing target groups
|
|
elb_target_group:
|
|
name: "{{ item }}"
|
|
health_check_port: 80
|
|
protocol: http
|
|
port: 80
|
|
vpc_id: '{{ vpc.vpc.id }}'
|
|
state: absent
|
|
target_type: instance
|
|
tags:
|
|
Description: "Created by {{ resource_prefix }}"
|
|
wait: true
|
|
wait_timeout: 200
|
|
<<: *aws_connection_info
|
|
register: removed
|
|
retries: 10
|
|
until: removed is not failed
|
|
with_items:
|
|
- "{{ tg_name }}"
|
|
- "{{ tg_name }}-used"
|
|
ignore_errors: true
|
|
|
|
- name: remove application load balancer
|
|
elb_application_lb:
|
|
name: "{{ lb_name }}"
|
|
security_groups:
|
|
- "{{ sg.group_id }}"
|
|
subnets:
|
|
- "{{ subnet_1.subnet.id }}"
|
|
- "{{ subnet_2.subnet.id }}"
|
|
listeners:
|
|
- Protocol: HTTP
|
|
Port: 80
|
|
DefaultActions:
|
|
- Type: forward
|
|
TargetGroupName: "{{ tg_name }}-used"
|
|
state: absent
|
|
wait: true
|
|
wait_timeout: 200
|
|
<<: *aws_connection_info
|
|
register: removed
|
|
retries: 10
|
|
until: removed is not failed
|
|
ignore_errors: true
|
|
|
|
- name: remove testing security group
|
|
ec2_group:
|
|
state: absent
|
|
name: "{{ resource_prefix }}-sg"
|
|
description: a security group for ansible tests
|
|
vpc_id: "{{ vpc.vpc.id }}"
|
|
rules:
|
|
- proto: tcp
|
|
from_port: 80
|
|
to_port: 80
|
|
cidr_ip: 0.0.0.0/0
|
|
- proto: tcp
|
|
from_port: 22
|
|
to_port: 22
|
|
cidr_ip: 0.0.0.0/0
|
|
<<: *aws_connection_info
|
|
register: removed
|
|
retries: 10
|
|
until: removed is not failed
|
|
ignore_errors: true
|
|
|
|
- name: remove routing rules
|
|
ec2_vpc_route_table:
|
|
state: absent
|
|
lookup: id
|
|
route_table_id: "{{ route_table.route_table.id }}"
|
|
<<: *aws_connection_info
|
|
register: removed
|
|
retries: 10
|
|
until: removed is not failed
|
|
ignore_errors: true
|
|
|
|
- name: remove testing subnet
|
|
ec2_vpc_subnet:
|
|
state: absent
|
|
vpc_id: "{{ vpc.vpc.id }}"
|
|
cidr: 20.0.0.0/18
|
|
az: "{{ aws_region }}a"
|
|
resource_tags:
|
|
Name: "{{ resource_prefix }}-subnet"
|
|
<<: *aws_connection_info
|
|
register: removed
|
|
retries: 10
|
|
until: removed is not failed
|
|
ignore_errors: true
|
|
|
|
- name: remove testing subnet
|
|
ec2_vpc_subnet:
|
|
state: absent
|
|
vpc_id: "{{ vpc.vpc.id }}"
|
|
cidr: 20.0.64.0/18
|
|
az: "{{ aws_region }}b"
|
|
resource_tags:
|
|
Name: "{{ resource_prefix }}-subnet"
|
|
<<: *aws_connection_info
|
|
register: removed
|
|
retries: 10
|
|
until: removed is not failed
|
|
ignore_errors: true
|
|
|
|
- name: remove testing internet gateway
|
|
ec2_vpc_igw:
|
|
vpc_id: "{{ vpc.vpc.id }}"
|
|
state: absent
|
|
<<: *aws_connection_info
|
|
register: removed
|
|
retries: 10
|
|
until: removed is not failed
|
|
ignore_errors: true
|
|
|
|
- name: remove testing VPC
|
|
ec2_vpc_net:
|
|
name: "{{ resource_prefix }}-vpc"
|
|
state: absent
|
|
cidr_block: 20.0.0.0/16
|
|
tags:
|
|
Name: "{{ resource_prefix }}-vpc"
|
|
Description: "Created by ansible-test"
|
|
<<: *aws_connection_info
|
|
register: removed
|
|
retries: 10
|
|
until: removed is not failed
|
|
|
|
# ============================================================
|