def check_the_same_plugin(self, plugin_id, tenant_id, service_id): plugin_ids = [] categories = [] service_plugins = app_plugin_relation_repo.get_service_plugin_relation_by_service_id( service_id) if not service_plugins: """ component has not installed plugin""" return """ filter the same category plugin""" for i in service_plugins: plugin_ids.append(i.plugin_id) plugins = plugin_repo.get_plugin_by_plugin_ids(plugin_ids) for i in plugins: categories.append(i.category) # the trend to install plugin plugin_info = plugin_repo.get_plugin_by_plugin_id(tenant_id, plugin_id) category_info = plugin_info.category.split(":") if category_info[0] == "net-plugin": if plugin_info.category in categories: raise has_the_same_category_plugin if category_info[1] == "in-and-out" and ( "net-plugin:up" in categories or "net-plugin:down" in categories): raise has_the_same_category_plugin
def get_plugin_by_plugin_id(self, tenant, plugin): plugin = plugin_repo.get_plugin_by_plugin_id(tenant.tenant_id, plugin.plugin_id) if plugin: return 200, plugin else: return 404, None
def post(self, request, team_name, plugin_id, *args, **kwargs): """ 创建分享插件记录 --- parameter: - name: team_name 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: path """ team_id = self.team.tenant_id plugin = plugin_repo.get_plugin_by_plugin_id(team_id, plugin_id) if not plugin: return Response(general_message(404, 'plugin not exist', '插件不存在')) share_record = share_service.get_service_share_record_by_group_id( plugin_id) if share_record: if not share_record.is_success and share_record.step < 3: result = general_message(20021, "share not complete", "有分享流程未完成", bean=share_record.to_dict()) return Response(result, status=200) status, msg, msg_show = market_plugin_service.check_plugin_share_condition( self.team, plugin_id, self.response_region) if status != 200: return Response(general_message(status, msg, msg_show), status=status) record = { "group_share_id": make_uuid(), "group_id": plugin_id, "team_name": team_name, "is_success": False, "step": 1, } service_share_record = share_service.create_service_share_record( **record) result = general_message(200, "create success", "创建成功", bean=service_share_record.to_dict()) return Response(result, status=200)
def check_plugin_share_condition(self, tenant, plugin_id, region_name): plugin = plugin_repo.get_plugin_by_plugin_id(tenant.tenant_id, plugin_id) if not plugin: return 404, 'plugin not exist', '插件不存在' if plugin.origin in ['market', 'local_market']: return 400, 'plugin from market', '插件来源于市场,无法分享' build_info = plugin_svc.get_tenant_plugin_newest_versions(region_name, tenant, plugin_id) if not build_info: return 400, 'plugin not build', '插件未构建' if build_info[0].build_status != 'build_success': return 400, 'plugin not build success', '插件未构建成功,无法分享' return 200, 'plugin can share', ''
def check_the_same_plugin(self, plugin_id, tenant_id, service_id): print plugin_id, tenant_id, service_id plugin_list = [] categories = [] flag = False service_plugins = app_plugin_relation_repo.get_service_plugin_relation_by_service_id( service_id) plugin_info = plugin_repo.get_plugin_by_plugin_id(tenant_id, plugin_id) print service_plugins if len(service_plugins) != 0: for i in service_plugins: plugin_list.append(i.plugin_id) plugins = plugin_repo.get_plugin_by_plugin_ids(plugin_list) for i in plugins: categories.append(i.category) print plugin_info.category if plugin_info.category.split( ":")[0] == "net-plugin" and plugin_info.category in categories: flag = True if plugin_info.category == "net-plugin:in-and-out" and ( "net-plugin:up" in categories or "net-plugin:down" in categories): flag = True return flag
def create_plugin_share_info(self, share_record, share_info, user_id, tenant, region_name): tenant_id = tenant.tenant_id tenant_name = tenant.tenant_name sid = transaction.savepoint() try: PluginShareRecordEvent.objects.filter( record_id=share_record.ID).delete() RainbondCenterPlugin.objects.filter( record_id=share_record.ID).delete() plugin_info = share_info.get("share_plugin_info") if isinstance(plugin_info, unicode): plugin_info = json.loads(plugin_info) if plugin_info.get('scope') == 'goodrain': ent = enterprise_repo.get_enterprise_by_enterprise_id( tenant.enterprise_id) if ent and not ent.is_active: return 10407, "用户未跟云市认证", None plugin_id = plugin_info.get("plugin_id") plugin_version = plugin_svc.get_tenant_plugin_newest_versions( region_name, tenant, plugin_id) if not plugin_version or plugin_version[ 0].build_status != "build_success": return 400, "插件未构建", None plugin_version = plugin_version.first() tenant_plugin = plugin_repo.get_plugin_by_plugin_id( tenant_id, plugin_id) plugin_template = { "plugin_id": plugin_info.get("plugin_id"), "plugin_key": plugin_info.get("plugin_key"), "plugin_name": plugin_info.get("plugin_name"), "plugin_version": plugin_info.get("version"), "code_repo": tenant_plugin.code_repo, "build_source": tenant_plugin.build_source, "image": tenant_plugin.image, "category": tenant_plugin.category } if plugin_version.plugin_version_status != "fixed": plugin_version.plugin_version_status = "fixed" plugin_version.save() plugin_template["build_version"] = plugin_version.to_dict() plugin_info["plugin_image"] = app_store.get_image_connection_info( plugin_info["scope"], tenant_name) if not plugin_info["plugin_image"]: if sid: transaction.savepoint_rollback(sid) return 400, "获取镜像上传地址错误", None event = PluginShareRecordEvent( record_id=share_record.ID, team_name=tenant_name, team_id=tenant_id, plugin_id=plugin_info['plugin_id'], plugin_name=plugin_info['plugin_name'], event_status='not_start') event.save() RainbondCenterPlugin.objects.filter( version=plugin_info["version"], plugin_id=share_record.group_id).delete() plugin_info["source"] = "local" plugin_info["record_id"] = share_record.ID plugin_template['share_plugin_info'] = plugin_info plugin = RainbondCenterPlugin( plugin_key=plugin_info.get("plugin_key"), plugin_name=plugin_info.get("plugin_name"), plugin_id=plugin_info.get("plugin_id"), record_id=share_record.ID, version=plugin_info.get("version"), build_version=plugin_info.get('build_version'), pic=plugin_info.get("pic", ""), scope=plugin_info.get("scope"), source="local", share_user=user_id, share_team=tenant_name, desc=plugin_info.get("desc"), enterprise_id=tenant.enterprise_id, plugin_template=json.dumps(plugin_template), category=plugin_info.get('category')) plugin.save() share_record.step = 2 share_record.update_time = datetime.now() share_record.save() transaction.savepoint_commit(sid) return 200, "分享信息处理成功", plugin.to_dict() except Exception as e: logger.exception(e) if sid: transaction.savepoint_rollback(sid) return 500, "插件分享处理发生错误", None
def get_plugin_by_plugin_id(self, tenant, plugin_id): return plugin_repo.get_plugin_by_plugin_id(tenant.tenant_id, plugin_id)
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 """ team_id = self.team.tenant_id 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) share_plugin_info = dict() share_plugin = share_repo.get_share_plugin(share_record.group_id) if share_plugin: plugin_id = share_plugin.plugin_id share_plugin_info = share_plugin.to_dict() share_plugin_info["is_shared"] = True share_plugin_info.pop("update_time") else: plugin = plugin_repo.get_plugin_by_plugin_id( team_id, share_record.group_id) if not plugin: result = general_message(404, msg="plugin not exist", msg_show="插件不存在") return Response(result, status=400) plugin_id = plugin.plugin_id share_plugin_info["category"] = plugin.category share_plugin_info["plugin_key"] = make_uuid() share_plugin_info["plugin_id"] = plugin_id share_plugin_info["plugin_name"] = plugin.plugin_alias share_plugin_info["version"] = "1.0" share_plugin_info["desc"] = "This is a default description." share_plugin_info["scope"] = "team" share_plugin_info["share_id"] = share_record.group_id share_plugin_info["pic"] = "" share_plugin_info["share_user"] = str(self.user.user_id) share_plugin_info["share_team"] = team_name share_plugin_info["is_shared"] = False plugin_version = plugin_svc.get_tenant_plugin_newest_versions( self.response_region, self.tenant, plugin_id) share_plugin_info["build_version"] = plugin_version[ 0].build_version config_groups = [] for group in plugin_repo.get_plugin_config_groups( plugin_id, plugin_version[0].build_version): group_map = group.to_dict() items = plugin_svc.get_config_items_by_id_metadata_and_version( group.plugin_id, group.build_version, group.service_meta_type) config_items = [] for item in items: config_items.append(item.to_dict()) group_map['config_items'] = config_items config_groups.append(group_map) share_plugin_info["config_groups"] = config_groups return Response( general_message(200, "", "", bean={'share_plugin_info': share_plugin_info}), 200) except Exception as e: logger.exception(e) result = error_message(e.message) return Response(result, status=500)