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
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="有状态组件必须停止方可进行备份")
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
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
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
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)