Пример #1
0
 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)
Пример #2
0
 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))
Пример #3
0
 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))
Пример #4
0
 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)
Пример #5
0
 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)
Пример #6
0
 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)
Пример #7
0
    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")
Пример #8
0
    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")
Пример #9
0
    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()
Пример #10
0
 def get_client(cls, context):
     return remote.create_swift_client(context)
Пример #11
0
 def __init__(self, context):
     super(SwiftStorage, self).__init__()
     self.connection = create_swift_client(context)
Пример #12
0
 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)
Пример #13
0
 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)
Пример #14
0
 def __init__(self, context):
     super(SwiftStorage, self).__init__()
     self.connection = create_swift_client(context)