Ejemplo n.º 1
0
    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
Ejemplo n.º 2
0
    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