def auto_update_db(self, item, os_item): if item is None and self.KIND not in VPC_KINDS: item = ec2utils.auto_create_db_item(self.context, self.KIND, self.get_id(os_item)) LOG.info( _LI('Item %(item)s was updated to %(os_item)s.') % {'item': str(item), 'os_item': str(os_item)}) return item
def _get_nova_api_version(context): client = novaclient.Client(REQUIRED_NOVA_API_VERSION, session=context.session, service_type=CONF.nova_service_type) required = nova_api_versions.APIVersion(REQUIRED_NOVA_API_MICROVERSION) current = client.versions.get_current() if not current: logger.warning( _LW('Could not check Nova API version because no version ' 'was found in Nova version list for url %(url)s of service ' 'type "%(service_type)s". ' 'Use v%(required_api_version)s Nova API.'), { 'url': client.client.get_endpoint(), 'service_type': CONF.nova_service_type, 'required_api_version': REQUIRED_NOVA_API_MICROVERSION }) return REQUIRED_NOVA_API_MICROVERSION if current.id != REQUIRED_NOVA_API_VERSION_ID: logger.warning( _LW('Specified "%s" Nova service type does not support v2.1 API. ' 'A lot of useful EC2 compliant instance properties ' 'will be unavailable.'), CONF.nova_service_type) return LEGACY_NOVA_API_VERSION if (nova_api_versions.APIVersion(current.version) < required): logger.warning( _LW('Nova support v%(nova_api_version)s, ' 'but v%(required_api_version)s is required. ' 'A lot of useful EC2 compliant instance properties ' 'will be unavailable.'), { 'nova_api_version': current.version, 'required_api_version': REQUIRED_NOVA_API_MICROVERSION }) return current.version logger.info( _LI('Provided Nova API version is v%(nova_api_version)s, ' 'used one is v%(required_api_version)s'), { 'nova_api_version': current.version, 'required_api_version': (REQUIRED_NOVA_API_MICROVERSION) }) return REQUIRED_NOVA_API_MICROVERSION
def _get_nova_api_version(context): client = novaclient.Client(REQUIRED_NOVA_API_VERSION, session=context.session, service_type=CONF.nova_service_type) required = nova_api_versions.APIVersion(REQUIRED_NOVA_API_MICROVERSION) current = client.versions.get_current() if not current: logger.warning( _LW('Could not check Nova API version because no version ' 'was found in Nova version list for url %(url)s of service ' 'type "%(service_type)s". ' 'Use v%(required_api_version)s Nova API.'), {'url': client.client.get_endpoint(), 'service_type': CONF.nova_service_type, 'required_api_version': REQUIRED_NOVA_API_MICROVERSION}) return REQUIRED_NOVA_API_MICROVERSION if current.id != REQUIRED_NOVA_API_VERSION_ID: logger.warning( _LW('Specified "%s" Nova service type does not support v2.1 API. ' 'A lot of useful EC2 compliant instance properties ' 'will be unavailable.'), CONF.nova_service_type) return LEGACY_NOVA_API_VERSION if (nova_api_versions.APIVersion(current.version) < required): logger.warning( _LW('Nova support v%(nova_api_version)s, ' 'but v%(required_api_version)s is required. ' 'A lot of useful EC2 compliant instance properties ' 'will be unavailable.'), {'nova_api_version': current.version, 'required_api_version': REQUIRED_NOVA_API_MICROVERSION}) return current.version logger.info(_LI('Provided Nova API version is v%(nova_api_version)s, ' 'used one is v%(required_api_version)s'), {'nova_api_version': current.version, 'required_api_version': ( REQUIRED_NOVA_API_MICROVERSION)}) return REQUIRED_NOVA_API_MICROVERSION
def delayed_create(): """This handles the fetching and decrypting of the part files.""" context.update_store() try: image_path = tempfile.mkdtemp(dir=CONF.image_decryption_dir) log_vars = { 'image_location': image_location, 'image_path': image_path } _update_image_state('downloading') try: parts = [] for part_name in image_parts: part = _s3_download_file(bucket, part_name, 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( _LE('Failed to download %(image_location)s ' 'to %(image_path)s'), log_vars) _update_image_state('failed_download') return _update_image_state('decrypting') try: dec_filename = os.path.join(image_path, 'image.tar.gz') _s3_decrypt_image(context, enc_filename, encrypted_key, encrypted_iv, dec_filename) except Exception: LOG.exception( _LE('Failed to decrypt %(image_location)s ' 'to %(image_path)s'), log_vars) _update_image_state('failed_decrypt') return _update_image_state('untarring') try: unz_filename = _s3_untarzip_image(image_path, dec_filename) except Exception: LOG.exception( _LE('Failed to untar %(image_location)s ' 'to %(image_path)s'), log_vars) _update_image_state('failed_untar') return _update_image_state('uploading') try: with open(unz_filename) as image_file: image.update(data=image_file) except Exception: LOG.exception( _LE('Failed to upload %(image_location)s ' 'to %(image_path)s'), log_vars) _update_image_state('failed_upload') return _update_image_state('available') shutil.rmtree(image_path) except glance_exception.HTTPNotFound: LOG.info(_LI('Image %swas deleted underneath us'), image.id) except Exception: LOG.exception(_LE('Failed to complete image %s creation'), image.id)
def delayed_create(): """This handles the fetching and decrypting of the part files.""" context.update_store() try: image_path = tempfile.mkdtemp(dir=CONF.image_decryption_dir) log_vars = {'image_location': image_location, 'image_path': image_path} _update_image_state('downloading') try: parts = [] for part_name in image_parts: part = _s3_download_file(bucket, part_name, 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(_LE('Failed to download %(image_location)s ' 'to %(image_path)s'), log_vars) _update_image_state('failed_download') return _update_image_state('decrypting') try: dec_filename = os.path.join(image_path, 'image.tar.gz') _s3_decrypt_image(context, enc_filename, encrypted_key, encrypted_iv, dec_filename) except Exception: LOG.exception(_LE('Failed to decrypt %(image_location)s ' 'to %(image_path)s'), log_vars) _update_image_state('failed_decrypt') return _update_image_state('untarring') try: unz_filename = _s3_untarzip_image(image_path, dec_filename) except Exception: LOG.exception(_LE('Failed to untar %(image_location)s ' 'to %(image_path)s'), log_vars) _update_image_state('failed_untar') return _update_image_state('uploading') try: with open(unz_filename) as image_file: image.update(data=image_file) except Exception: LOG.exception(_LE('Failed to upload %(image_location)s ' 'to %(image_path)s'), log_vars) _update_image_state('failed_upload') return _update_image_state('available') shutil.rmtree(image_path) except glance_exception.HTTPNotFound: LOG.info(_LI('Image %swas deleted underneath us'), image.id) except Exception: LOG.exception(_LE('Failed to complete image %s creation'), image.id)
def delete_obsolete_item(self, item): LOG.info(_LI('Deleting obsolete item %(item)s') % {'item': str(item)}) db_api.delete_item(self.context, item['id'])