def test_create_swift_client(self): mock_resp = mock(dict) when(swiftclient.client.Connection).get_container('bob').thenReturn( ["text", mock_resp]) client = remote.create_swift_client(ReddwarfContext(tenant='123')) headers, container = client.get_container('bob') self.assertIs(headers, "text") self.assertIs(container, mock_resp)
def get(cls, context, container, name): """download a snapshot from remote swift container""" client = create_swift_client(context) try: return client.get_object(container=container, obj=name) except ClientException as ex: LOG.exception("Failed to download snapshot %s from " "remote swift container:" % name) raise exception.BackupDownloadError(str(ex))
def put(cls, context, container, name, contents): """upload a snapshot onto remote swift container""" client = create_swift_client(context) try: client.put_object(container=container, obj=name, contents=contents) except ClientException as ex: LOG.exception("Failed to upload snapshot %s onto " "remote swift container:" % name) raise exception.BackupUploadError(str(ex))
def check_object_exist(cls, context, location): try: parts = location.split('/') obj = parts[-1] container = parts[-2] client = create_swift_client(context) client.head_object(container, obj) return True except ClientException as e: if e.http_status == 404: return False else: raise exception.SwiftAuthError(tenant_id=context.tenant)
def _check_object_exist(context, location): LOG.info(_("Checking if backup exist in '%s'") % location) try: parts = location.split('/') obj = parts[-1] container = parts[-2] client = create_swift_client(context) client.head_object(container, obj) return True except ClientException as e: if e.http_status == 404: return False else: raise exception.SwiftAuthError(tenant_id=context.tenant)
def delete_files_from_swift(cls, context, filename): client = remote.create_swift_client(context) # Delete the manifest if client.head_object(CONF.backup_swift_container, filename): client.delete_object(CONF.backup_swift_container, filename) # Delete the segments if client.head_container(filename + "_segments"): for obj in client.get_container(filename + "_segments")[1]: client.delete_object(filename + "_segments", obj['name']) # Delete the segments container client.delete_container(filename + "_segments")
def execute_backup(self, context, backup_id, runner=RUNNER): LOG.debug("Searching for backup instance %s", backup_id) backup = DBBackup.find_by(id=backup_id) LOG.info("Setting task state to %s for instance %s", BackupState.NEW, backup.instance_id) backup.state(BackupState.NEW) backup.save() LOG.info("Running backup %s", backup_id) user = ADMIN_USER_NAME password = get_auth_password() connection = create_swift_client(context) with runner(filename=backup_id, user=user, password=password) as bkup: LOG.info("Starting Backup %s", backup_id) connection.put_container(BACKUP_CONTAINER) while not bkup.end_of_file: segment = bkup.segment etag = connection.put_object(BACKUP_CONTAINER, segment, bkup) # Check each segment MD5 hash against swift etag # Raise an error and mark backup as failed if etag != bkup.schecksum.hexdigest(): print etag, bkup.schecksum.hexdigest() backup.state(BackupState.FAILED) backup.note = "Error sending data to cloud files!" backup.save() raise BackupError(backup.note) checksum = bkup.checksum.hexdigest() url = connection.url location = "%s/%s/%s" % (url, BACKUP_CONTAINER, bkup.manifest) LOG.info("Backup %s file size: %s", backup_id, bkup.content_length) LOG.info('Backup %s file checksum: %s', backup_id, checksum) LOG.info('Backup %s location: %s', location) # Create the manifest file headers = {'X-Object-Manifest': bkup.prefix} connection.put_object(BACKUP_CONTAINER, bkup.manifest, contents='', headers=headers) LOG.info("Saving %s Backup Info", backup_id) backup.state(BackupState.COMPLETED) backup.checksum = checksum backup.location = location backup.backup_type = bkup.backup_type backup.save()
def get_client(cls, context): return remote.create_swift_client(context)
def __init__(self, context): super(SwiftStorage, self).__init__() self.connection = create_swift_client(context)
def verify_swift_auth_token(cls, context): try: client = create_swift_client(context) client.get_account() except ClientException: raise exception.SwiftAuthError(tenant_id=context.tenant)