def install(self, image_md, services, image_fileobj, image_size, args, tags=None): # If you're curious why this uses a generic "args" dict, see # ImageMetadata.install_profile's commentary. bundle_args = dict(self.bundle_args) for argname in ('privatekey', 'cert', 'ec2cert', 'user', 'bucket', 'location', 'kernel', 'ramdisk'): if args.get(argname): bundle_args[argname] = args[argname] req = BundleAndUploadImage( service=services['s3']['service'], config=services['s3']['service'].config, loglevel=services['s3']['service'].log.level, auth=services['s3']['auth'], image=image_fileobj, prefix=image_md.get_nvra(), image_type='machine', # We only support machine images for now image_size=image_size, show_progress=args.get('show_progress'), max_pending_parts=2, part_size=10485760, **bundle_args) try: bundle_info = req.main() except KeyError as err: raise ValueError('{0} is required'.format(err.args[0])) register_args = dict(self.register_args) if args.get('kernel'): register_args['KernelId'] = args['kernel'] if args.get('ramdisk'): register_args['RamdiskId'] = args['ramdisk'] if not register_args.get('Description'): register_args['Description'] = image_md.description req = RegisterImage( service=services['ec2']['service'], config=services['ec2']['service'].config, loglevel=services['ec2']['service'].log.level, auth=services['ec2']['auth'], ImageLocation=bundle_info['manifests'][0]['key'], Name='{0}-{1}'.format( image_md.get_nvra(), datetime.datetime.utcnow().strftime('%F-%H-%m-%s')), **register_args) register_response = req.main() image_id = register_response['imageId'] tag_args = dict(self.tag_args) tag_args['ResourceId'] = [image_id] tag_args.setdefault('Tag', []) if tags: for key, val in tags.items(): tag_args['Tag'].append({'Key': key, 'Value': val}) req = CreateTags( service=services['ec2']['service'], config=services['ec2']['service'].config, loglevel=services['ec2']['service'].log.level, auth=services['ec2']['auth'], **tag_args) req.main() return image_id
def install(self, image_md, services, image_fileobj, image_size, args, tags=None): # If you're curious why this uses a generic "args" dict, see # ImageMetadata.install_profile's commentary. bundle_args = dict(self.bundle_args) for argname in ('privatekey', 'cert', 'ec2cert', 'user', 'bucket', 'location', 'kernel', 'ramdisk'): if args.get(argname): bundle_args[argname] = args[argname] req = BundleAndUploadImage( service=services['s3']['service'], config=services['s3']['service'].config, loglevel=services['s3']['service'].log.level, auth=services['s3']['auth'], image=image_fileobj, prefix=image_md.get_nvra(), image_type='machine', # We only support machine images for now image_size=image_size, show_progress=args.get('show_progress'), max_pending_parts=2, part_size=10485760, **bundle_args) try: bundle_info = req.main() except KeyError as err: raise ValueError('{0} is required'.format(err.args[0])) register_args = dict(self.register_args) if args.get('kernel'): register_args['KernelId'] = args['kernel'] if args.get('ramdisk'): register_args['RamdiskId'] = args['ramdisk'] if not register_args.get('Description'): register_args['Description'] = image_md.description req = RegisterImage( service=services['ec2']['service'], config=services['ec2']['service'].config, loglevel=services['ec2']['service'].log.level, auth=services['ec2']['auth'], ImageLocation=bundle_info['manifests'][0]['key'], Name='{0}-{1}'.format( image_md.get_nvra(), datetime.datetime.utcnow().strftime('%F-%H-%m-%s')), **register_args) register_response = req.main() image_id = register_response['imageId'] tag_args = dict(self.tag_args) tag_args['ResourceId'] = [image_id] tag_args.setdefault('Tag', []) if tags: for key, val in tags.iteritems(): tag_args['Tag'].append({'Key': key, 'Value': val}) req = CreateTags( service=services['ec2']['service'], config=services['ec2']['service'].config, loglevel=services['ec2']['service'].log.level, auth=services['ec2']['auth'], **tag_args) req.main() return image_id