コード例 #1
0
ファイル: s3.py プロジェクト: superstack/nova
        def delayed_create():
            """This handles the fetching and decrypting of the part files."""
            parts = []
            for fn_element in manifest.find('image').getiterator('filename'):
                part = self._download_file(bucket, fn_element.text, image_path)
                parts.append(part)

            # NOTE(vish): this may be suboptimal, should we use cat?
            encrypted_filename = os.path.join(image_path, 'image.encrypted')
            with open(encrypted_filename, 'w') as combined:
                for filename in parts:
                    with open(filename) as part:
                        shutil.copyfileobj(part, combined)

            metadata['properties']['image_state'] = 'decrypting'
            self.service.update(context, image_id, metadata)

            hex_key = manifest.find('image/ec2_encrypted_key').text
            encrypted_key = binascii.a2b_hex(hex_key)
            hex_iv = manifest.find('image/ec2_encrypted_iv').text
            encrypted_iv = binascii.a2b_hex(hex_iv)

            # FIXME(vish): grab key from common service so this can run on
            #              any host.
            cloud_pk = crypto.key_path(context.project_id)

            decrypted_filename = os.path.join(image_path, 'image.tar.gz')
            self._decrypt_image(encrypted_filename, encrypted_key,
                                encrypted_iv, cloud_pk, decrypted_filename)

            metadata['properties']['image_state'] = 'untarring'
            self.service.update(context, image_id, metadata)

            unz_filename = self._untarzip_image(image_path, decrypted_filename)

            metadata['properties']['image_state'] = 'uploading'
            with open(unz_filename) as image_file:
                self.service.update(context, image_id, metadata, image_file)
            metadata['properties']['image_state'] = 'available'
            self.service.update(context, image_id, metadata)

            shutil.rmtree(image_path)
コード例 #2
0
        def delayed_create():
            """This handles the fetching and decrypting of the part files."""
            parts = []
            for fn_element in manifest.find('image').getiterator('filename'):
                part = self._download_file(bucket, fn_element.text, image_path)
                parts.append(part)

            # NOTE(vish): this may be suboptimal, should we use cat?
            encrypted_filename = os.path.join(image_path, 'image.encrypted')
            with open(encrypted_filename, 'w') as combined:
                for filename in parts:
                    with open(filename) as part:
                        shutil.copyfileobj(part, combined)

            metadata['properties']['image_state'] = 'decrypting'
            self.service.update(context, image_id, metadata)

            hex_key = manifest.find('image/ec2_encrypted_key').text
            encrypted_key = binascii.a2b_hex(hex_key)
            hex_iv = manifest.find('image/ec2_encrypted_iv').text
            encrypted_iv = binascii.a2b_hex(hex_iv)

            # FIXME(vish): grab key from common service so this can run on
            #              any host.
            cloud_pk = crypto.key_path(context.project_id)

            decrypted_filename = os.path.join(image_path, 'image.tar.gz')
            self._decrypt_image(encrypted_filename, encrypted_key,
                                encrypted_iv, cloud_pk, decrypted_filename)

            metadata['properties']['image_state'] = 'untarring'
            self.service.update(context, image_id, metadata)

            unz_filename = self._untarzip_image(image_path, decrypted_filename)

            metadata['properties']['image_state'] = 'uploading'
            with open(unz_filename) as image_file:
                self.service.update(context, image_id, metadata, image_file)
            metadata['properties']['image_state'] = 'available'
            self.service.update(context, image_id, metadata)

            shutil.rmtree(image_path)
コード例 #3
0
ファイル: s3.py プロジェクト: young8/openstack-bill
        def delayed_create():
            """This handles the fetching and decrypting of the part files."""
            log_vars = {
                'image_location': image_location,
                'image_path': image_path
            }
            metadata['properties']['image_state'] = 'downloading'
            self.service.update(context, image_id, metadata)

            try:
                parts = []
                elements = manifest.find('image').getiterator('filename')
                for fn_element in elements:
                    part = self._download_file(bucket, fn_element.text,
                                               image_path)
                    parts.append(part)

                # NOTE(vish): this may be suboptimal, should we use cat?
                enc_filename = os.path.join(image_path, 'image.encrypted')
                with open(enc_filename, 'w') as combined:
                    for filename in parts:
                        with open(filename) as part:
                            shutil.copyfileobj(part, combined)

            except Exception:
                LOG.exception(
                    _("Failed to download %(image_location)s "
                      "to %(image_path)s"), log_vars)
                metadata['properties']['image_state'] = 'failed_download'
                self.service.update(context, image_id, metadata)
                return

            metadata['properties']['image_state'] = 'decrypting'
            self.service.update(context, image_id, metadata)

            try:
                hex_key = manifest.find('image/ec2_encrypted_key').text
                encrypted_key = binascii.a2b_hex(hex_key)
                hex_iv = manifest.find('image/ec2_encrypted_iv').text
                encrypted_iv = binascii.a2b_hex(hex_iv)

                # FIXME(vish): grab key from common service so this can run on
                #              any host.
                cloud_pk = crypto.key_path(context.project_id)

                dec_filename = os.path.join(image_path, 'image.tar.gz')
                self._decrypt_image(enc_filename, encrypted_key, encrypted_iv,
                                    cloud_pk, dec_filename)
            except Exception:
                LOG.exception(
                    _("Failed to decrypt %(image_location)s "
                      "to %(image_path)s"), log_vars)
                metadata['properties']['image_state'] = 'failed_decrypt'
                self.service.update(context, image_id, metadata)
                return

            metadata['properties']['image_state'] = 'untarring'
            self.service.update(context, image_id, metadata)

            try:
                unz_filename = self._untarzip_image(image_path, dec_filename)
            except Exception:
                LOG.exception(
                    _("Failed to untar %(image_location)s "
                      "to %(image_path)s"), log_vars)
                metadata['properties']['image_state'] = 'failed_untar'
                self.service.update(context, image_id, metadata)
                return

            metadata['properties']['image_state'] = 'uploading'
            self.service.update(context, image_id, metadata)
            try:
                with open(unz_filename) as image_file:
                    self.service.update(context, image_id, metadata,
                                        image_file)
            except Exception:
                LOG.exception(
                    _("Failed to upload %(image_location)s "
                      "to %(image_path)s"), log_vars)
                metadata['properties']['image_state'] = 'failed_upload'
                self.service.update(context, image_id, metadata)
                return

            metadata['properties']['image_state'] = 'available'
            metadata['status'] = 'active'
            self.service.update(context, image_id, metadata)

            shutil.rmtree(image_path)
コード例 #4
0
ファイル: s3.py プロジェクト: BillTheBest/nova
        def delayed_create():
            """This handles the fetching and decrypting of the part files."""
            log_vars = {'image_location': image_location,
                        'image_path': image_path}
            metadata['properties']['image_state'] = 'downloading'
            self.service.update(context, image_uuid, metadata)

            try:
                parts = []
                elements = manifest.find('image').getiterator('filename')
                for fn_element in elements:
                    part = self._download_file(bucket,
                                               fn_element.text,
                                               image_path)
                    parts.append(part)

                # NOTE(vish): this may be suboptimal, should we use cat?
                enc_filename = os.path.join(image_path, 'image.encrypted')
                with open(enc_filename, 'w') as combined:
                    for filename in parts:
                        with open(filename) as part:
                            shutil.copyfileobj(part, combined)

            except Exception:
                LOG.exception(_("Failed to download %(image_location)s "
                                "to %(image_path)s"), log_vars)
                metadata['properties']['image_state'] = 'failed_download'
                self.service.update(context, image_uuid, metadata)
                return

            metadata['properties']['image_state'] = 'decrypting'
            self.service.update(context, image_uuid, metadata)

            try:
                hex_key = manifest.find('image/ec2_encrypted_key').text
                encrypted_key = binascii.a2b_hex(hex_key)
                hex_iv = manifest.find('image/ec2_encrypted_iv').text
                encrypted_iv = binascii.a2b_hex(hex_iv)

                # FIXME(vish): grab key from common service so this can run on
                #              any host.
                cloud_pk = crypto.key_path(context.project_id)

                dec_filename = os.path.join(image_path, 'image.tar.gz')
                self._decrypt_image(enc_filename, encrypted_key,
                                    encrypted_iv, cloud_pk,
                                    dec_filename)
            except Exception:
                LOG.exception(_("Failed to decrypt %(image_location)s "
                                "to %(image_path)s"), log_vars)
                metadata['properties']['image_state'] = 'failed_decrypt'
                self.service.update(context, image_uuid, metadata)
                return

            metadata['properties']['image_state'] = 'untarring'
            self.service.update(context, image_uuid, metadata)

            try:
                unz_filename = self._untarzip_image(image_path, dec_filename)
            except Exception:
                LOG.exception(_("Failed to untar %(image_location)s "
                                "to %(image_path)s"), log_vars)
                metadata['properties']['image_state'] = 'failed_untar'
                self.service.update(context, image_uuid, metadata)
                return

            metadata['properties']['image_state'] = 'uploading'
            self.service.update(context, image_uuid, metadata)
            try:
                with open(unz_filename) as image_file:
                    self.service.update(context, image_uuid,
                                        metadata, image_file)
            except Exception:
                LOG.exception(_("Failed to upload %(image_location)s "
                                "to %(image_path)s"), log_vars)
                metadata['properties']['image_state'] = 'failed_upload'
                self.service.update(context, image_uuid, metadata)
                return

            metadata['properties']['image_state'] = 'available'
            metadata['status'] = 'active'
            self.service.update(context, image_uuid, metadata)

            shutil.rmtree(image_path)