summaryrefslogtreecommitdiff
path: root/library/cloud/ec2_key
diff options
context:
space:
mode:
Diffstat (limited to 'library/cloud/ec2_key')
-rw-r--r--library/cloud/ec2_key238
1 files changed, 0 insertions, 238 deletions
diff --git a/library/cloud/ec2_key b/library/cloud/ec2_key
deleted file mode 100644
index 9c8274f764..0000000000
--- a/library/cloud/ec2_key
+++ /dev/null
@@ -1,238 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-
-
-DOCUMENTATION = '''
----
-module: ec2_key
-version_added: "1.5"
-short_description: maintain an ec2 key pair.
-description:
- - maintains ec2 key pairs. This module has a dependency on python-boto >= 2.5
-options:
- name:
- description:
- - Name of the key pair.
- required: true
- key_material:
- description:
- - Public key material.
- required: false
- region:
- description:
- - the EC2 region to use
- required: false
- default: null
- aliases: []
- state:
- description:
- - create or delete keypair
- required: false
- default: 'present'
- aliases: []
- wait:
- description:
- - Wait for the specified action to complete before returning.
- required: false
- default: false
- aliases: []
- version_added: "1.6"
- wait_timeout:
- description:
- - How long before wait gives up, in seconds
- required: false
- default: 300
- aliases: []
- version_added: "1.6"
-
-extends_documentation_fragment: aws
-author: Vincent Viallet
-'''
-
-EXAMPLES = '''
-# Note: None of these examples set aws_access_key, aws_secret_key, or region.
-# It is assumed that their matching environment variables are set.
-
-# Creates a new ec2 key pair named `example` if not present, returns generated
-# private key
-- name: example ec2 key
- local_action:
- module: ec2_key
- name: example
-
-# Creates a new ec2 key pair named `example` if not present using provided key
-# material
-- name: example2 ec2 key
- local_action:
- module: ec2_key
- name: example2
- key_material: 'ssh-rsa AAAAxyz...== me@example.com'
- state: present
-
-# Creates a new ec2 key pair named `example` if not present using provided key
-# material
-- name: example3 ec2 key
- local_action:
- module: ec2_key
- name: example3
- key_material: "{{ item }}"
- with_file: /path/to/public_key.id_rsa.pub
-
-# Removes ec2 key pair by name
-- name: remove example key
- local_action:
- module: ec2_key
- name: example
- state: absent
-'''
-
-try:
- import boto.ec2
-except ImportError:
- print "failed=True msg='boto required for this module'"
- sys.exit(1)
-
-import random
-import string
-
-
-def main():
- argument_spec = ec2_argument_spec()
- argument_spec.update(dict(
- name=dict(required=True),
- key_material=dict(required=False),
- state = dict(default='present', choices=['present', 'absent']),
- wait = dict(type='bool', default=False),
- wait_timeout = dict(default=300),
- )
- )
- module = AnsibleModule(
- argument_spec=argument_spec,
- supports_check_mode=True,
- )
-
- name = module.params['name']
- state = module.params.get('state')
- key_material = module.params.get('key_material')
- wait = module.params.get('wait')
- wait_timeout = int(module.params.get('wait_timeout'))
-
- changed = False
-
- ec2 = ec2_connect(module)
-
- # find the key if present
- key = ec2.get_key_pair(name)
-
- # Ensure requested key is absent
- if state == 'absent':
- if key:
- '''found a match, delete it'''
- try:
- key.delete()
- if wait:
- start = time.time()
- action_complete = False
- while (time.time() - start) < wait_timeout:
- if not ec2.get_key_pair(name):
- action_complete = True
- break
- time.sleep(1)
- if not action_complete:
- module.fail_json(msg="timed out while waiting for the key to be removed")
- except Exception, e:
- module.fail_json(msg="Unable to delete key pair '%s' - %s" % (key, e))
- else:
- key = None
- changed = True
- else:
- '''no match found, no changes required'''
-
- # Ensure requested key is present
- elif state == 'present':
- if key:
- # existing key found
- if 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
- test = 'empty'
- while test:
- randomchars = [random.choice(string.ascii_letters + string.digits) for x in range(0,10)]
- tmpkeyname = "ansible-" + ''.join(randomchars)
- test = ec2.get_key_pair(tmpkeyname)
-
- # create tmp key
- tmpkey = ec2.import_key_pair(tmpkeyname, key_material)
- # get tmp key fingerprint
- tmpfingerprint = tmpkey.fingerprint
- # delete tmp key
- tmpkey.delete()
-
- if key.fingerprint != tmpfingerprint:
- if not module.check_mode:
- key.delete()
- key = ec2.import_key_pair(name, key_material)
-
- if wait:
- start = time.time()
- action_complete = False
- while (time.time() - start) < wait_timeout:
- if ec2.get_key_pair(name):
- action_complete = True
- break
- time.sleep(1)
- if not action_complete:
- module.fail_json(msg="timed out while waiting for the key to be re-created")
-
- changed = True
- pass
-
- # if the key doesn't exist, create it now
- else:
- '''no match found, create it'''
- if not module.check_mode:
- if key_material:
- '''We are providing the key, need to import'''
- key = ec2.import_key_pair(name, key_material)
- else:
- '''
- No material provided, let AWS handle the key creation and
- retrieve the private key
- '''
- key = ec2.create_key_pair(name)
-
- if wait:
- start = time.time()
- action_complete = False
- while (time.time() - start) < wait_timeout:
- if ec2.get_key_pair(name):
- action_complete = True
- break
- time.sleep(1)
- if not action_complete:
- module.fail_json(msg="timed out while waiting for the key to be created")
-
- changed = True
-
- if key:
- data = {
- 'name': key.name,
- 'fingerprint': key.fingerprint
- }
- if key.material:
- data.update({'private_key': key.material})
-
- module.exit_json(changed=changed, key=data)
- else:
- module.exit_json(changed=changed, key=None)
-
-# import module snippets
-from ansible.module_utils.basic import *
-from ansible.module_utils.ec2 import *
-
-main()