Beispiel #1
0
    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"])
Beispiel #2
0
    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"])
Beispiel #3
0
    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"])
Beispiel #4
0
    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"])
Beispiel #5
0
    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"])
Beispiel #6
0
    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"])
Beispiel #7
0
 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)
Beispiel #8
0
 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"])