コード例 #1
0
ファイル: backup_service.py プロジェクト: wolf-hw/rainbond-ui
    def back_up_group_apps(self, tenant, user, region, group_id, mode, note):
        service_slug = app_store.get_slug_connection_info(
            "enterprise", tenant.tenant_name)
        service_image = app_store.get_image_connection_info(
            "enterprise", tenant.tenant_name)

        services = group_service.get_group_services(group_id)
        event_id = make_uuid()
        group_uuid = self.get_backup_group_uuid(group_id)
        metadata = self.get_group_app_metadata(group_id, tenant)
        version = current_time_str("%Y%m%d%H%M%S")
        data = {
            "event_id": event_id,
            "group_id": group_uuid,
            "metadata": metadata,
            "service_ids": [s.service_id for s in services],
            "mode": mode,
            "version": version,
            "slug_info": service_slug,
            "image_info": service_image
        }
        body = region_api.backup_group_apps(region, tenant.tenant_name, data)
        bean = body["bean"]
        record_data = {
            "group_id":
            group_id,
            "event_id":
            event_id,
            "group_uuid":
            group_uuid,
            "version":
            version,
            "team_id":
            tenant.tenant_id,
            "region":
            region,
            "status":
            bean["status"],
            "note":
            note,
            "mode":
            mode,
            "backup_id":
            bean.get("backup_id", ""),
            "source_dir":
            bean.get("source_dir", ""),
            "backup_size":
            bean.get("backup_size", 0),
            "user":
            user.nick_name,
            "backup_server_info":
            json.dumps({
                "slug_info": service_slug,
                "image_info": service_image
            })
        }
        backup_record = backup_record_repo.create_backup_records(**record_data)
        return backup_record
コード例 #2
0
    def backup_group_apps(self,
                          tenant,
                          user,
                          region,
                          group_id,
                          mode,
                          note,
                          force=False):
        s3_config = EnterpriseConfigService(
            tenant.enterprise_id).get_cloud_obj_storage_info()
        if mode == "full-online" and not s3_config:
            raise ErrObjectStorageInfoNotFound
        services = group_service.get_group_services(group_id)
        event_id = make_uuid()
        group_uuid = self.get_backup_group_uuid(group_id)
        total_memory, metadata = self.get_group_app_metadata(group_id, tenant)
        version = current_time_str("%Y%m%d%H%M%S")

        data = {
            "event_id": event_id,
            "group_id": group_uuid,
            "metadata": json.dumps(metadata),
            "service_ids": [s.service_id for s in services],
            "mode": mode,
            "version": version,
            "s3_config": s3_config,
            "force": force,
        }
        # 向数据中心发起备份任务
        try:
            body = region_api.backup_group_apps(region, tenant.tenant_name,
                                                data)
            bean = body["bean"]
            record_data = {
                "group_id": group_id,
                "event_id": event_id,
                "group_uuid": group_uuid,
                "version": version,
                "team_id": tenant.tenant_id,
                "region": region,
                "status": bean["status"],
                "note": note,
                "mode": mode,
                "backup_id": bean.get("backup_id", ""),
                "source_dir": bean.get("source_dir", ""),
                "source_type": bean.get("source_type", ""),
                "backup_size": bean.get("backup_size", 0),
                "user": user.nick_name,
                "total_memory": total_memory,
            }
            return backup_record_repo.create_backup_records(**record_data)
        except region_api.CallApiError as e:
            logger.exception(e)
            if e.status == 401:
                raise ServiceHandleException(msg="backup failed",
                                             msg_show="有状态组件必须停止方可进行备份")
コード例 #3
0
    def import_group_backup(self, tenant, region, group_id, upload_file):
        group = group_repo.get_group_by_id(group_id)
        if not group:
            return 404, "需要导入的组不存在", None
        services = group_service.get_group_services(group_id)
        if services:
            return 409, "请确保需要导入的组中不存在组件", None
        content = upload_file.read().strip()
        data = json.loads(AuthCode.decode(content, KEY))
        current_backup = backup_record_repo.get_record_by_group_id_and_backup_id(
            group_id, data["backup_id"])
        if current_backup:
            return 412, "当前团队已导入过该备份", None
        event_id = make_uuid()
        group_uuid = make_uuid()
        params = {
            "event_id": event_id,
            "group_id": group_uuid,
            "status": data["status"],
            "version": data["version"],
            "source_dir": data["source_dir"],
            "source_type": data["source_type"],
            "backup_mode": data["mode"],
            "backup_size": data["backup_size"]
        }
        body = region_api.copy_backup_data(region, tenant.tenant_name, params)

        bean = body["bean"]
        record_data = {
            "group_id": group.ID,
            "event_id": event_id,
            "group_uuid": group_uuid,
            "version": data["version"],
            "team_id": tenant.tenant_id,
            "region": region,
            "status": bean["status"],
            "note": data["note"],
            "mode": data["mode"],
            "backup_id": bean["backup_id"],
            "source_dir": data["source_dir"],
            "source_type": data["source_type"],
            "backup_size": data["backup_size"],
            "user": data["user"],
            "total_memory": data["total_memory"],
            "backup_server_info": data["backup_server_info"]
        }

        new_backup_record = backup_record_repo.create_backup_records(
            **record_data)
        return 200, "success", new_backup_record
コード例 #4
0
    def __copy_backup_record(self, restore_mode, origin_backup_record,
                             current_team, current_region, migrate_team,
                             migrate_region, migrate_type):
        """拷贝备份数据"""
        services = group_service.get_group_services(
            origin_backup_record.group_id)
        if not services and migrate_type == "recover":
            # restore on the original group
            new_group = group_repo.get_group_by_id(
                origin_backup_record.group_id)
            if not new_group:
                new_group = self.__create_new_group_by_group_name(
                    migrate_team.tenant_id, migrate_region,
                    origin_backup_record.group_id)
        else:
            new_group = self.__create_new_group(migrate_team.tenant_id,
                                                migrate_region,
                                                origin_backup_record.group_id)
        if restore_mode != AppMigrateType.CURRENT_REGION_CURRENT_TENANT:
            # 获取原有数据中心数据
            original_data = region_api.get_backup_status_by_backup_id(
                current_region, current_team.tenant_name,
                origin_backup_record.backup_id)

            new_event_id = make_uuid()
            new_group_uuid = make_uuid()
            new_data = original_data["bean"]
            new_data["event_id"] = new_event_id
            new_data["group_id"] = new_group_uuid
            # 存入其他数据中心
            body = region_api.copy_backup_data(migrate_region,
                                               migrate_team.tenant_name,
                                               new_data)
            bean = body["bean"]
            params = origin_backup_record.to_dict()
            params.pop("ID")
            params["team_id"] = migrate_team.tenant_id
            params["event_id"] = new_event_id
            params["group_id"] = new_group.ID
            params["group_uuid"] = new_group_uuid
            params["region"] = migrate_region
            params["backup_id"] = bean["backup_id"]
            # create a new backup record in the new region
            new_backup_record = backup_record_repo.create_backup_records(
                **params)
            return new_group, new_backup_record
        return new_group, None
コード例 #5
0
 def backup_group_apps(self, tenant, user, region, group_id, mode, note):
     service_slug = app_store.get_slug_connection_info("enterprise", tenant.tenant_name)
     service_image = app_store.get_image_connection_info("enterprise", tenant.tenant_name)
     if mode == "full-online" and not self.is_hub_info_configed():
         return 412, "未配置hub仓库信息", None
     services = group_service.get_group_services(group_id)
     event_id = make_uuid()
     group_uuid = self.get_backup_group_uuid(group_id)
     total_memory, metadata = self.get_group_app_metadata(group_id, tenant)
     version = current_time_str("%Y%m%d%H%M%S")
     data = {
         "event_id": event_id,
         "group_id": group_uuid,
         "metadata": metadata,
         "service_ids": [s.service_id for s in services],
         "mode": mode,
         "version": version,
         "slug_info": service_slug,
         "image_info": service_image
     }
     # 向数据中心发起备份任务
     body = region_api.backup_group_apps(region, tenant.tenant_name, data)
     bean = body["bean"]
     record_data = {
         "group_id": group_id,
         "event_id": event_id,
         "group_uuid": group_uuid,
         "version": version,
         "team_id": tenant.tenant_id,
         "region": region,
         "status": bean["status"],
         "note": note,
         "mode": mode,
         "backup_id": bean.get("backup_id", ""),
         "source_dir": bean.get("source_dir", ""),
         "source_type": bean.get("source_type", ""),
         "backup_size": bean.get("backup_size", 0),
         "user": user.nick_name,
         "total_memory": total_memory,
         "backup_server_info": json.dumps({
             "slug_info": service_slug,
             "image_info": service_image
         })
     }
     backup_record = backup_record_repo.create_backup_records(**record_data)
     return 200, "success", backup_record
コード例 #6
0
    def backup_group_apps(self, tenant, user, region, group_id, mode, note):
        s3_config = config_service.get_cloud_obj_storage_info()
        if mode == "full-online" and not s3_config:
            raise ErrObjectStorageInfoNotFound
        services = group_service.get_group_services(group_id)
        event_id = make_uuid()
        group_uuid = self.get_backup_group_uuid(group_id)
        total_memory, metadata = self.get_group_app_metadata(group_id, tenant)
        version = current_time_str("%Y%m%d%H%M%S")

        data = {
            "event_id": event_id,
            "group_id": group_uuid,
            "metadata": metadata,
            "service_ids": [s.service_id for s in services],
            "mode": mode,
            "version": version,
            "s3_config": s3_config,
        }
        # 向数据中心发起备份任务
        body = region_api.backup_group_apps(region, tenant.tenant_name, data)

        bean = body["bean"]
        record_data = {
            "group_id": group_id,
            "event_id": event_id,
            "group_uuid": group_uuid,
            "version": version,
            "team_id": tenant.tenant_id,
            "region": region,
            "status": bean["status"],
            "note": note,
            "mode": mode,
            "backup_id": bean.get("backup_id", ""),
            "source_dir": bean.get("source_dir", ""),
            "source_type": bean.get("source_type", ""),
            "backup_size": bean.get("backup_size", 0),
            "user": user.nick_name,
            "total_memory": total_memory,
        }
        return backup_record_repo.create_backup_records(**record_data)