1
2 import sys
3 import time
4 import warnings
5
6 from starcluster import exception
7 from starcluster.logger import log
8
9 from completers import InstanceCompleter
10
11
13 """
14 s3image [options] <instance-id> <image_name> [<bucket>]
15
16 Create a new instance-store (S3) AMI from a running EC2 instance
17
18 Example:
19
20 $ starcluster s3image i-999999 my-new-image mybucket
21
22 NOTE: It should now be safe to create an image from an instance launched by
23 StarCluster. If you have issues please submit a bug report to the mailing
24 list.
25 """
26 names = ['s3image', 'simg', 'createimage']
27
28 bucket = None
29 image_name = None
30
32 parser.add_option(
33 "-d", "--description", dest="description", action="store",
34 type="string",
35 default="Image created @ %s" % time.strftime("%Y%m%d%H%M"),
36 help="short description of this AMI")
37 parser.add_option(
38 "-k", "--kernel-id", dest="kernel_id", action="store",
39 type="string", default=None,
40 help="kernel id for the new AMI")
41 parser.add_option(
42 "-R", "--ramdisk-id", dest="ramdisk_id", action="store",
43 type="string", default=None,
44 help="ramdisk id for the new AMI")
45 parser.add_option(
46 "-r", "--remove-image-files", dest="remove_image_files",
47 action="store_true", default=False,
48 help="Remove generated image files on the " + \
49 "instance after registering (for S3 AMIs)")
50
53
55 if "createimage" in sys.argv:
56 warnings.warn("createimage is deprecated and will go away in the "
57 "next release. please use the s3image/ebsimage "
58 "commands instead", DeprecationWarning)
59 if len(args) != 3:
60 self.parser.error(
61 'you must specify an instance-id, image name, and bucket')
62 bucket = None
63 instanceid, image_name, bucket = args
64 self.bucket = bucket
65 self.image_name = image_name
66 i = self.ec2.get_instance(instanceid)
67 key_location = self.cfg.get_key(i.key_name).get('key_location')
68 aws_user_id = self.cfg.aws.get('aws_user_id')
69 ec2_cert = self.cfg.aws.get('ec2_cert')
70 ec2_private_key = self.cfg.aws.get('ec2_private_key')
71 self.catch_ctrl_c()
72 ami_id = self.ec2.create_s3_image(instanceid, key_location,
73 aws_user_id, ec2_cert,
74 ec2_private_key, bucket,
75 image_name=image_name,
76 **self.specified_options_dict)
77 log.info("Your new AMI id is: %s" % ami_id)
78