Beispiel #1
0
    def get(self, request, enterprise_id, *args, **kwargs):
        """
        获取应用导出状态
        ---
        parameters:
            - name: tenantName
              description: 团队名称
              required: true
              type: string
              paramType: path
        """
        app_id = request.GET.get("app_id", None)
        app_version = request.GET.get("app_version", None)
        if not app_id or not app_version:
            return Response(general_message(400, "app id is null",
                                            "请指明需要查询的应用"),
                            status=400)

        result_list = []
        app_version_list = app_version.split("#")
        for version in app_version_list:
            app, app_version = market_app_service.get_rainbond_app_and_version(
                self.user.enterprise_id, app_id, version)
            if not app or not app_version:
                return Response(general_message(404, "not found", "云市应用不存在"),
                                status=404)
            result = export_service.get_export_status(enterprise_id, app,
                                                      app_version)
            result_list.append(result)

        result = general_message(200, "success", "查询成功", list=result_list)
        return Response(result, status=result["code"])
Beispiel #2
0
    def post(self, request, enterprise_id, *args, **kwargs):
        """
        应用上下线
        ---
        parameters:
            - name: app_id
              description: rainbond app id
              required: true
              type: string
              paramType: form
            - name: action
              description: 操作类型 online|offline
              required: true
              type: string
              paramType: form
        """
        try:
            if not self.user.is_sys_admin:
                if not user_services.is_user_admin_in_current_enterprise(self.user, self.tenant.enterprise_id):
                    return Response(general_message(403, "current user is not enterprise admin", "非企业管理员无法进行此操作"), status=403)
            app_id = request.data.get("app_id", None)
            app_version_list = request.data.get("app_versions", [])
            action = request.data.get("action", None)
            if not app_id:
                return Response(general_message(400, "group_key is null", "请指明需要安装应用的app_id"), status=400)
            if not app_version_list:
                return Response(general_message(400, "group_version_list is null", "请指明需要安装应用的版本"), status=400)
            if not action:
                return Response(general_message(400, "action is not specified", "操作类型未指定"), status=400)
            if action not in ("online", "offline"):
                return Response(general_message(400, "action is not allow", "不允许的操作类型"), status=400)
            for app_version in app_version_list:
                app, version = market_app_service.get_rainbond_app_and_version(self.user.enterprise_id, app_id, app_version)
                if not version:
                    return Response(general_message(404, "not found", "云市应用不存在"), status=404)

                if action == "online":
                    version.is_complete = True
                else:
                    version.is_complete = False
                app.update_time = datetime.datetime.now()
                app.save()
                version.update_time = datetime.datetime.now()
                version.save()
            result = general_message(200, "success", "操作成功")
        except Exception as e:
            logger.exception(e)
            result = error_message(e.message)
        return Response(result, status=result["code"])
Beispiel #3
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 #4
0
    def get_build_info(self, tenant, service):
        service_source = service_source_repo.get_service_source(
            team_id=service.tenant_id, service_id=service.service_id)

        code_from = service.code_from
        oauth_type = support_oauth_type.keys()
        if code_from in oauth_type:
            result_url = re_split("[:,@]", service.git_url)
            service.git_url = result_url[0] + '//' + result_url[-1]
        bean = {
            "user_name": "",
            "password": "",
            "service_source": service.service_source,
            "image": service.image,
            "cmd": service.cmd,
            "code_from": service.code_from,
            "version": service.version,
            "docker_cmd": service.docker_cmd,
            "create_time": service.create_time,
            "git_url": service.git_url,
            "code_version": service.code_version,
            "server_type": service.server_type,
            "language": service.language,
            "oauth_service_id": service.oauth_service_id,
            "full_name": service.git_full_name
        }
        if service_source:
            bean["user"] = service_source.user_name
            bean["password"] = service_source.password
        if service.service_source == 'market':
            from console.services.market_app_service import market_app_service
            if service_source:
                # get from cloud
                app = None
                app_version = None
                if service_source.extend_info:
                    extend_info = json.loads(service_source.extend_info)
                    if extend_info and extend_info.get("install_from_cloud",
                                                       False):
                        app, app_version = market_app_service.get_app_from_cloud(
                            tenant, service_source.group_key,
                            service_source.version)
                        bean["install_from_cloud"] = True
                        bean["app_detail_url"] = app.describe
                if not app:
                    try:
                        app, app_version = market_app_service.get_rainbond_app_and_version(
                            tenant.enterprise_id, service_source.group_key,
                            service_source.version)
                    except RbdAppNotFound:
                        logger.warning(
                            "not found app {0} version {1} in local market".
                            format(service_source.group_key,
                                   service_source.version))
                if app and app_version:
                    bean["rain_app_name"] = app.app_name
                    bean["details"] = app.details
                    logger.debug("app_version: {}".format(app_version.version))
                    bean["app_version"] = app_version.version
                    bean["version"] = app_version.version
                    bean["group_key"] = app.app_id
        return bean
Beispiel #5
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"])