Commit 107733b1 by lwade

Add support for security group id parameter, remove default for group name…

Add support for security group id parameter, remove default for group name (since AWS already sets a default). ISSUE #2029
parent 3f2fd22e
...@@ -19,7 +19,7 @@ DOCUMENTATION = ''' ...@@ -19,7 +19,7 @@ DOCUMENTATION = '''
module: ec2 module: ec2
short_description: create an instance in ec2, return instanceid short_description: create an instance in ec2, return instanceid
description: description:
- creates ec2 instances and optionally waits for it to be 'running'. This module has a dependency on boto and m2crypt. - creates ec2 instances and optionally waits for it to be 'running'. This module has a dependency on python-boto.
version_added: "0.9" version_added: "0.9"
options: options:
key_name: key_name:
...@@ -30,9 +30,16 @@ options: ...@@ -30,9 +30,16 @@ options:
aliases: ['keypair'] aliases: ['keypair']
group: group:
description: description:
- security group to use on the instance - security group to use with the instance
required: false required: false
default: 'default' default: null
aliases: []
group_id:
version_added: "1.1"
description:
- security group id to use with the instance
required: false
default: null
aliases: [] aliases: []
instance_type: instance_type:
description: description:
...@@ -61,25 +68,25 @@ options: ...@@ -61,25 +68,25 @@ options:
wait: wait:
description: description:
- wait for the instance to be in state 'running' before returning - wait for the instance to be in state 'running' before returning
required: False required: false
default: False default: false
aliases: [] aliases: []
ec2_url: ec2_url:
description: description:
- url to use to connect to ec2 or your Eucalyptus cloud (by default the module will use ec2 endpoints) - url to use to connect to EC2 or your Eucalyptus cloud (by default the module will use EC2 endpoints)
required: False required: false
default: null default: null
aliases: [] aliases: []
ec2_secret_key: ec2_secret_key:
description: description:
- ec2 secret key - ec2 secret key
required: False required: false
default: null default: null
aliases: [] aliases: []
ec2_access_key: ec2_access_key:
description: description:
- ec2 access key - ec2 access key
required: False required: false
default: null default: null
aliases: [] aliases: []
count: count:
...@@ -89,27 +96,28 @@ options: ...@@ -89,27 +96,28 @@ options:
default: 1 default: 1
aliases: [] aliases: []
monitor: monitor:
version_added: "1.1"
description: description:
- enable detailed monitoring (CloudWatch) for instance - enable detailed monitoring (CloudWatch) for instance
required: False required: false
default: null default: null
aliases: [] aliases: []
user_data: user_data:
version_added: "0.9" version_added: "0.9"
description: description:
- opaque blob of data which is made available to the ec2 instance - opaque blob of data which is made available to the ec2 instance
required: False required: false
default: null default: null
aliases: [] aliases: []
instance_tags: instance_tags:
version_added: "1.0" version_added: "1.0"
description: description:
- a hash/dictionary of tags, in quoted json format, to add to the new instance - a hash/dictionary of tags to add to the new instance; '{"key":"value"}' and '{"key":"value","key":"value"}'
required: False required: false
default: null default: null
aliases: [] aliases: []
examples: examples:
- code: 'local_action: ec2 keypair=admin instance_type=m1.large image=emi-40603AD1 wait=true group=webserver count=3' - code: 'local_action: ec2 keypair=admin instance_type=m1.large image=emi-40603AD1 wait=true group=webserver count=3 group=webservers'
description: "Examples from Ansible Playbooks" description: "Examples from Ansible Playbooks"
requirements: [ "boto" ] requirements: [ "boto" ]
author: Seth Vidal, Tim Gerla, Lester Wade author: Seth Vidal, Tim Gerla, Lester Wade
...@@ -128,7 +136,8 @@ def main(): ...@@ -128,7 +136,8 @@ def main():
module = AnsibleModule( module = AnsibleModule(
argument_spec = dict( argument_spec = dict(
key_name = dict(required=True, aliases = ['keypair']), key_name = dict(required=True, aliases = ['keypair']),
group = dict(default='default'), group = dict(),
group_id = dict(),
instance_type = dict(aliases=['type']), instance_type = dict(aliases=['type']),
image = dict(required=True), image = dict(required=True),
kernel = dict(), kernel = dict(),
...@@ -145,7 +154,8 @@ def main(): ...@@ -145,7 +154,8 @@ def main():
) )
key_name = module.params.get('key_name') key_name = module.params.get('key_name')
group = module.params.get('group') group_name = module.params.get('group')
group_id = module.params.get('group_id')
instance_type = module.params.get('instance_type') instance_type = module.params.get('instance_type')
image = module.params.get('image') image = module.params.get('image')
count = module.params.get('count') count = module.params.get('count')
...@@ -174,7 +184,16 @@ def main(): ...@@ -174,7 +184,16 @@ def main():
ec2 = boto.connect_ec2(ec2_access_key, ec2_secret_key) ec2 = boto.connect_ec2(ec2_access_key, ec2_secret_key)
except boto.exception.NoAuthHandlerFound, e: except boto.exception.NoAuthHandlerFound, e:
module.fail_json(msg = str(e)) module.fail_json(msg = str(e))
# Here we try to lookup the group name from the security group id - if group_id is set.
try:
if group_id:
grp_details = ec2.get_all_security_groups(group_ids=group_id)
grp_item = grp_details[0]
group_name = grp_item.name
except boto.exception.NoAuthHandlerFound, e:
module.fail_json(msg = str(e))
# Both min_count and max_count equal count parameter. This means the launch request is explicit (we want count, or fail) in how many instances we want. # Both min_count and max_count equal count parameter. This means the launch request is explicit (we want count, or fail) in how many instances we want.
...@@ -183,7 +202,7 @@ def main(): ...@@ -183,7 +202,7 @@ def main():
min_count = count, min_count = count,
max_count = count, max_count = count,
monitoring_enabled = monitoring, monitoring_enabled = monitoring,
security_groups = [group], security_groups = [group_name],
instance_type = instance_type, instance_type = instance_type,
kernel_id = kernel, kernel_id = kernel,
ramdisk_id = ramdisk, ramdisk_id = ramdisk,
...@@ -219,7 +238,9 @@ def main(): ...@@ -219,7 +238,9 @@ def main():
} }
instances.append(d) instances.append(d)
module.exit_json(changed=True, instances=instances) result = {"changed": True,
"instances": instances }
module.exit_json(**result)
# this is magic, see lib/ansible/module_common.py # this is magic, see lib/ansible/module_common.py
#<<INCLUDE_ANSIBLE_MODULE_COMMON>> #<<INCLUDE_ANSIBLE_MODULE_COMMON>>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment