summaryrefslogtreecommitdiff
path: root/test/support/integration/plugins/modules/ec2_key.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/support/integration/plugins/modules/ec2_key.py')
-rw-r--r--test/support/integration/plugins/modules/ec2_key.py271
1 files changed, 0 insertions, 271 deletions
diff --git a/test/support/integration/plugins/modules/ec2_key.py b/test/support/integration/plugins/modules/ec2_key.py
deleted file mode 100644
index de67af8bc0..0000000000
--- a/test/support/integration/plugins/modules/ec2_key.py
+++ /dev/null
@@ -1,271 +0,0 @@
-#!/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': ['stableinterface'],
- 'supported_by': 'community'}
-
-
-DOCUMENTATION = '''
----
-module: ec2_key
-version_added: "1.5"
-short_description: create or delete an ec2 key pair
-description:
- - create or delete an ec2 key pair.
-options:
- name:
- description:
- - Name of the key pair.
- required: true
- type: str
- key_material:
- description:
- - Public key material.
- required: false
- type: str
- force:
- description:
- - Force overwrite of already existing key pair if key has changed.
- required: false
- default: true
- type: bool
- version_added: "2.3"
- state:
- description:
- - create or delete keypair
- required: false
- choices: [ present, absent ]
- default: 'present'
- type: str
- wait:
- description:
- - This option has no effect since version 2.5 and will be removed in 2.14.
- version_added: "1.6"
- type: bool
- wait_timeout:
- description:
- - This option has no effect since version 2.5 and will be removed in 2.14.
- version_added: "1.6"
- type: int
- required: false
-
-extends_documentation_fragment:
- - aws
- - ec2
-requirements: [ boto3 ]
-author:
- - "Vincent Viallet (@zbal)"
- - "Prasad Katti (@prasadkatti)"
-'''
-
-EXAMPLES = '''
-# Note: These examples do not set authentication details, see the AWS Guide for details.
-
-- name: create a new ec2 key pair, returns generated private key
- ec2_key:
- name: my_keypair
-
-- name: create key pair using provided key_material
- ec2_key:
- name: my_keypair
- key_material: 'ssh-rsa AAAAxyz...== me@example.com'
-
-- name: create key pair using key_material obtained using 'file' lookup plugin
- ec2_key:
- name: my_keypair
- key_material: "{{ lookup('file', '/path/to/public_key/id_rsa.pub') }}"
-
-# try creating a key pair with the name of an already existing keypair
-# but don't overwrite it even if the key is different (force=false)
-- name: try creating a key pair with name of an already existing keypair
- ec2_key:
- name: my_existing_keypair
- key_material: 'ssh-rsa AAAAxyz...== me@example.com'
- force: false
-
-- name: remove key pair by name
- ec2_key:
- name: my_keypair
- state: absent
-'''
-
-RETURN = '''
-changed:
- description: whether a keypair was created/deleted
- returned: always
- type: bool
- sample: true
-msg:
- description: short message describing the action taken
- returned: always
- type: str
- sample: key pair created
-key:
- description: details of the keypair (this is set to null when state is absent)
- returned: always
- type: complex
- contains:
- fingerprint:
- description: fingerprint of the key
- returned: when state is present
- type: str
- sample: 'b0:22:49:61:d9:44:9d:0c:7e:ac:8a:32:93:21:6c:e8:fb:59:62:43'
- name:
- description: name of the keypair
- returned: when state is present
- type: str
- sample: my_keypair
- private_key:
- description: private key of a newly created keypair
- returned: when a new keypair is created by AWS (key_material is not provided)
- type: str
- sample: '-----BEGIN RSA PRIVATE KEY-----
- MIIEowIBAAKC...
- -----END RSA PRIVATE KEY-----'
-'''
-
-import uuid
-
-from ansible.module_utils.aws.core import AnsibleAWSModule
-from ansible.module_utils._text import to_bytes
-
-try:
- from botocore.exceptions import ClientError
-except ImportError:
- pass # caught by AnsibleAWSModule
-
-
-def extract_key_data(key):
-
- data = {
- 'name': key['KeyName'],
- 'fingerprint': key['KeyFingerprint']
- }
- if 'KeyMaterial' in key:
- data['private_key'] = key['KeyMaterial']
- return data
-
-
-def get_key_fingerprint(module, ec2_client, key_material):
- '''
- EC2's fingerprints are non-trivial to generate, so push this key
- to a temporary name and make ec2 calculate the fingerprint for us.
- http://blog.jbrowne.com/?p=23
- https://forums.aws.amazon.com/thread.jspa?messageID=352828
- '''
-
- # find an unused name
- name_in_use = True
- while name_in_use:
- random_name = "ansible-" + str(uuid.uuid4())
- name_in_use = find_key_pair(module, ec2_client, random_name)
-
- temp_key = import_key_pair(module, ec2_client, random_name, key_material)
- delete_key_pair(module, ec2_client, random_name, finish_task=False)
- return temp_key['KeyFingerprint']
-
-
-def find_key_pair(module, ec2_client, name):
-
- try:
- key = ec2_client.describe_key_pairs(KeyNames=[name])['KeyPairs'][0]
- except ClientError as err:
- if err.response['Error']['Code'] == "InvalidKeyPair.NotFound":
- return None
- module.fail_json_aws(err, msg="error finding keypair")
- except IndexError:
- key = None
- return key
-
-
-def create_key_pair(module, ec2_client, name, key_material, force):
-
- key = find_key_pair(module, ec2_client, name)
- if key:
- if key_material and force:
- if not module.check_mode:
- new_fingerprint = get_key_fingerprint(module, ec2_client, key_material)
- if key['KeyFingerprint'] != new_fingerprint:
- delete_key_pair(module, ec2_client, name, finish_task=False)
- key = import_key_pair(module, ec2_client, name, key_material)
- key_data = extract_key_data(key)
- module.exit_json(changed=True, key=key_data, msg="key pair updated")
- else:
- # Assume a change will be made in check mode since a comparison can't be done
- module.exit_json(changed=True, key=extract_key_data(key), msg="key pair updated")
- key_data = extract_key_data(key)
- module.exit_json(changed=False, key=key_data, msg="key pair already exists")
- else:
- # key doesn't exist, create it now
- key_data = None
- if not module.check_mode:
- if key_material:
- key = import_key_pair(module, ec2_client, name, key_material)
- else:
- try:
- key = ec2_client.create_key_pair(KeyName=name)
- except ClientError as err:
- module.fail_json_aws(err, msg="error creating key")
- key_data = extract_key_data(key)
- module.exit_json(changed=True, key=key_data, msg="key pair created")
-
-
-def import_key_pair(module, ec2_client, name, key_material):
-
- try:
- key = ec2_client.import_key_pair(KeyName=name, PublicKeyMaterial=to_bytes(key_material))
- except ClientError as err:
- module.fail_json_aws(err, msg="error importing key")
- return key
-
-
-def delete_key_pair(module, ec2_client, name, finish_task=True):
-
- key = find_key_pair(module, ec2_client, name)
- if key:
- if not module.check_mode:
- try:
- ec2_client.delete_key_pair(KeyName=name)
- except ClientError as err:
- module.fail_json_aws(err, msg="error deleting key")
- if not finish_task:
- return
- module.exit_json(changed=True, key=None, msg="key deleted")
- module.exit_json(key=None, msg="key did not exist")
-
-
-def main():
-
- argument_spec = dict(
- name=dict(required=True),
- key_material=dict(),
- force=dict(type='bool', default=True),
- state=dict(default='present', choices=['present', 'absent']),
- wait=dict(type='bool', removed_in_version='2.14'),
- wait_timeout=dict(type='int', removed_in_version='2.14')
- )
-
- module = AnsibleAWSModule(argument_spec=argument_spec, supports_check_mode=True)
-
- ec2_client = module.client('ec2')
-
- name = module.params['name']
- state = module.params.get('state')
- key_material = module.params.get('key_material')
- force = module.params.get('force')
-
- if state == 'absent':
- delete_key_pair(module, ec2_client, name)
- elif state == 'present':
- create_key_pair(module, ec2_client, name, key_material, force)
-
-
-if __name__ == '__main__':
- main()