コード例 #1
0
    def post(self, request, plugin_id, *args, **kwargs):
        new_version = None
        result = {}
        try:
            build_version = request.POST.get("build_version", None)
            logger.debug(
                "=====>>>>> build_version is {}".format(build_version))
            newest_build_version = plugin_svc.get_tenant_plugin_version_by_plugin_id_and_version(
                self.tenant, plugin_id, build_version)
            if newest_build_version.build_status == "building":
                result = general_message(403, "success", "构建中,请稍后再试")
                return JsonResponse(data=result, status=403)
            event_id = make_uuid()
            if newest_build_version.build_status != "unbuild":
                # 拷贝原有配置项
                plugin_id, new_version = plugin_svc.copy_config_to_new_version(
                    self.tenant, plugin_id, newest_build_version.build_version)
                pbv = plugin_svc.get_tenant_plugin_version_by_plugin_id_and_version(
                    self.tenant, plugin_id, new_version)
                pbv.event_id = event_id
                pbv.save()
                try:
                    plugin_svc.build_plugin(self.response_region, self.tenant,
                                            event_id, plugin_id, new_version)
                except CallApiError as e:
                    logger.exception(e)
                    if e.status == 404:
                        newest_build_version.build_status = "unbuild"
                        newest_build_version.save()
                    else:
                        newest_build_version.build_status = "build_fail"
                        newest_build_version.save()
                    raise Exception("invoke region build error")
                rt_pbv = pbv.to_dict()
            else:
                try:
                    plugin_svc.build_plugin(self.response_region, self.tenant,
                                            event_id, plugin_id,
                                            newest_build_version.build_version)
                except CallApiError as e:
                    logger.exception(e)
                    if e.status == 404:
                        newest_build_version.build_status = "unbuild"
                        newest_build_version.save()
                    else:
                        newest_build_version.build_status = "build_fail"
                        newest_build_version.save()
                    raise Exception("invoke region build error")

                newest_build_version.build_status = "building"
                newest_build_version.event_id = event_id
                newest_build_version.save()
                rt_pbv = newest_build_version.to_dict()
            result = general_message(200, "success", "操作成功", bean=rt_pbv)
            return JsonResponse(data=result, status=200)
        except Exception as e:
            result = error_message()
            # if new_version:
            #     plugin_svc.roll_back_build(plugin_id, new_version)
            return JsonResponse(data=result, status=500)
コード例 #2
0
    def get(self, request, *args, **kwargs):
        """批量插件状态获取"""
        logger.debug(request.body)
        result = {}
        try:
            self.cookie_region = self.request.COOKIES.get('region')
            plugins = plugin_svc.get_tenant_plugins(self.cookie_region,
                                                    self.tenant)
            status_list = []
            for p in plugins:
                pbv = plugin_svc.get_tenant_plugin_version_by_plugin_id_and_version(
                    self.tenant, p.plugin_id)
                if pbv.build_status in ("building", "time_out"):
                    status = plugin_svc.get_region_plugin_build_status(
                        self.cookie_region, self.tenant.tenant_name,
                        pbv.plugin_id, pbv.build_version)
                    pbv.build_status = status
                    pbv.save()
                status_list.append({
                    "plugin_id": pbv.plugin_id,
                    "build_version": pbv.build_version,
                    "build_status": pbv.build_status
                })

            result = general_message(200, "success", "查询成功", list=status_list)
        except Exception as e:
            logger.exception(e)
            result = error_message()
        return JsonResponse(result, status=result["code"])
コード例 #3
0
ファイル: market_plugin.py プロジェクト: sunshine2995/console
    def post(self, request, *args, **kwargs):
        """
        分享插件
        TODO 此功能暂时不全
        """
        result = {}

        try:
            data = json.loads(request.body)
            plugin_id = data.get("plugin_id", None)
            plugin_version = data.get("build_version", None)
            share_verion = data.get("share_verion", plugin_version)
            region = self.request.COOKIES.get('region')
            if not plugin_id:
                return JsonResponse(general_message(400, "params error",
                                                    "参数异常"),
                                    status=400)
            base_info = plugin_svc.get_tenant_plugin_by_plugin_id(
                self.tenant, plugin_id)
            pbv = plugin_svc.get_tenant_plugin_version_by_plugin_id_and_version(
                self.tenant, plugin_id, plugin_version)
            image = ""
            config = plugin_svc.get_plugin_config(self.tenant, plugin_id,
                                                  plugin_version)
            config_group = json.dumps(config["config_group"])
            plugin_share_svc.create_share_info(self.tenant, self.user.user_id,
                                               base_info, pbv, share_verion,
                                               image, config_group)

            result = general_message(200, "success", "操作成功")
        except Exception as e:
            logger.exception(e)
            result = error_message()
        return JsonResponse(result, status=result["code"])
コード例 #4
0
 def get(self, request, plugin_id, build_version, *args, **kwargs):
     result = {}
     try:
         region = self.request.COOKIES.get('region')
         level = request.GET.get("level", "info")
         pbv = plugin_svc.get_tenant_plugin_version_by_plugin_id_and_version(
             self.tenant, plugin_id, build_version)
         event_id = pbv.event_id
         data = plugin_svc.get_plugin_event_log(region, self.tenant,
                                                event_id, level)
         result = general_message(200, "success", "查询成功", list=data)
     except Exception as e:
         logger.exception(e)
         result = error_message()
     return JsonResponse(result, status=result["code"])
コード例 #5
0
    def post(self, request, plugin_id, build_version, *args, **kwargs):
        """构建插件"""
        result = {}
        try:
            config = json.loads(request.body)
            update_info = config.get("update_info", None)
            pbv = plugin_svc.get_tenant_plugin_version_by_plugin_id_and_version(
                self.tenant, self.plugin_id, build_version)
            if not pbv:
                return JsonResponse(general_message(404, "plugin not found",
                                                    "插件不存在"),
                                    status=404)
            if pbv.plugin_version_status == "fixed":
                return JsonResponse(general_message(
                    403, "current version is fixed", "该版本已固定,不能构建"),
                                    status=403)
            if pbv.build_status == "building":
                return JsonResponse(general_message(403, "too offen",
                                                    "构建中,请稍后再试"),
                                    status=403)

            if update_info:
                pbv.update_info = update_info
                pbv.save()

            region = self.request.COOKIES.get('region')
            event_id = make_uuid()
            base_info = plugin_svc.get_tenant_plugin_by_plugin_id(
                self.tenant, self.plugin_id)
            try:
                plugin_svc.build_plugin(region, self.tenant, event_id,
                                        self.plugin_id, build_version,
                                        base_info.origin)
                pbv.build_status = "building"
                logger.debug("plugin build status is {}".format(
                    pbv.build_status))
                pbv.event_id = event_id
                pbv.save()
                bean = {"event_id": event_id}
                result = general_message(200, "success", "操作成功", bean=bean)
            except Exception as e:
                logger.exception(e)
                result = general_message(500, "region invoke error", "操作失败")
        except Exception as e:
            logger.exception(e)
            result = error_message()
        return JsonResponse(result, status=result["code"])
コード例 #6
0
 def put(self, request, plugin_id, build_version, *args, **kwargs):
     """更新指定版本的插件信息"""
     result = {}
     try:
         data = json.loads(request.body)
         pbv = plugin_svc.get_tenant_plugin_version_by_plugin_id_and_version(
             self.tenant, plugin_id, build_version)
         if not pbv:
             return JsonResponse(general_message(404, "plugin not found",
                                                 "该版本插件不存在"),
                                 status=404)
         base_info = plugin_svc.get_tenant_plugin_by_plugin_id(
             self.tenant, plugin_id)
         plugin_alias = data.get("plugin_alias", base_info.plugin_alias)
         update_info = data.get("update_info", pbv.update_info)
         build_cmd = data.get("build_cmd", pbv.build_cmd)
         image_tag = data.get("image_tag", pbv.image_tag)
         code_version = data.get("code_version", pbv.code_version)
         min_memory = data.get("min_memory", pbv.min_memory)
         region = self.request.COOKIES.get('region')
         min_cpu = plugin_svc.calculate_cpu(region, int(min_memory))
         update_params = {
             "min_memory": min_memory,
             "build_cmd": build_cmd,
             "update_info": update_info,
             "min_cpu": min_cpu,
             "code_version": code_version,
             "image_tag": image_tag
         }
         # 更新数据
         new_pbv = plugin_svc.update_plugin_version_by_unique_key(
             self.tenant, plugin_id, build_version, **update_params)
         base_info.plugin_alias = plugin_alias
         base_info.save()
         bean = new_pbv.to_dict()
         result = general_message(200, "success", "操作成功", bean=bean)
     except Exception as e:
         logger.exception(e)
         result = error_message()
     return JsonResponse(result, status=result["code"])
コード例 #7
0
 def get(self, request, plugin_id, *args, **kwargs):
     context = self.get_context()
     try:
         context["pluginStatus"] = "active"
         build_version = request.GET.get("build_version", None)
         context["plugin_id"] = plugin_id
         base_info = plugin_svc.get_tenant_plugin_by_plugin_id(
             self.tenant, plugin_id)
         if not base_info:
             return HttpResponse("插件不存在", status=404)
         build_version_info = plugin_svc.get_tenant_plugin_version_by_plugin_id_and_version(
             self.tenant, plugin_id, build_version)
         context["base_info"] = base_info
         context["build_version_info"] = build_version_info
         context["web_socket_url"] = self.get_ws_url(
             settings.EVENT_WEBSOCKET_URL[self.response_region],
             "event_log")
         logger.debug(context["web_socket_url"])
     except Exception as e:
         logger.exception(e)
     return TemplateResponse(self.request, "www/plugin/config_plugin.html",
                             context)
コード例 #8
0
    def get(self, request, plugin_id, *args, **kwargs):
        result = {}
        try:
            # 获取插件最新的配置信息
            build_version = request.GET.get("build_version", None)
            base_info = plugin_svc.get_tenant_plugin_by_plugin_id(
                self.tenant, plugin_id)
            if not base_info:
                return JsonResponse({"msg": "插件不存在"}, status=404)
            if not build_version:
                pbv = plugin_svc.get_tenant_plugin_version_by_plugin_id_and_version(
                    self.tenant, plugin_id)
                build_version = pbv.build_version

            data = plugin_svc.get_plugin_config(self.tenant, plugin_id,
                                                build_version)
            web_socket_url = self.get_ws_url(
                settings.EVENT_WEBSOCKET_URL[self.response_region],
                "event_log")
            data["web_socket_url"] = web_socket_url
            result = general_message(200, "success", "查询成功", bean=data)
        except Exception as e:
            result = error_message()
        return JsonResponse(data=result, status=result["code"])
コード例 #9
0
    def post(self, request, plugin_id, *args, **kwargs):
        """创建插件新版本"""
        result = {}
        try:
            region = self.request.COOKIES.get('region')
            pbv = plugin_svc.get_tenant_plugin_version_by_plugin_id_and_version(
                self.tenant, plugin_id, None)
            base_info = plugin_svc.get_tenant_plugin_by_plugin_id(
                self.tenant, plugin_id)
            if base_info:
                if base_info.origin != "source_code":
                    return JsonResponse(general_message(
                        403, "market plugin can not create new version",
                        "云市插件不能创建版本"),
                                        status=403)
            if not pbv:
                return JsonResponse(general_message(
                    403, "current version not exist", "插件不存在任何版本,无法创建"),
                                    status=403)
            if pbv.build_status != "build_success":
                return JsonResponse(general_message(
                    403, "no useable plugin version", "您的插件构建未成功,无法创建新版本"),
                                    status=403)

            plugin_id, new_version = plugin_svc.copy_config_to_new_version(
                self.tenant, self.plugin_id, pbv.build_version)

            pbv.plugin_version_status = "fixed"
            pbv.save()
            bean = {"plugin_id": plugin_id, "new_version": new_version}
            result = general_message(200, "success", "操作成功", bean=bean)

        except Exception as e:
            logger.exception(e)
            result = error_message()
        return JsonResponse(result, status=result["code"])
コード例 #10
0
    def post(self, request, plugin_id, *args, **kwargs):
        result = {}
        build_version = None
        try:
            config = json.loads(request.body)
            min_memory = config["min_memory"]
            build_version = config["build_version"]
            config_group = config['config_group']
            update_info = config['update_info']
            build_cmd = config["build_cmd"]
            image_tag = config.get("image_tag", None)
            code_version = config.get("code_version", None)
            if config_group:
                is_success, msg = plugin_svc.check_config(*config_group)
                if not is_success:
                    result["status"] = "failure"
                    result["msg"] = msg
                    return JsonResponse(result)
            plugin = plugin_svc.get_tenant_plugin_by_plugin_id(
                self.tenant, plugin_id)
            min_cpu = plugin_svc.calculate_cpu(self.response_region,
                                               int(min_memory))
            pbv = plugin_svc.get_tenant_plugin_version_by_plugin_id_and_version(
                self.tenant, plugin_id, build_version)

            if pbv.build_status == "unbuild":
                # 删除原有配置项目
                plugin_svc.delete_config_group_by_group_id_and_version(
                    plugin_id, build_version)
                # 重新创建新配置
                plugin_svc.create_config_group(plugin_id, build_version,
                                               config_group)
                # 更新参数
                update_params = {
                    "min_memory": min_memory,
                    "build_cmd": build_cmd,
                    "update_info": update_info
                }
                plugin_svc.update_plugin_version_by_unique_key(
                    self.tenant, plugin_id, build_version, **update_params)
                build_version = pbv.build_version
            else:
                # 重新创建新的数据
                new_version = make_uuid()[:6] + datetime.datetime.now(
                ).strftime('%Y%m%d%H%M%S')
                if plugin.build_source == "dockerfile":
                    code_version = config.get("code_version", "master")
                if plugin.build_source == "image":
                    image_tag = config.get("image", "lastest")
                new_pbv = plugin_svc.create_plugin_build_version(
                    self.response_region, pbv.plugin_id, pbv.tenant_id,
                    self.user.user_id, update_info, new_version, "unbuild",
                    min_memory, min_cpu, build_cmd, image_tag, code_version)

                plugin_svc.create_config_group(plugin_id,
                                               new_pbv.build_version,
                                               config_group)
                build_version = new_version
            bean = {"plugin_id": plugin_id, "build_version": build_version}
            result = general_message(200, "success", "查询成功", bean=bean)

        except Exception as e:
            logger.exception(e)
            result = error_message()
        return JsonResponse(result, status=result["code"])