Exemple #1
0
    def execute(self):
        conf = self.conf
        LOG.info('Executing FS restore...')
        restore_timestamp = None

        restore_abs_path = conf.restore_abs_path
        if conf.restore_from_date:
            restore_timestamp = utils.date_to_timestamp(conf.restore_from_date)
        if conf.backup_media == 'fs':
            self.engine.restore(
                hostname_backup_name=self.conf.hostname_backup_name,
                restore_path=restore_abs_path,
                overwrite=conf.overwrite,
                recent_to_date=restore_timestamp)

            try:
                if conf.consistency_checksum:
                    backup_checksum = conf.consistency_checksum
                    restore_checksum = checksum.CheckSum(restore_abs_path,
                                                         ignorelinks=True)
                    if restore_checksum.compare(backup_checksum):
                        LOG.info('Consistency check success.')
                    else:
                        raise ConsistencyCheckException(
                            "Backup Consistency Check failed: backup checksum "
                            "({0}) and restore checksum ({1}) did not match.".
                            format(backup_checksum, restore_checksum.checksum))
            except OSError as e:
                raise ConsistencyCheckException(
                    "Backup Consistency Check failed: could not checksum file"
                    " {0} ({1})".format(e.filename, e.strerror))
            return {}
        res = restore.RestoreOs(conf.client_manager, conf.container,
                                self.storage)
        if conf.backup_media == 'nova':
            LOG.info("Restoring nova backup. Instance ID: {0}, timestamp: {1}".
                     format(conf.nova_inst_id, restore_timestamp))
            nova_network = None
            if conf.nova_restore_network:
                nova_network = conf.nova_restore_network
            res.restore_nova(conf.nova_inst_id, restore_timestamp,
                             nova_network)
        elif conf.backup_media == 'cinder':
            LOG.info("Restoring cinder backup from glance. Volume ID: {0}, "
                     "timestamp: {1}".format(conf.cinder_vol_id,
                                             restore_timestamp))
            res.restore_cinder_by_glance(conf.cinder_vol_id, restore_timestamp)
        elif conf.backup_media == 'cindernative':
            LOG.info("Restoring cinder native backup. Volume ID {0}, Backup ID"
                     " {1}, timestamp: {2}".format(conf.cindernative_vol_id,
                                                   conf.cindernative_backup_id,
                                                   restore_timestamp))
            res.restore_cinder(conf.cindernative_vol_id,
                               conf.cindernative_backup_id, restore_timestamp)
        else:
            raise Exception("unknown backup type: %s" % conf.backup_media)
        return {}
Exemple #2
0
    def execute_method(self):
        conf = self.conf
        logging.info('[*] Executing FS restore...')
        restore_timestamp = None

        restore_abs_path = conf.restore_abs_path
        if conf.restore_from_date:
            restore_timestamp = utils.date_to_timestamp(conf.restore_from_date)
        if conf.backup_media == 'fs':
            backup = self.storage.find_one(conf.hostname_backup_name,
                                           restore_timestamp)
            self.engine.restore(backup, restore_abs_path, conf.overwrite)

            try:
                if conf.consistency_checksum:
                    backup_checksum = conf.consistency_checksum
                    restore_checksum = CheckSum(restore_abs_path,
                                                ignorelinks=True)
                    if restore_checksum.compare(backup_checksum):
                        logging.info('[*] Consistency check success.')
                    else:
                        raise ConsistencyCheckException(
                            "Backup Consistency Check failed: backup checksum "
                            "({0}) and restore checksum ({1}) did not match.".
                            format(backup_checksum, restore_checksum.checksum))
            except OSError as e:
                raise ConsistencyCheckException(
                    "Backup Consistency Check failed: could not checksum file"
                    " {0} ({1})".format(e.filename, e.strerror))
            return {}

        res = restore.RestoreOs(conf.client_manager, conf.container)
        if conf.backup_media == 'nova':
            res.restore_nova(conf.nova_inst_id, restore_timestamp)
        elif conf.backup_media == 'cinder':
            res.restore_cinder_by_glance(conf.cinder_vol_id, restore_timestamp)
        elif conf.backup_media == 'cindernative':
            res.restore_cinder(conf.cindernative_vol_id, restore_timestamp)
        else:
            raise Exception("unknown backup type: %s" % conf.backup_media)
        return {}
Exemple #3
0
 def test_restore_nova_from_local(self):
     backup_opt = commons.BackupOpt1()
     restore.RestoreOs(backup_opt.client_manager, backup_opt.container,
                       'local')
Exemple #4
0
 def test_restore_nova(self):
     backup_opt = commons.BackupOpt1()
     restore.RestoreOs(backup_opt.client_manager, backup_opt.container,
                       backup_opt.storage)
Exemple #5
0
 def test_restore_cinder_without_backup_id(self):
     backup_opt = commons.BackupOpt1()
     ros = restore.RestoreOs(backup_opt.client_manager,
                             backup_opt.container, backup_opt.storage)
     ros.restore_cinder(35, 34)
Exemple #6
0
 def test_restore_cinder_by_glance(self):
     backup_opt = commons.BackupOpt1()
     restore.RestoreOs(backup_opt.client_manager, backup_opt.container,
                       backup_opt.storage)
Exemple #7
0
    def execute(self):
        conf = self.conf
        LOG.info('Executing Restore...')
        restore_timestamp = None

        restore_abs_path = conf.restore_abs_path
        if conf.restore_from_date:
            restore_timestamp = utils.date_to_timestamp(conf.restore_from_date)
        if conf.backup_media == 'fs':
            self.engine.restore(
                hostname_backup_name=self.conf.hostname_backup_name,
                restore_resource=restore_abs_path,
                overwrite=conf.overwrite,
                recent_to_date=restore_timestamp,
                backup_media=conf.mode)

            try:
                if conf.consistency_checksum:
                    backup_checksum = conf.consistency_checksum
                    restore_checksum = checksum.CheckSum(restore_abs_path,
                                                         ignorelinks=True)
                    if restore_checksum.compare(backup_checksum):
                        LOG.info('Consistency check success.')
                    else:
                        raise ConsistencyCheckException(
                            "Backup Consistency Check failed: backup checksum "
                            "({0}) and restore checksum ({1}) did not match.".
                            format(backup_checksum, restore_checksum.checksum))
            except OSError as e:
                raise ConsistencyCheckException(
                    "Backup Consistency Check failed: could not checksum file"
                    " {0} ({1})".format(e.filename, e.strerror))
            return {}
        res = restore.RestoreOs(conf.client_manager, conf.container,
                                self.storage)
        if conf.backup_media == 'nova':
            if self.conf.project_id:
                return self.engine.restore_nova_tenant(
                    project_id=self.conf.project_id,
                    hostname_backup_name=self.conf.hostname_backup_name,
                    overwrite=conf.overwrite,
                    recent_to_date=restore_timestamp)

            elif conf.nova_inst_id:
                LOG.info("Restoring nova backup. Instance ID: {0}, "
                         "timestamp: {1} network-id {2}".format(
                             conf.nova_inst_id, restore_timestamp,
                             conf.nova_restore_network))
                hostname_backup_name = os.path.join(
                    self.conf.hostname_backup_name, self.conf.nova_inst_id)
                self.engine.restore(hostname_backup_name=hostname_backup_name,
                                    restore_resource=conf.nova_inst_id,
                                    overwrite=conf.overwrite,
                                    recent_to_date=restore_timestamp,
                                    backup_media=conf.mode)

            else:
                for instance_id in self.nova_instance_ids:
                    LOG.info("Restoring nova backup. Instance ID: {0}, "
                             "timestamp: {1} network-id {2}".format(
                                 instance_id, restore_timestamp,
                                 conf.nova_restore_network))
                    hostname_backup_name = os.path.join(
                        self.conf.hostname_backup_name, instance_id)
                    self.engine.restore(
                        hostname_backup_name=hostname_backup_name,
                        restore_resource=instance_id,
                        overwrite=conf.overwrite,
                        recent_to_date=restore_timestamp,
                        backup_media=conf.mode)

        elif conf.backup_media == 'glance':
            if self.conf.project_id:
                return self.engine.restore_glance_tenant(
                    project_id=self.conf.project_id,
                    hostname_backup_name=self.conf.hostname_backup_name,
                    overwrite=conf.overwrite,
                    recent_to_date=restore_timestamp)

            elif conf.glance_image_id:
                LOG.info("Restoring glance backup. Image ID: {0}, "
                         "timestamp: {1} ".format(conf.glance_image_id,
                                                  restore_timestamp))
                hostname_backup_name = os.path.join(
                    self.conf.hostname_backup_name, self.conf.glance_image_id)
                self.engine.restore(hostname_backup_name=hostname_backup_name,
                                    restore_resource=conf.glance_image_id,
                                    overwrite=conf.overwrite,
                                    recent_to_date=restore_timestamp,
                                    backup_media=conf.mode)

            else:
                for image_id in self.glance_image_ids:
                    LOG.info("Restoring glance backup. Image ID: {0}, "
                             "timestamp: {1}".format(image_id,
                                                     restore_timestamp))
                    hostname_backup_name = os.path.join(
                        self.conf.hostname_backup_name, image_id)
                    self.engine.restore(
                        hostname_backup_name=hostname_backup_name,
                        restore_resource=image_id,
                        overwrite=conf.overwrite,
                        recent_to_date=restore_timestamp,
                        backup_media=conf.mode)

        elif conf.backup_media == 'cinder':
            if conf.cinder_vol_id:
                LOG.info("Restoring cinder backup from glance. "
                         "Volume ID: {0}, timestamp: {1}".format(
                             conf.cinder_vol_id, restore_timestamp))
                res.restore_cinder_by_glance(conf.cinder_vol_id,
                                             restore_timestamp)
            else:
                for instance_id in self.cinder_vol_ids:
                    LOG.info("Restoring cinder backup from glance. "
                             "Volume ID: {0}, timestamp: {1}".format(
                                 instance_id, restore_timestamp))
                    res.restore_cinder_by_glance(instance_id,
                                                 restore_timestamp)
        elif conf.backup_media == 'cindernative':
            LOG.info("Restoring cinder native backup. Volume ID {0}, Backup ID"
                     " {1}, timestamp: {2}".format(conf.cindernative_vol_id,
                                                   conf.cindernative_backup_id,
                                                   restore_timestamp))
            res.restore_cinder(conf.cindernative_vol_id,
                               conf.cindernative_backup_id, restore_timestamp)
        elif conf.backup_media == 'cinderbrick':
            LOG.info("Restoring cinder backup using os-brick. Volume ID {0}, "
                     "timestamp: {1}".format(conf.cinderbrick_vol_id,
                                             restore_timestamp))
            self.engine.restore(
                hostname_backup_name=self.conf.hostname_backup_name,
                restore_resource=conf.cinderbrick_vol_id,
                overwrite=conf.overwrite,
                recent_to_date=restore_timestamp,
                backup_media=conf.mode)
        else:
            raise Exception("unknown backup type: %s" % conf.backup_media)
        return {}