예제 #1
0
    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 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
예제 #3
0
 def put(self, request, *args, **kwargs):
     result = {}
     config = QueryDict(request.body)
     logger.debug("plugin.relation", "in PluginServiceRelation put method params is {}".format(config))
     plugin_id = config.get("plugin_id", None)
     build_version = config.get("build_version", "newest")
     switch = config.get("switch", True)
     switch = plugin_svc.chargeSwtich(switch)
     if not plugin_id or not build_version:
         logger.error("plugin.relation", u'参数错误,plugin_id and version_id')
         data = {"success":False, "code":400, 'msg':u'参数错误'}
         result = oldResultSuitGeneralMessage(data, "params error", "")
         return JsonResponse(result, status=200)
     try:
         body_relation = {}
         body_relation["plugin_id"] = plugin_id
         body_relation["switch"] = switch
         versionList = plugin_svc.get_tenant_plugin_newest_versions(self.response_region, self.tenant, plugin_id)
         if versionList > 0:
             body_relation["version_id"] = versionList[0].build_version
             build_version = versionList[0].build_version
             logger.debug("plugin.relation", "body_relation is {0}, build_version is {1}".format(body_relation, build_version))
         else:
             result["success"] = False
             result["code"] = 404
             result["msg"] = u"未找到插件的最新版本"
             result = oldResultSuitGeneralMessage(result, "cant find newest plugin", "")
             return JsonResponse(result, status=200)
         res, resultBody = region_api.delPluginServiceRelation(
                 self.response_region, self.tenant.tenant_name, plugin_id, self.serviceAlias)
         if res.status == 200:
             pass
         else:
             result["success"] = False
             result["code"] = res.status
             result['msg'] = resultBody
             result = oldResultSuitGeneralMessage(result, "update plugin relation error", "")
             return JsonResponse(result, status=res.status)
         res, resultBody = region_api.pluginServiceRelation(
                 self.response_region, self.tenant.tenant_name, self.serviceAlias, body_relation)
         if res.status == 200:
             plugin_svc.update_service_plugin_relation(self.service.service_id, plugin_id, build_version, switch)
             pass
         else:
             result["success"] = False
             result["code"] = res.status
             result['msg'] = resultBody
             result = oldResultSuitGeneralMessage(result, "update plugin relation error", "")
             return JsonResponse(result, status=res.status)
         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["config_group"] = self.useDefaultAttr(plugin_id, build_version, "post")
             result["success"] = True
             result["code"] = 200
             result["msg"] = u"操作成功"
             result["bean"] = {"build_version": model_to_dict(versionList[0])}
             result = general_message(200, "success", u"操作成功", result["bean"], result["config_group"])
             return JsonResponse(result, status=200)
         else:
             result["success"] = False
             result["code"] = res.status
             result['msg'] = resultBody
             result = oldResultSuitGeneralMessage(result, "update plugin relation error",  "")
             return JsonResponse(result, status=200)
     except Exception, e:
         result["success"] = False
         result['code']=500
         result['msg']=u'更新插件关联失败'
         logger.error("plugin.relation", u'更新插件关联失败')
         logger.exception("plugin.relation", e)
         result = oldResultSuitGeneralMessage(result, "update plugin relation error", "")
         return JsonResponse(result, status=200)
예제 #4
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
        """
        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)