def post(self, request, *args, **kwargs): """ 创建应用市场应用 --- parameters: - name: tenantName description: 团队名称 required: true type: string paramType: path - name: group_id description: 组id required: true type: string paramType: form - name: app_id description: rainbond app id required: true type: string paramType: form """ try: group_id = request.data.get("group_id", -1) app_id = request.data.get("app_id", None) if not app_id: return Response(general_message(400, "app id is null", "请指明需要安装的应用"), status=400) if int(group_id) != -1: code, msg, group_info = group_service.get_group_by_id( self.tenant, self.response_region, group_id) if code != 200: return Response(general_message(400, "group not exist", "所选组不存在"), status=400) code, app = market_app_service.get_rain_bond_app_by_pk(app_id) if not app: return Response(general_message(404, "not found", "云市应用不存在"), status=404) allow_create, tips, total_memory = market_app_service.check_package_app_resource( self.tenant, app) if not allow_create: return Response(general_message( 412, "over resource", "应用所需内存大小为{0},{1}".format(total_memory, tips)), status=412) market_app_service.install_service(self.tenant, self.response_region, self.user, group_id, app) logger.debug("market app create success") result = general_message(200, "success", "创建成功") except Exception as e: logger.exception(e) result = error_message(e.message) return Response(result, status=result["code"])
def post(self, request, *args, **kwargs): """ 创建应用市场应用 --- parameters: - name: tenantName description: 团队名称 required: true type: string paramType: path - name: group_id description: 组id required: true type: string paramType: form - name: app_id description: rainbond app id required: true type: string paramType: form """ try: group_id = request.data.get("group_id", -1) group_key = request.data.get("group_key", None) group_version = request.data.get("group_version", None) is_deploy = request.data.get("is_deploy", True) if not group_key or not group_version: return Response(general_message(400, "app id is null", "请指明需要安装的应用"), status=400) if int(group_id) != -1: code, _, _ = group_service.get_group_by_id(self.tenant, self.response_region, group_id) if code != 200: return Response(general_message(400, "group not exist", "所选组不存在"), status=400) code, app = market_app_service.get_rain_bond_app_by_key_and_version(group_key, group_version) if not app: return Response(general_message(404, "not found", "云市应用不存在"), status=404) market_app_service.check_package_app_resource(self.tenant, self.response_region, app) market_app_service.install_service(self.tenant, self.response_region, self.user, group_id, app, is_deploy) RainbondCenterApp.objects.filter(group_key=group_key, version=group_version).update( install_number=F("install_number") + 1 ) logger.debug("market app create success") result = general_message(200, "success", "创建成功") except ResourceNotEnoughException as re: logger.exception(re) return Response(general_message(10406, "resource is not enough", re.message), status=412) except AccountOverdueException as re: logger.exception(re) return Response(general_message(10406, "resource is not enough", re.message), status=412) except Exception as e: logger.exception(e) result = error_message(e.message) return Response(result, status=result["code"])
def put(self, request, *args, **kwargs): """ 修改组件所在组 --- parameters: - name: tenantName description: 租户名 required: true type: string paramType: path - name: serviceAlias description: 组件别名 required: true type: string paramType: path - name: group_id description: 组ID required: true type: integer paramType: form """ # target app id group_id = request.data.get("group_id", None) if group_id is None: return Response(general_message(400, "param error", "请指定修改的组"), status=400) group_id = int(group_id) if group_id == -1: group_service.delete_service_group_relation_by_service_id( self.service.service_id) else: # check target app exists or not group_service.get_group_by_id(self.tenant, self.service.service_region, group_id) # update service relation group_service.update_or_create_service_group_relation( self.tenant, self.service, group_id) result = general_message(200, "success", "修改成功") return Response(result, status=result["code"])
def put(self, request, *args, **kwargs): """ 修改组件所在组 --- parameters: - name: tenantName description: 租户名 required: true type: string paramType: path - name: serviceAlias description: 组件别名 required: true type: string paramType: path - name: group_id description: 组ID required: true type: integer paramType: form """ try: group_id = request.data.get("group_id", None) if group_id is None: return Response(general_message(400, "param error", "请指定修改的组"), status=400) group_id = int(group_id) if group_id == -1: group_service.delete_service_group_relation_by_service_id( self.service.service_id) else: code, msg, group = group_service.get_group_by_id( self.tenant, self.service.service_region, group_id) if code != 200: return Response( general_message(code, "group not found", "未找到需要修改的组信息")) group_service.update_or_create_service_group_relation( self.tenant, self.service, group_id) result = general_message(200, "success", "修改成功") except Exception as e: logger.exception(e) result = error_message(e.message) return Response(result, status=result["code"])
def get(self, request, *args, **kwargs): """ 查询组信息 --- parameters: - name: tenantName description: 租户名 required: true type: string paramType: path - name: group_id description: 组id required: true type: string paramType: path """ try: group_id = int(kwargs.get("group_id", None)) code, msg, data = group_service.get_group_by_id( self.tenant, self.response_region, int(group_id)) data["create_status"] = "complete" data["compose_id"] = None if group_id != -1: compose_group = compose_service.get_group_compose_by_group_id( group_id) if compose_group: data["create_status"] = compose_group.create_status data["compose_id"] = compose_group.compose_id if code != 200: result = general_message(code, "group query error", msg) else: result = general_message(code, "success", msg, bean=data) except Exception as e: logger.exception(e) result = error_message(e.message) return Response(result, status=result["code"])
def post(self, request, *args, **kwargs): """ 创建应用市场应用 --- parameters: - name: tenantName description: 团队名称 required: true type: string paramType: path - name: group_id description: 组id required: true type: string paramType: form - name: app_id description: rainbond app id required: true type: string paramType: form - name: install_from_cloud description: install app from cloud required: false type: bool paramType: form """ try: group_id = request.data.get("group_id", -1) app_id = request.data.get("app_id", None) app_version = request.data.get("app_version", None) is_deploy = request.data.get("is_deploy", True) install_from_cloud = request.data.get("install_from_cloud", False) if not app_id or not app_version: return Response(general_message(400, "app id is null", "请指明需要安装的应用"), status=400) if int(group_id) != -1: group_service.get_group_by_id(self.tenant, self.response_region, group_id) app = None app_version_info = None if install_from_cloud: app, app_version_info = market_app_service.get_app_from_cloud(self.tenant, app_id, app_version, True) if not app: return Response(general_message(404, "not found", "云端应用不存在"), status=404) else: app, app_version_info = market_app_service.get_rainbond_app_and_version(self.user.enterprise_id, app_id, app_version) if not app: return Response(general_message(404, "not found", "云市应用不存在"), status=404) market_app_service.install_service(self.tenant, self.response_region, self.user, group_id, app, app_version_info, is_deploy, install_from_cloud) if not install_from_cloud: market_app_service.update_rainbond_app_install_num(self.user.enterprise_id, app_id, app_version) logger.debug("market app create success") result = general_message(200, "success", "创建成功") except ResourceNotEnoughException as re: raise re except AccountOverdueException as re: logger.exception(re) return Response(general_message(10406, "resource is not enough", re.message), status=412) except ServiceHandleException as e: raise e except Exception as e: logger.exception(e) result = error_message(e.message) return Response(result, status=result["code"])
def get(self, request, team_name, share_id, *args, **kwargs): """ 查询分享的所有应用信息和插件信息 --- parameter: - name: team_name description: 团队名 required: true type: string paramType: path - name: share_id description: 分享订单ID required: true type: string paramType: path """ try: share_record = share_service.get_service_share_record_by_ID( ID=share_id, team_name=team_name) if not share_record: result = general_message(404, "share record not found", "分享流程不存在,请退出重试") return Response(result, status=404) if share_record.is_success or share_record.step >= 3: result = general_message(400, "share record is complete", "分享流程已经完成,请重新进行分享") return Response(result, status=400) # 获取分享应用组基本信息 data = dict() share_group_info = dict() share_group = share_service.check_whether_have_share_history( group_id=share_record.group_id) if share_group: share_group_info["group_key"] = share_group.group_key share_group_info["group_name"] = share_group.group_name share_group_info["version"] = share_group.version share_group_info["describe"] = share_group.describe share_group_info["scope"] = share_group.scope share_group_info["share_id"] = share_group.ID share_group_info["pic"] = share_group.pic share_group_info["share_team"] = share_group.share_team share_group_info["share_user"] = share_group.share_user share_group_info["is_shared"] = True data["share_group_info"] = share_group_info else: try: user = user_services.get_user_by_user_name( user_name=request.user) if not user: result = general_message(400, "user failed", "数据紊乱,非当前用户操作页面") return Response(result, status=400) except UserNotExistError as e: result = general_message(400, e.message, "用户不存在") return Response(result, status=400) code, msg, group = group_service.get_group_by_id( tenant=self.team, region=self.response_region, group_id=share_record.group_id) if code == 200: share_group_info["group_key"] = make_uuid() share_group_info["group_name"] = group.get("group_name") share_group_info["version"] = 'v1.0' share_group_info[ "describe"] = 'This is a default description.' share_group_info["scope"] = 'team' share_group_info["share_id"] = share_record.group_id share_group_info["pic"] = '' share_group_info["share_team"] = team_name share_group_info["share_user"] = str(user.user_id) share_group_info["is_shared"] = False data["share_group_info"] = share_group_info else: result = general_message(code=code, msg="failed", msg_show=msg) return Response(result, status=code) service_info_list = share_service.query_share_service_info( team=self.team, group_id=share_record.group_id) data["share_service_list"] = service_info_list plugins = share_service.get_group_services_used_plugins( group_id=share_record.group_id) data["share_plugin_list"] = plugins result = general_message(200, "query success", "获取成功", bean=data) return Response(result, status=200) except ServiceHandleException as e: raise e except Exception as e: logger.exception(e) result = error_message(e.message) return Response(result, status=500)
def post(self, request, *args, **kwargs): """ 创建应用市场应用 --- parameters: - name: tenantName description: 团队名称 required: true type: string paramType: path - name: group_id description: 组id required: true type: string paramType: form - name: app_id description: rainbond app id required: true type: string paramType: form - name: install_from_cloud description: install app from cloud required: false type: bool paramType: form """ try: group_id = request.data.get("group_id", -1) app_id = request.data.get("app_id", None) app_version = request.data.get("app_version", None) is_deploy = request.data.get("is_deploy", True) install_from_cloud = request.data.get("install_from_cloud", False) market_name = request.data.get("market_name", None) if not app_id or not app_version: return Response(general_message(400, "app id is null", "请指明需要安装的应用"), status=400) if int(group_id) != -1: group_service.get_group_by_id(self.tenant, self.response_region, group_id) app = None app_version_info = None if install_from_cloud: dt, market = app_market_service.get_app_market(self.tenant.enterprise_id, market_name, raise_exception=True) app, app_version_info = app_market_service.cloud_app_model_to_db_model( market, app_id, app_version, for_install=True) if not app: return Response(general_message(404, "not found", "云端应用不存在"), status=404) else: app, app_version_info = market_app_service.get_rainbond_app_and_version(self.user.enterprise_id, app_id, app_version) if not app: return Response(general_message(404, "not found", "云市应用不存在"), status=404) if app_version_info and app_version_info.region_name and app_version_info.region_name != self.region_name: raise ServiceHandleException( msg="app version can not install to this region", msg_show="该应用版本属于{}集群,无法跨集群安装,若需要跨集群,请在企业设置中配置跨集群访问的镜像仓库后重新发布。".format(app_version_info.region_name)) if not app_version_info: return Response(general_message(404, "not found", "应用版本不存在,不能进行安装"), status=404) market_app_service.install_service( self.tenant, self.response_region, self.user, group_id, app, app_version_info, is_deploy, install_from_cloud, market_name=market_name) if not install_from_cloud: market_app_service.update_rainbond_app_install_num(self.user.enterprise_id, app_id, app_version) logger.debug("market app create success") result = general_message(200, "success", "创建成功") except ServiceHandleException as e: raise e except ResourceNotEnoughException as re: raise re except AccountOverdueException as re: logger.exception(re) return Response(general_message(10406, "resource is not enough", re.message), status=412) return Response(result, status=result["code"])