Index: tools/telemetry/third_party/gsutil/third_party/boto/boto/pyami/launch_ami.py |
diff --git a/tools/telemetry/third_party/gsutil/third_party/boto/boto/pyami/launch_ami.py b/tools/telemetry/third_party/gsutil/third_party/boto/boto/pyami/launch_ami.py |
deleted file mode 100644 |
index 9037217b617a7873f8529c345e4a065b610de3e8..0000000000000000000000000000000000000000 |
--- a/tools/telemetry/third_party/gsutil/third_party/boto/boto/pyami/launch_ami.py |
+++ /dev/null |
@@ -1,177 +0,0 @@ |
-#!/usr/bin/env python |
-# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/ |
-# |
-# Permission is hereby granted, free of charge, to any person obtaining a |
-# copy of this software and associated documentation files (the |
-# "Software"), to deal in the Software without restriction, including |
-# without limitation the rights to use, copy, modify, merge, publish, dis- |
-# tribute, sublicense, and/or sell copies of the Software, and to permit |
-# persons to whom the Software is furnished to do so, subject to the fol- |
-# lowing conditions: |
-# |
-# The above copyright notice and this permission notice shall be included |
-# in all copies or substantial portions of the Software. |
-# |
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS |
-# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL- |
-# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT |
-# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, |
-# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS |
-# IN THE SOFTWARE. |
-# |
-import getopt |
-import sys |
-import imp |
-import time |
-import boto |
- |
-usage_string = """ |
-SYNOPSIS |
- launch_ami.py -a ami_id [-b script_bucket] [-s script_name] |
- [-m module] [-c class_name] [-r] |
- [-g group] [-k key_name] [-n num_instances] |
- [-w] [extra_data] |
- Where: |
- ami_id - the id of the AMI you wish to launch |
- module - The name of the Python module containing the class you |
- want to run when the instance is started. If you use this |
- option the Python module must already be stored on the |
- instance in a location that is on the Python path. |
- script_file - The name of a local Python module that you would like |
- to have copied to S3 and then run on the instance |
- when it is started. The specified module must be |
- import'able (i.e. in your local Python path). It |
- will then be copied to the specified bucket in S3 |
- (see the -b option). Once the new instance(s) |
- start up the script will be copied from S3 and then |
- run locally on the instance. |
- class_name - The name of the class to be instantiated within the |
- module or script file specified. |
- script_bucket - the name of the bucket in which the script will be |
- stored |
- group - the name of the security group the instance will run in |
- key_name - the name of the keypair to use when launching the AMI |
- num_instances - how many instances of the AMI to launch (default 1) |
- input_queue_name - Name of SQS to read input messages from |
- output_queue_name - Name of SQS to write output messages to |
- extra_data - additional name-value pairs that will be passed as |
- userdata to the newly launched instance. These should |
- be of the form "name=value" |
- The -r option reloads the Python module to S3 without launching |
- another instance. This can be useful during debugging to allow |
- you to test a new version of your script without shutting down |
- your instance and starting up another one. |
- The -w option tells the script to run synchronously, meaning to |
- wait until the instance is actually up and running. It then prints |
- the IP address and internal and external DNS names before exiting. |
-""" |
- |
-def usage(): |
- print(usage_string) |
- sys.exit() |
- |
-def main(): |
- try: |
- opts, args = getopt.getopt(sys.argv[1:], 'a:b:c:g:hi:k:m:n:o:rs:w', |
- ['ami', 'bucket', 'class', 'group', 'help', |
- 'inputqueue', 'keypair', 'module', |
- 'numinstances', 'outputqueue', |
- 'reload', 'script_name', 'wait']) |
- except: |
- usage() |
- params = {'module_name': None, |
- 'script_name': None, |
- 'class_name': None, |
- 'script_bucket': None, |
- 'group': 'default', |
- 'keypair': None, |
- 'ami': None, |
- 'num_instances': 1, |
- 'input_queue_name': None, |
- 'output_queue_name': None} |
- reload = None |
- wait = None |
- for o, a in opts: |
- if o in ('-a', '--ami'): |
- params['ami'] = a |
- if o in ('-b', '--bucket'): |
- params['script_bucket'] = a |
- if o in ('-c', '--class'): |
- params['class_name'] = a |
- if o in ('-g', '--group'): |
- params['group'] = a |
- if o in ('-h', '--help'): |
- usage() |
- if o in ('-i', '--inputqueue'): |
- params['input_queue_name'] = a |
- if o in ('-k', '--keypair'): |
- params['keypair'] = a |
- if o in ('-m', '--module'): |
- params['module_name'] = a |
- if o in ('-n', '--num_instances'): |
- params['num_instances'] = int(a) |
- if o in ('-o', '--outputqueue'): |
- params['output_queue_name'] = a |
- if o in ('-r', '--reload'): |
- reload = True |
- if o in ('-s', '--script'): |
- params['script_name'] = a |
- if o in ('-w', '--wait'): |
- wait = True |
- |
- # check required fields |
- required = ['ami'] |
- for pname in required: |
- if not params.get(pname, None): |
- print('%s is required' % pname) |
- usage() |
- if params['script_name']: |
- # first copy the desired module file to S3 bucket |
- if reload: |
- print('Reloading module %s to S3' % params['script_name']) |
- else: |
- print('Copying module %s to S3' % params['script_name']) |
- l = imp.find_module(params['script_name']) |
- c = boto.connect_s3() |
- bucket = c.get_bucket(params['script_bucket']) |
- key = bucket.new_key(params['script_name'] + '.py') |
- key.set_contents_from_file(l[0]) |
- params['script_md5'] = key.md5 |
- # we have everything we need, now build userdata string |
- l = [] |
- for k, v in params.items(): |
- if v: |
- l.append('%s=%s' % (k, v)) |
- c = boto.connect_ec2() |
- l.append('aws_access_key_id=%s' % c.aws_access_key_id) |
- l.append('aws_secret_access_key=%s' % c.aws_secret_access_key) |
- for kv in args: |
- l.append(kv) |
- s = '|'.join(l) |
- if not reload: |
- rs = c.get_all_images([params['ami']]) |
- img = rs[0] |
- r = img.run(user_data=s, key_name=params['keypair'], |
- security_groups=[params['group']], |
- max_count=params.get('num_instances', 1)) |
- print('AMI: %s - %s (Started)' % (params['ami'], img.location)) |
- print('Reservation %s contains the following instances:' % r.id) |
- for i in r.instances: |
- print('\t%s' % i.id) |
- if wait: |
- running = False |
- while not running: |
- time.sleep(30) |
- [i.update() for i in r.instances] |
- status = [i.state for i in r.instances] |
- print(status) |
- if status.count('running') == len(r.instances): |
- running = True |
- for i in r.instances: |
- print('Instance: %s' % i.ami_launch_index) |
- print('Public DNS Name: %s' % i.public_dns_name) |
- print('Private DNS Name: %s' % i.private_dns_name) |
- |
-if __name__ == "__main__": |
- main() |