From b0ecfbb26d391d8c32b34fd3a8d4631030521ca7 Mon Sep 17 00:00:00 2001 From: Lester Wade Date: Fri, 25 Jan 2013 15:02:53 +0000 Subject: [PATCH] Update library/ec2 I've uncommented and added a very little supporting stuff based on skvidal's work to allow us to launch more than one instance. --- library/ec2 | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/library/ec2 b/library/ec2 index 034da936af..4a79bf0b2a 100644 --- a/library/ec2 +++ b/library/ec2 @@ -66,7 +66,7 @@ options: aliases: [] ec2_url: description: - - url to use to connect to ec2 or your cloud (for example U(https://ec2.amazonaws.com) when using Amazon ec2 directly and not Eucalyptus) + - url to use to connect to ec2 or your Eucalyptus cloud (for example (https://ec2.amazonaws.com) when using Amazon ec2 directly and not Eucalyptus) required: False default: null aliases: [] @@ -82,6 +82,12 @@ options: required: False default: null aliases: [] + count: + description: + - number of instances to launch + required: False + default: 1 + aliases: [] user_data: version_added: "0.9" description: @@ -90,10 +96,10 @@ options: default: null aliases: [] examples: - - code: "local_action: ec2 keypair=admin instance_type=m1.large image=emi-40603AD1 wait=true group=webserver" + - code: "local_action: ec2 keypair=admin instance_type=m1.large image=emi-40603AD1 wait=true group=webserver count=3" description: "Examples from Ansible Playbooks" requirements: [ "boto" ] -author: Seth Vidal, Tim Gerla +author: Seth Vidal, Tim Gerla, Lester Wade ''' import sys @@ -113,7 +119,7 @@ def main(): instance_type = dict(aliases=['type']), image = dict(required=True), kernel = dict(), - #count = dict(default='1'), # maybe someday + count = dict(default='1'), ramdisk = dict(), wait = dict(choices=BOOLEANS, default=False), ec2_url = dict(aliases=['EC2_URL']), @@ -127,7 +133,7 @@ def main(): group = module.params.get('group') instance_type = module.params.get('instance_type') image = module.params.get('image') - #count = module.params.get('count') + count = module.params.get('count') kernel = module.params.get('kernel') ramdisk = module.params.get('ramdisk') wait = module.params.get('wait') @@ -148,10 +154,13 @@ def main(): ec2 = boto.connect_ec2_endpoint(ec2_url, ec2_access_key, ec2_secret_key) else: # otherwise it's Amazon. ec2 = boto.connect_ec2(ec2_access_key, ec2_secret_key) + +# Note min_count is static in value. Since we aren't interested in addressing an autoscaling use-case. +# Autoscaling means more instances are launched on a triggered event, so this is post-play/run stuff. try: res = ec2.run_instances(image, key_name = key_name, - min_count = 1, max_count = 1, + min_count = 1, max_count = count, security_groups = [group], instance_type = instance_type, kernel_id = kernel, @@ -171,9 +180,8 @@ def main(): res_list = res.connection.get_all_instances(instids) this_res = res_list[0] num_running = len([ i for i in this_res.instances if i.state=='running' ]) - time.sleep(2) + time.sleep(5) - # there's only one - but maybe one day there could be more instances = [] for inst in this_res.instances: d = {