You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ansible/test/integration/roles/test_ec2_eip/tasks/main.yml

438 lines
11 KiB
YAML

---
# __Test Info__
# EIPs are a scarce resource. AWS only assigns 5 per account
# by default. This test tries to only use 1 at a time.
# one t1.micro instance will also be provisioned.
# tests require setting of variables eip_ec2_keyname and
# eip_ec2_image .
# __Test Outline__
#
# __ec2_eip__
# create test instance
# create EIP
# assign allocated ip to instance_id
# disassociate EIP associated with instance
# re-use existing EIP with instance
# deactivate EIP
# provision EIP with instance_id
# create VPC EIP
# re-use exiting VPC EIP with instance
# __ec2-common__
# test environment variable EC2_REGION
# deactivate EIP
# test with no parameters
# test with only instance_id
# test invalid region parameter
# test valid region parameter
# test invalid ec2_url parameter
# test valid ec2_url parameter
# test credentials from environment
# test credential parameters
# ============================================================
# create a keypair using the ssh key
- name: create the keypair for ec2
ec2_key:
name: "{{ resource_prefix }}"
region: "{{ ec2_region }}"
ec2_access_key: "{{ ec2_access_key }}"
ec2_secret_key: "{{ ec2_secret_key }}"
key_material: "{{ key_material }}"
wait: yes
state: present
# ============================================================
# create test instance
- name: create test instance
local_action:
module: ec2
key_name: "{{ resource_prefix }}"
region: "{{ ec2_region }}"
instance_type: t1.micro
image: ami-fb8e9292
wait: yes
instance_tags:
Name: "{{ tag_prefix }}"
ansible_ec2_eip_integration_test: foo
exact_count: 1
count_tag: "ansible_ec2_eip_integration_test"
ec2_access_key: "{{ ec2_access_key }}"
ec2_secret_key: "{{ ec2_secret_key }}"
register: output
- name: set instance id fact
set_fact: instance_id={{ output.instances[0].id }}
# eip allocated:0 assigned:0
# ============================================================
# create EIP
- name: create EIP
ec2_eip: region={{ ec2_region }}
ec2_access_key={{ ec2_access_key }}
ec2_secret_key={{ ec2_secret_key }}
register: result
- name: set eip fact
set_fact: eip={{ result.public_ip }}
- name: write ip to list for cleanup script
shell: echo {{ eip }} >> {{ output_dir }}/{{ tag_prefix }}-eip_integration_tests.log
- name: assert EIP created
assert:
that:
- '"failed" not in result'
# eip allocated:1 assigned:0
# ============================================================
# assign allocated ip to instance_id
- name: assign allocated ip to instance_id
ec2_eip:
reuse_existing_ip_allowed=yes
instance_id={{ instance_id }}
ec2_access_key={{ ec2_access_key }}
ec2_secret_key={{ ec2_secret_key }}
public_ip={{ eip }}
region={{ ec2_region }}
register: result
- name: assert new EIP was assigned
assert:
that:
- '"public_ip" in result'
# eip allocated:1 assigned:1
# ============================================================
# disassociate EIP associated with instance
- name: disassociate EIP associated with instance
ec2_eip: state=absent public_ip={{ eip }} region={{ ec2_region }}
ec2_access_key={{ ec2_access_key }}
ec2_secret_key={{ ec2_secret_key }}
instance_id={{ instance_id }}
register: result
# eip allocated:1 assigned:0
# ============================================================
# re-use existing EIP with instance
- name: re-use existing EIP with instance
ec2_eip:
reuse_existing_ip_allowed=yes
instance_id={{ instance_id }}
ec2_access_key={{ ec2_access_key }}
ec2_secret_key={{ ec2_secret_key }}
region={{ ec2_region }}
register: result
- name: assert new EIP was assigned
assert:
that:
- '"public_ip" in result'
- name: disassociate EIP associated with instance
ec2_eip: state=absent public_ip={{ eip }} region={{ ec2_region }}
ec2_access_key={{ ec2_access_key }}
ec2_secret_key={{ ec2_secret_key }}
instance_id={{ instance_id }}
# eip allocated:1 assigned:1
# ============================================================
# deactivate EIP
- name: deactivate EIP
ec2_eip: state=absent public_ip={{ eip }} region={{ ec2_region }}
ec2_access_key={{ ec2_access_key }}
ec2_secret_key={{ ec2_secret_key }}
register: result
# eip allocated:0 assigned:0
# ============================================================
# provision EIP with instance_id
- name: provision EIP with instance_id
ec2_eip:
instance_id={{ instance_id }}
ec2_access_key={{ ec2_access_key }}
ec2_secret_key={{ ec2_secret_key }}
region={{ ec2_region }}
register: result
- name: set eip fact
set_fact: eip={{ result.public_ip }}
- name: write ip to list for cleanup script
shell: echo {{ eip }} >> {{ output_dir }}/{{ tag_prefix }}-eip_integration_tests.log
- name: assert provision EIP with instance_id
assert:
that:
- '"public_ip" in result'
- name: disassociate EIP associated with instance
ec2_eip: state=absent public_ip={{ eip }} region={{ ec2_region }}
ec2_access_key={{ ec2_access_key }}
ec2_secret_key={{ ec2_secret_key }}
instance_id={{ instance_id }}
- name: deactivate EIP
ec2_eip: state=absent public_ip={{ eip }} region={{ ec2_region }}
ec2_access_key={{ ec2_access_key }}
ec2_secret_key={{ ec2_secret_key }}
# eip allocated:0 assigned:0
# ============================================================
# create VPC EIP
- name: create VPC EIP
ec2_eip: in_vpc=yes region={{ ec2_region }}
ec2_access_key={{ ec2_access_key }}
ec2_secret_key={{ ec2_secret_key }}
register: result
- name: set eip fact
set_fact: eip={{ result.public_ip }}
- name: write ip to list for cleanup script
shell: echo {{ eip }} >> {{ output_dir }}/{{ tag_prefix }}-eip_integration_tests.log
- name: assert VPC EIP creation
assert:
that:
- '"public_ip" in result'
# eip allocated:1 assigned:0
# ============================================================
# re-use existing VPC EIP with instance
# DISABLED BY JCAMMARATA
#- name: re-use existing VPC EIP with instance
# ec2_eip:
# in_vpc=yes
# reuse_existing_ip_allowed=yes
# instance_id={{ instance_id }}
# ec2_access_key={{ ec2_access_key }}
# ec2_secret_key={{ ec2_secret_key }}
# region={{ ec2_region }}
# register: result
#
#- name: assert new VPC EIP was assigned
# assert:
# that:
# - '"public_ip" in result'
#
#
#- name: disassociate VPC EIP associated with instance
# ec2_eip: state=absent public_ip={{ eip }} region={{ ec2_region }}
# ec2_access_key={{ ec2_access_key }}
# ec2_secret_key={{ ec2_secret_key }}
# instance_id={{ instance_id }}
- name: deactivate VPC EIP
ec2_eip: state=absent public_ip={{ eip }} region={{ ec2_region }}
ec2_access_key={{ ec2_access_key }}
ec2_secret_key={{ ec2_secret_key }}
# eip allocated:0 assigned:0
# ============================================================
- name: test environment variable EC2_REGION
ec2_eip:
ec2_access_key={{ ec2_access_key }}
ec2_secret_key={{ ec2_secret_key }}
environment:
EC2_REGION: "{{ ec2_region }}"
register: result
- name: set eip fact
set_fact: eip={{ result.public_ip }}
- name: write ip to list for cleanup script
shell: echo {{ eip }} >> {{ output_dir }}/{{ tag_prefix }}-eip_integration_tests.log
- name: assert environment variable EC2_REGION
assert:
that:
- '"public_ip" in result'
- name: deactivate EIP
ec2_eip: state=absent public_ip={{ eip }} region={{ ec2_region }}
ec2_access_key={{ ec2_access_key }}
ec2_secret_key={{ ec2_secret_key }}
# eip allocated:0 assigned:0
# ============================================================
- name: test with no parameters
ec2_eip:
register: result
ignore_errors: true
- name: assert failure when called with no parameters
assert:
that:
- 'result.failed'
- 'result.msg == "Either region or ec2_url must be specified"'
# eip allocated:0 assigned:0
# ============================================================
- name: test with only instance_id
ec2_eip:
instance_id=i-12345
register: result
ignore_errors: true
- name: assert failure when called with only 'instance_id'
assert:
that:
- 'result.failed'
- 'result.msg == "Either region or ec2_url must be specified"'
# eip allocated:0 assigned:0
# ============================================================
- name: test invalid region parameter
ec2_eip:
instance_id={{ instance_id }}
region='asdf querty 1234'
register: result
ignore_errors: true
- name: assert invalid region parameter
assert:
that:
- 'result.failed'
- 'result.msg.startswith("value of region must be one of:")'
# eip allocated:0 assigned:0
# ============================================================
- name: test valid region parameter
ec2_eip:
instance_id={{ instance_id }}
region={{ ec2_region }}
register: result
ignore_errors: true
- name: assert valid region parameter
assert:
that:
- 'result.failed'
- 'result.msg.startswith("No handler was ready to authenticate.")'
# eip allocated:0 assigned:0
# ============================================================
- name: test invalid ec2_url parameter
ec2_eip:
instance_id={{ instance_id }}
reuse_existing_ip_allowed=yes
environment:
EC2_URL: bogus.example.com
register: result
ignore_errors: true
- name: assert invalid ec2_url parameter
assert:
that:
- 'result.failed'
- 'result.msg.startswith("No handler was ready to authenticate.")'
# eip allocated:0 assigned:0
# ============================================================
- name: test valid ec2_url parameter
ec2_eip:
instance_id={{ instance_id }}
reuse_existing_ip_allowed=yes
environment:
EC2_URL: '{{ec2_url}}'
register: result
ignore_errors: true
- name: assert valid ec2_url parameter
assert:
that:
- 'result.failed'
- 'result.msg.startswith("No handler was ready to authenticate.")'
# eip allocated:0 assigned:0
# ============================================================
- name: test credentials from environment
ec2_eip:
region={{ ec2_region }}
instance_id={{ instance_id }}
environment:
EC2_ACCESS_KEY: bogus_access_key
EC2_SECRET_KEY: bogus_secret_key
register: result
ignore_errors: true
- name: assert credentials from environment
assert:
that:
- 'result.failed'
- '"EC2ResponseError: 401 Unauthorized" in result.msg'
# eip allocated:0 assigned:0
# ============================================================
- name: test credential parameters
ec2_eip: region={{ ec2_region }}
register: result
ignore_errors: true
- name: assert credential parameters
assert:
that:
- 'result.failed'
- '"Check your credentials" in result.msg'
# eip allocated:0 assigned:0