mirror of https://github.com/ansible/ansible.git
Add integration tests for aws lightsail (#63770)
* Add integration tests for aws lightsail * lightsail - use module_defaults instead of aws_connection_info * lightsail tests - assert instance state on create * Fix yaml syntax error Co-Authored-By: Jill R <4121322+jillr@users.noreply.github.com> * [lightsail] create keypair as part of the testsuite * Fix lightsail actions in compute-policy * Add ability to delete keypair in lightsail_keypairpull/65162/head
parent
6e652ae6df
commit
95bd92da04
@ -0,0 +1,2 @@
|
||||
cloud/aws
|
||||
shippable/aws/group2
|
@ -0,0 +1,3 @@
|
||||
instance_name: "{{ resource_prefix }}_instance"
|
||||
keypair_name: "{{ resource_prefix }}_keypair"
|
||||
zone: "{{ aws_region }}a"
|
@ -0,0 +1,79 @@
|
||||
#!/usr/bin/python
|
||||
# -*- coding: utf-8 -*-
|
||||
# Copyright: Ansible Project
|
||||
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||
|
||||
from __future__ import absolute_import, division, print_function
|
||||
__metaclass__ = type
|
||||
|
||||
|
||||
ANSIBLE_METADATA = {'metadata_version': '1.1',
|
||||
'status': ['preview'],
|
||||
'supported_by': 'community'}
|
||||
|
||||
try:
|
||||
from botocore.exceptions import ClientError, BotoCoreError
|
||||
import boto3
|
||||
except ImportError:
|
||||
pass # caught by AnsibleAWSModule
|
||||
|
||||
from ansible.module_utils.aws.core import AnsibleAWSModule
|
||||
from ansible.module_utils.ec2 import (get_aws_connection_info, boto3_conn)
|
||||
|
||||
|
||||
def create_keypair(module, client, keypair_name):
|
||||
"""
|
||||
Create a keypair to use for your lightsail instance
|
||||
"""
|
||||
|
||||
try:
|
||||
client.create_key_pair(keyPairName=keypair_name)
|
||||
except ClientError as e:
|
||||
if "Some names are already in use" in e.response['Error']['Message']:
|
||||
module.exit_json(changed=False)
|
||||
module.fail_json_aws(e)
|
||||
|
||||
module.exit_json(changed=True)
|
||||
|
||||
|
||||
def delete_keypair(module, client, keypair_name):
|
||||
"""
|
||||
Delete a keypair in lightsail
|
||||
"""
|
||||
|
||||
try:
|
||||
client.delete_key_pair(keyPairName=keypair_name)
|
||||
except ClientError as e:
|
||||
if e.response['Error']['Code'] == "NotFoundException":
|
||||
module.exit_json(changed=False)
|
||||
module.fail_json_aws(e)
|
||||
|
||||
module.exit_json(changed=True)
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
argument_spec = dict(
|
||||
name=dict(type='str', required=True),
|
||||
state=dict(type='str', default='present', choices=['present', 'absent']),
|
||||
)
|
||||
|
||||
module = AnsibleAWSModule(argument_spec=argument_spec)
|
||||
region, ec2_url, aws_connect_params = get_aws_connection_info(module, boto3=True)
|
||||
try:
|
||||
client = boto3_conn(module, conn_type='client', resource='lightsail', region=region, endpoint=ec2_url,
|
||||
**aws_connect_params)
|
||||
except ClientError as e:
|
||||
module.fail_json_aws(e)
|
||||
|
||||
keypair_name = module.params.get('name')
|
||||
state = module.params.get('state')
|
||||
|
||||
if state == 'present':
|
||||
create_keypair(module, client, keypair_name)
|
||||
else:
|
||||
delete_keypair(module, client, keypair_name)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
@ -0,0 +1,132 @@
|
||||
---
|
||||
|
||||
- module_defaults:
|
||||
group/aws:
|
||||
aws_access_key: '{{ aws_access_key | default(omit) }}'
|
||||
aws_secret_key: '{{ aws_secret_key | default(omit) }}'
|
||||
security_token: '{{ security_token | default(omit) }}'
|
||||
region: '{{ aws_region | default(omit) }}'
|
||||
|
||||
block:
|
||||
|
||||
# ==== Tests ===================================================
|
||||
|
||||
- name: Create a new keypair in lightsail
|
||||
lightsail_keypair:
|
||||
name: "{{ keypair_name }}"
|
||||
|
||||
- name: Create a new instance
|
||||
lightsail:
|
||||
name: "{{ instance_name }}"
|
||||
zone: "{{ zone }}"
|
||||
blueprint_id: amazon_linux
|
||||
bundle_id: nano_2_0
|
||||
key_pair_name: "{{ keypair_name }}"
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result.changed == True
|
||||
- "'instance' in result and result.instance.name == instance_name"
|
||||
- "result.instance.state.name in ['pending', 'running']"
|
||||
|
||||
- name: Make sure create is idempotent
|
||||
lightsail:
|
||||
name: "{{ instance_name }}"
|
||||
zone: "{{ zone }}"
|
||||
blueprint_id: amazon_linux
|
||||
bundle_id: nano_2_0
|
||||
key_pair_name: "{{ keypair_name }}"
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result.changed == False
|
||||
|
||||
- name: Start the running instance
|
||||
lightsail:
|
||||
name: "{{ instance_name }}"
|
||||
state: running
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result.changed == False
|
||||
|
||||
- name: Stop the instance
|
||||
lightsail:
|
||||
name: "{{ instance_name }}"
|
||||
state: stopped
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result.changed == True
|
||||
- "result.instance.state.name in ['stopping', 'stopped']"
|
||||
|
||||
- name: Stop the stopped instance
|
||||
lightsail:
|
||||
name: "{{ instance_name }}"
|
||||
state: stopped
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result.changed == False
|
||||
|
||||
- name: Start the instance
|
||||
lightsail:
|
||||
name: "{{ instance_name }}"
|
||||
state: running
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result.changed == True
|
||||
- "result.instance.state.name in ['running', 'pending']"
|
||||
|
||||
- name: Restart the instance
|
||||
lightsail:
|
||||
name: "{{ instance_name }}"
|
||||
state: restarted
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result.changed == True
|
||||
|
||||
- name: Delete the instance
|
||||
lightsail:
|
||||
name: "{{ instance_name }}"
|
||||
state: absent
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result.changed == True
|
||||
|
||||
- name: Make sure instance deletion is idempotent
|
||||
lightsail:
|
||||
name: "{{ instance_name }}"
|
||||
state: absent
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result.changed == False
|
||||
|
||||
# ==== Cleanup ====================================================
|
||||
|
||||
always:
|
||||
|
||||
- name: Cleanup - delete instance
|
||||
lightsail:
|
||||
name: "{{ instance_name }}"
|
||||
state: absent
|
||||
ignore_errors: yes
|
||||
|
||||
- name: Cleanup - delete keypair
|
||||
lightsail_keypair:
|
||||
name: "{{ keypair_name }}"
|
||||
state: absent
|
||||
ignore_errors: yes
|
Loading…
Reference in New Issue