Ejemplo n.º 1
0
class APPPluginInstallView(AppBaseView):
    def useDefaultAttr(self, plugin_id, build_version, tag):
        metaTypeList = plugin_svc.get_service_meta_type(
            plugin_id, build_version)
        logger.debug("plugin.relation",
                     "metatype List is {}".format(len(metaTypeList)))
        attrsList = []
        for meta_info in metaTypeList:
            attr_list = plugin_svc.get_env_attr_by_service_meta_type(
                plugin_id=plugin_id,
                build_version=build_version,
                service_meta_type=meta_info.service_meta_type)
            logger.debug("plugin.relation",
                         "attr_list is {}".format(len(attr_list)))
            configList = []
            for attrItem in attr_list:
                config = {}
                config["attr_name"] = attrItem.attr_name
                config["attr_type"] = attrItem.attr_type
                config["attr_default_value"] = attrItem.attr_default_value
                # TODO: 可选参数 alternative
                config["attr_alt_value"] = attrItem.attr_alt_value
                config["is_change"] = attrItem.is_change
                config["attr_default_value"] = attrItem.attr_default_value
                config["attr_value"] = attrItem.attr_default_value
                config["attr_info"] = attrItem.attr_info
                configList.append(config)
            logger.debug("plugin.relation",
                         "configList is {}".format(configList))
            pieceList = plugin_svc.getMetaBaseInfo(self.tenant.tenant_id,
                                                   self.service.service_id,
                                                   self.service.service_alias,
                                                   plugin_id, build_version,
                                                   meta_info, configList, tag)
            logger.debug("plugin.relation",
                         "pieceList is {}".format(pieceList))
            attrsList.extend(pieceList)
        logger.debug("plugin.relation", "attrsList is {}".format(attrsList))
        return attrsList

    @perm_required('manage_service_plugin')
    def post(self, request, plugin_id, *args, **kwargs):
        """
        应用安装插件
        ---
        parameters:
            - name: tenantName
              description: 租户名
              required: true
              type: string
              paramType: path
            - name: serviceAlias
              description: 服务别名
              required: true
              type: string
              paramType: path
            - name: plugin_id
              description: 插件ID
              required: true
              type: string
              paramType: path
            - name: build_version
              description: 插件版本
              required: true
              type: string
              paramType: form
        """
        result = {}
        build_version = request.data.get("build_version", None)

        try:
            if not plugin_id:
                return Response(general_message(400, "params error", "参数错误"),
                                status=400)
            if not build_version:
                plugin_version = plugin_version_service.get_newest_usable_plugin_version(
                    plugin_id)
                build_version = plugin_version.build_version

            # 1. 建立关联关系
            # 2. 生成默认的配置发送给前端
            # 3. 生成默认配置存储至console数据库
            # 4. 生成默认配置发送给region
            # >> 进行关联
            body_relation = {}
            body_relation["plugin_id"] = plugin_id
            body_relation["switch"] = True
            body_relation["version_id"] = build_version
            # 1)发送关联请求
            try:
                res, resultBody = region_api.pluginServiceRelation(
                    self.service.service_region, self.tenant.tenant_name,
                    self.service.service_alias, body_relation)
                if res.status == 200:
                    plugin_svc.add_service_plugin_relation(
                        service_id=self.service.service_id,
                        plugin_id=plugin_id,
                        build_version=build_version)
            except region_api.CallApiError as e:
                if e.status == 400:
                    result = general_message(400, "plugin already related",
                                             u"该类型插件已关联,请先卸载同类插件")
                    return Response(result, status=400)
                else:
                    result = general_message(int(e.status),
                                             "region install error", "安装插件失败")
                    return Response(result, status=result["code"])
            # 2)发送配置请求
            result["config_group"] = self.useDefaultAttr(
                plugin_id, build_version, "post")
            complex, normal = plugin_svc.createAttrsJsonForRegion(
                self.service.service_id, self.service.service_alias, plugin_id)
            config_envs = {}
            config_envs["normal_envs"] = normal
            config_envs["complex_envs"] = complex
            body = {}
            body["tenant_id"] = self.tenant.tenant_id
            body["service_id"] = self.service.service_id
            body["config_envs"] = config_envs
            res, resultBody = region_api.postPluginAttr(
                self.service.service_region, self.tenant.tenant_name,
                self.service.service_alias, plugin_id, body)
            if res.status == 200:
                result = general_message(200,
                                         "success",
                                         "操作成功",
                                         bean=result["config_group"])
                return Response(result, result["code"])
            else:
                result = general_message(int(res.status),
                                         "add plugin attr error", "操作失败")
                return Response(result, status=200)
        except HasNoDownStreamService as e:
            try:
                plugin_svc.del_service_plugin_relation_and_attrs(
                    self.service.service_id, plugin_id)
                region_api.delPluginServiceRelation(
                    self.service.service_region, self.tenant.tenant_name,
                    plugin_id, self.service.service_alias)
            except Exception, e:
                pass
            result = general_message(400, "havs no downstream services",
                                     u'缺少关联应用,不能使用该类型插件')
            logger.exception(e)
            return Response(result, status=400)
        except Exception, e:
            try:
                plugin_svc.del_service_plugin_relation_and_attrs(
                    self.service.service_id, plugin_id)
                region_api.delPluginServiceRelation(
                    self.service.service_region, self.tenant.tenant_name,
                    plugin_id, self.service.service_alias)
            except Exception, e:
                logger.exception(e)
                pass
Ejemplo n.º 2
0
 def post(self, request, *args, **kwargs):
     """安装插件"""
     result = {}
     plugin_id = request.POST.get("plugin_id", None)
     build_version = request.POST.get("build_version", None)
     if not plugin_id or not build_version:
         logger.error("plugin.relation", u'参数错误,plugin_id and version_id')
         data = {"success": False, "code": 405, 'msg': u'参数错误'}
         result = oldResultSuitGeneralMessage(data, "params error", "")
         return JsonResponse(result, status=200)
     logger.debug(
         "plugin.relation", "plugin_id is {0}, build_version is {1}".format(
             plugin_id, build_version))
     try:
         #1. 建立关联关系
         #2. 生成默认的配置发送给前端
         #3. 生成默认配置存储至console数据库
         #4. 生成默认配置发送给region
         # >> 进行关联
         body_relation = {}
         body_relation["plugin_id"] = plugin_id
         body_relation["switch"] = True
         body_relation["version_id"] = build_version
         # 1)发送关联请求
         try:
             res, resultBody = region_api.pluginServiceRelation(
                 self.response_region, self.tenant.tenant_name,
                 self.serviceAlias, body_relation)
             if res.status == 200:
                 plugin_svc.add_service_plugin_relation(
                     service_id=self.service.service_id,
                     plugin_id=plugin_id,
                     build_version=build_version)
             pass
         except region_api.CallApiError as e:
             if e.status == 400:
                 result["success"] = False
                 result["code"] = 400
                 result["msg"] = u"该类型插件已关联,请先卸载同类插件"
                 result = oldResultSuitGeneralMessage(
                     result, "relation already exist", "")
                 return JsonResponse(result, status=200)
             else:
                 result["success"] = False
                 result["code"] = e.status
                 result['msg'] = u"安装插件失败"
                 result = oldResultSuitGeneralMessage(
                     result, "add relation error", "")
                 return JsonResponse(result, status=200)
         # 2)发送配置请求
         result["config_group"] = self.useDefaultAttr(
             plugin_id, build_version, "post")
         complex, normal = plugin_svc.createAttrsJsonForRegion(
             self.service.service_id, self.serviceAlias, plugin_id)
         config_envs = {}
         config_envs["normal_envs"] = normal
         config_envs["complex_envs"] = complex
         body = {}
         body["tenant_id"] = self.tenant.tenant_id
         body["service_id"] = self.service.service_id
         body["config_envs"] = config_envs
         res, resultBody = region_api.postPluginAttr(
             self.response_region, self.tenant.tenant_name,
             self.serviceAlias, plugin_id, body)
         if res.status == 200:
             result["success"] = True
             result["code"] = 200
             result["msg"] = u"操作成功"
             result = oldResultSuitGeneralMessage(result, "success",
                                                  result["config_group"])
             return JsonResponse(result, status=200)
         else:
             result["success"] = False
             result["code"] = res.status
             result['msg'] = resultBody
             result = oldResultSuitGeneralMessage(result,
                                                  "add plugin attr error",
                                                  "")
             return JsonResponse(result, status=200)
     except HasNoDownStreamService as e:
         try:
             plugin_svc.del_service_plugin_relation_and_attrs(
                 self.service.service_id, plugin_id)
             region_api.delPluginServiceRelation(self.response_region,
                                                 self.tenant.tenant_name,
                                                 plugin_id,
                                                 self.serviceAlias)
         except Exception, e:
             pass
         result["success"] = False
         result['code'] = 400
         result['msg'] = u'缺少依赖应用,不能使用该类型插件'
         result = oldResultSuitGeneralMessage(
             result, "havs no downstream services", "")
         logger.error("plugin.relation", u'缺少关联应用,不能使用该类型插件')
         logger.exception("plugin.relation", e)
         return JsonResponse(result, status=200)
Ejemplo n.º 3
0
    def post(self, request, plugin_id, *args, **kwargs):
        """
        应用安装插件
        ---
        parameters:
            - name: tenantName
              description: 租户名
              required: true
              type: string
              paramType: path
            - name: serviceAlias
              description: 服务别名
              required: true
              type: string
              paramType: path
            - name: plugin_id
              description: 插件ID
              required: true
              type: string
              paramType: path
            - name: build_version
              description: 插件版本
              required: true
              type: string
              paramType: form
        """
        result = {}
        build_version = request.data.get("build_version", None)

        try:
            if not plugin_id:
                return Response(general_message(400, "params error", "参数错误"),
                                status=400)
            if not build_version:
                plugin_version = plugin_version_service.get_newest_usable_plugin_version(
                    plugin_id)
                build_version = plugin_version.build_version

            # 1. 建立关联关系
            # 2. 生成默认的配置发送给前端
            # 3. 生成默认配置存储至console数据库
            # 4. 生成默认配置发送给region
            # >> 进行关联
            body_relation = {}
            body_relation["plugin_id"] = plugin_id
            body_relation["switch"] = True
            body_relation["version_id"] = build_version
            # 1)发送关联请求
            try:
                res, resultBody = region_api.pluginServiceRelation(
                    self.service.service_region, self.tenant.tenant_name,
                    self.service.service_alias, body_relation)
                if res.status == 200:
                    plugin_svc.add_service_plugin_relation(
                        service_id=self.service.service_id,
                        plugin_id=plugin_id,
                        build_version=build_version)
            except region_api.CallApiError as e:
                if e.status == 400:
                    result = general_message(400, "plugin already related",
                                             u"该类型插件已关联,请先卸载同类插件")
                    return Response(result, status=400)
                else:
                    result = general_message(int(e.status),
                                             "region install error", "安装插件失败")
                    return Response(result, status=result["code"])
            # 2)发送配置请求
            result["config_group"] = self.useDefaultAttr(
                plugin_id, build_version, "post")
            complex, normal = plugin_svc.createAttrsJsonForRegion(
                self.service.service_id, self.service.service_alias, plugin_id)
            config_envs = {}
            config_envs["normal_envs"] = normal
            config_envs["complex_envs"] = complex
            body = {}
            body["tenant_id"] = self.tenant.tenant_id
            body["service_id"] = self.service.service_id
            body["config_envs"] = config_envs
            res, resultBody = region_api.postPluginAttr(
                self.service.service_region, self.tenant.tenant_name,
                self.service.service_alias, plugin_id, body)
            if res.status == 200:
                result = general_message(200,
                                         "success",
                                         "操作成功",
                                         bean=result["config_group"])
                return Response(result, result["code"])
            else:
                result = general_message(int(res.status),
                                         "add plugin attr error", "操作失败")
                return Response(result, status=200)
        except HasNoDownStreamService as e:
            try:
                plugin_svc.del_service_plugin_relation_and_attrs(
                    self.service.service_id, plugin_id)
                region_api.delPluginServiceRelation(
                    self.service.service_region, self.tenant.tenant_name,
                    plugin_id, self.service.service_alias)
            except Exception, e:
                pass
            result = general_message(400, "havs no downstream services",
                                     u'缺少关联应用,不能使用该类型插件')
            logger.exception(e)
            return Response(result, status=400)
Ejemplo n.º 4
0
class PluginServiceRelation(LeftSideBarMixin, AuthedView):
    def useDefaultAttr(self, plugin_id, build_version, tag):
        metaTypeList = plugin_svc.get_service_meta_type(
            plugin_id, build_version)
        logger.debug("plugin.relation",
                     "metatype List is {}".format(len(metaTypeList)))
        attrsList = []
        for meta_info in metaTypeList:
            attr_list = plugin_svc.get_env_attr_by_service_meta_type(
                plugin_id=plugin_id,
                build_version=build_version,
                service_meta_type=meta_info.service_meta_type)
            logger.debug("plugin.relation",
                         "attr_list is {}".format(len(attr_list)))
            configList = []
            for attrItem in attr_list:
                config = {}
                config["attr_name"] = attrItem.attr_name
                config["attr_type"] = attrItem.attr_type
                config["attr_default_value"] = attrItem.attr_default_value
                #TODO: 可选参数 alternative
                config["attr_alt_value"] = attrItem.attr_alt_value
                config["is_change"] = attrItem.is_change
                config["attr_default_value"] = attrItem.attr_default_value
                config["attr_value"] = attrItem.attr_default_value
                config["attr_info"] = attrItem.attr_info
                configList.append(config)
            logger.debug("plugin.relation",
                         "configList is {}".format(configList))
            pieceList = plugin_svc.getMetaBaseInfo(self.tenant.tenant_id,
                                                   self.service.service_id,
                                                   self.serviceAlias,
                                                   plugin_id, build_version,
                                                   meta_info, configList, tag)
            logger.debug("plugin.relation",
                         "pieceList is {}".format(pieceList))
            attrsList.extend(pieceList)
        logger.debug("plugin.relation", "attrsList is {}".format(attrsList))
        return attrsList

    @never_cache
    @perm_required('tenant.tenant_access')
    def post(self, request, *args, **kwargs):
        """安装插件"""
        result = {}
        plugin_id = request.POST.get("plugin_id", None)
        build_version = request.POST.get("build_version", None)
        if not plugin_id or not build_version:
            logger.error("plugin.relation", u'参数错误,plugin_id and version_id')
            data = {"success": False, "code": 405, 'msg': u'参数错误'}
            result = oldResultSuitGeneralMessage(data, "params error", "")
            return JsonResponse(result, status=200)
        logger.debug(
            "plugin.relation", "plugin_id is {0}, build_version is {1}".format(
                plugin_id, build_version))
        try:
            #1. 建立关联关系
            #2. 生成默认的配置发送给前端
            #3. 生成默认配置存储至console数据库
            #4. 生成默认配置发送给region
            # >> 进行关联
            body_relation = {}
            body_relation["plugin_id"] = plugin_id
            body_relation["switch"] = True
            body_relation["version_id"] = build_version
            # 1)发送关联请求
            try:
                res, resultBody = region_api.pluginServiceRelation(
                    self.response_region, self.tenant.tenant_name,
                    self.serviceAlias, body_relation)
                if res.status == 200:
                    plugin_svc.add_service_plugin_relation(
                        service_id=self.service.service_id,
                        plugin_id=plugin_id,
                        build_version=build_version)
                pass
            except region_api.CallApiError as e:
                if e.status == 400:
                    result["success"] = False
                    result["code"] = 400
                    result["msg"] = u"该类型插件已关联,请先卸载同类插件"
                    result = oldResultSuitGeneralMessage(
                        result, "relation already exist", "")
                    return JsonResponse(result, status=200)
                else:
                    result["success"] = False
                    result["code"] = e.status
                    result['msg'] = u"安装插件失败"
                    result = oldResultSuitGeneralMessage(
                        result, "add relation error", "")
                    return JsonResponse(result, status=200)
            # 2)发送配置请求
            result["config_group"] = self.useDefaultAttr(
                plugin_id, build_version, "post")
            complex, normal = plugin_svc.createAttrsJsonForRegion(
                self.service.service_id, self.serviceAlias, plugin_id)
            config_envs = {}
            config_envs["normal_envs"] = normal
            config_envs["complex_envs"] = complex
            body = {}
            body["tenant_id"] = self.tenant.tenant_id
            body["service_id"] = self.service.service_id
            body["config_envs"] = config_envs
            res, resultBody = region_api.postPluginAttr(
                self.response_region, self.tenant.tenant_name,
                self.serviceAlias, plugin_id, body)
            if res.status == 200:
                result["success"] = True
                result["code"] = 200
                result["msg"] = u"操作成功"
                result = oldResultSuitGeneralMessage(result, "success",
                                                     result["config_group"])
                return JsonResponse(result, status=200)
            else:
                result["success"] = False
                result["code"] = res.status
                result['msg'] = resultBody
                result = oldResultSuitGeneralMessage(result,
                                                     "add plugin attr error",
                                                     "")
                return JsonResponse(result, status=200)
        except HasNoDownStreamService as e:
            try:
                plugin_svc.del_service_plugin_relation_and_attrs(
                    self.service.service_id, plugin_id)
                region_api.delPluginServiceRelation(self.response_region,
                                                    self.tenant.tenant_name,
                                                    plugin_id,
                                                    self.serviceAlias)
            except Exception, e:
                pass
            result["success"] = False
            result['code'] = 400
            result['msg'] = u'缺少依赖应用,不能使用该类型插件'
            result = oldResultSuitGeneralMessage(
                result, "havs no downstream services", "")
            logger.error("plugin.relation", u'缺少关联应用,不能使用该类型插件')
            logger.exception("plugin.relation", e)
            return JsonResponse(result, status=200)
        except Exception, e:
            try:
                plugin_svc.del_service_plugin_relation_and_attrs(
                    self.service.service_id, plugin_id)
                region_api.delPluginServiceRelation(self.response_region,
                                                    self.tenant.tenant_name,
                                                    plugin_id,
                                                    self.serviceAlias)
            except Exception, e:
                pass