def put(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: body description: 配置内容 required: true type: string paramType: body """ sid = None try: logger.debug("update service plugin config ") config = json.loads(request.body) logger.debug("====> {0}".format(config)) if not config: return Response(general_message(400, "params error", "参数配置不可为空"), status=400) pbv = plugin_version_service.get_newest_usable_plugin_version(plugin_id) if not pbv: return Response(general_message(400, "no usable plugin version", "无最新更新的版本信息,无法更新配置"), status=400) sid = transaction.savepoint() # 删除原有配置 app_plugin_service.delete_service_plugin_config(self.service, plugin_id) # 全量插入新配置 app_plugin_service.update_service_plugin_config(self.service, plugin_id, pbv.build_version, config) # 更新数据中心配置 region_config = app_plugin_service.get_region_config_from_db(self.service, plugin_id, pbv.build_version) region_api.update_service_plugin_config(self.response_region, self.tenant.tenant_name, self.service.service_alias, plugin_id, region_config) # 提交操作 transaction.savepoint_commit(sid) result = general_message(200, "success", "配置更新成功") except Exception as e: logger.exception(e) if sid: transaction.savepoint_rollback(sid) result = error_message(e.message) return Response(result, result["code"])
def put(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: body description: 配置内容 required: true type: string paramType: body """ config = json.loads(request.body) if not config: return Response(general_message(400, "params error", "参数配置不可为空"), status=400) pbv = plugin_version_service.get_newest_usable_plugin_version( self.tenant.tenant_id, plugin_id) if not pbv: return Response(general_message(400, "no usable plugin version", "无最新更新的版本信息,无法更新配置"), status=400) # update service plugin config app_plugin_service.update_service_plugin_config( self.tenant, self.service, plugin_id, pbv.build_version, config, self.response_region) result = general_message(200, "success", "配置更新成功") return Response(result, result["code"])
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 logger.debug("start install plugin ! plugin_id {0} build_version {1}".format(plugin_id, build_version)) # 1.生成console数据,存储 code, msg = app_plugin_service.save_default_plugin_config(self.tenant, self.service, plugin_id, build_version) if code != 200: return Response(general_message(code, "install plugin fail", msg), status=code) # 2.从console数据库取数据生成region数据 region_config = app_plugin_service.get_region_config_from_db(self.service, plugin_id, build_version) data = dict() data["plugin_id"] = plugin_id data["switch"] = True data["version_id"] = build_version data.update(region_config) code, msg, relation = app_plugin_service.create_service_plugin_relation(self.service.service_id, plugin_id, build_version, "", True) if code != 200: return Response(general_message(code, "install plugin fail", msg), status=code) region_api.install_service_plugin(self.response_region, self.tenant.tenant_name, self.service.service_alias, data) result = general_message(200, "success", "安装成功") except Exception as e: logger.exception(e) app_plugin_service.delete_service_plugin_config(self.service, plugin_id) app_plugin_service.delete_service_plugin_relation(self.service, plugin_id) if e.message.has_key("body"): if e.message["body"].has_key("msg"): if e.message["body"]["msg"] == "can not add this kind plugin, a same kind plugin has been linked": result = general_message(409, "install plugin fail", "网络类插件不能重复安装") else: result = general_message(500, e.message, "插件安装失败") return Response(result, status=result["code"])
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)