Exemplo n.º 1
0
 def get(self, request, *args, **kwargs):
     group_id = request.GET.get("group_id", None)
     region_name = request.GET.get("region_name", None)
     if not group_id or not region_name:
         result = general_message(400, "not group_id", "参数缺失")
         return Response(result)
     services = group_service_relation_repo.get_services_obj_by_group(
         group_id)
     if not services:
         result = general_message(400, "not service", "当前组内无组件,无法操作")
         return Response(result)
     service_id_list = [x.service_id for x in services]
     try:
         service_status_list = region_api.service_status(
             self.response_region, self.tenant_name, {
                 "service_ids": service_id_list,
                 "enterprise_id": self.user.enterprise_id
             })
         result = general_message(200,
                                  "success",
                                  "查询成功",
                                  list=service_status_list)
         return Response(result)
     except (region_api.CallApiError, ServiceHandleException) as e:
         logger.debug(e)
         raise ServiceHandleException(msg="region error",
                                      msg_show="访问数据中心失败")
Exemplo n.º 2
0
    def post(self, request, *args, **kwargs):
        """
        ---
        parameters:
            - name: tenantName
              description: 租户名
              required: true
              type: string
              paramType: path
            - name: action
              description: 操作名称 stop| start|upgrade|deploy
              required: true
              type: string
              paramType: form
            - name: group_id
              description: 组id
              required: true
              type: string
              paramType: path

        """
        action = request.data.get("action", None)
        group_id = int(kwargs.get("group_id", None))
        services = group_service_relation_repo.get_services_obj_by_group(
            group_id)
        if not services:
            result = general_message(400, "not service", "当前组内无组件,无法操作")
            return Response(result)
        service_ids = [service.service_id for service in services]
        if action not in ("stop", "start", "upgrade", "deploy"):
            return Response(general_message(400, "param error", "操作类型错误"),
                            status=400)
        # 去除掉第三方组件
        for service_id in service_ids:
            service_obj = service_repo.get_service_by_service_id(service_id)
            if service_obj and service_obj.service_source == "third_party":
                service_ids.remove(service_id)

        if action == "stop":
            self.has_perms([300006, 400008])
        if action == "start":
            self.has_perms([300005, 400006])
        if action == "upgrade":
            self.has_perms([300007, 400009])
        if action == "deploy":
            self.has_perms([300008, 400010])
            # 批量操作
        code, msg = app_manage_service.batch_operations(
            self.tenant, self.user, action, service_ids, self.oauth_instance)
        if code != 200:
            result = general_message(code, "batch manage error", msg)
        else:
            result = general_message(200, "success", "操作成功")
        return Response(result, status=result["code"])
Exemplo n.º 3
0
 def get(self, request, *args, **kwargs):
     group_id = request.GET.get("group_id", None)
     region_name = request.GET.get("region_name", None)
     if not group_id or not region_name:
         result = general_message(400, "not group_id", "参数缺失")
         return Response(result)
     services = group_service_relation_repo.get_services_obj_by_group(
         group_id)
     if not services:
         result = general_message(400, "not service", "当前组内无应用,无法操作")
         return Response(result)
     service_id_list = [x.service_id for x in services]
     service_status_list = region_api.service_status(
         self.response_region, self.tenant_name, {
             "service_ids": service_id_list,
             "enterprise_id": self.user.enterprise_id
         })
     result = general_message(200,
                              "success",
                              "查询成功",
                              list=service_status_list)
     return Response(result)
Exemplo n.º 4
0
    def post(self, request, *args, **kwargs):
        """
        ---
        parameters:
            - name: tenantName
              description: 租户名
              required: true
              type: string
              paramType: path
            - name: action
              description: 操作名称 stop| start|upgrade|deploy
              required: true
              type: string
              paramType: form
            - name: group_id
              description: 组id
              required: true
              type: string
              paramType: path

        """
        try:
            action = request.data.get("action", None)

            group_id = int(kwargs.get("group_id", None))
            services = group_service_relation_repo.get_services_obj_by_group(
                group_id)
            if not services:
                result = general_message(400, "not service", "当前组内无应用,无法操作")
                return Response(result)
            service_ids = [service.service_id for service in services]
            if action not in ("stop", "start", "upgrade", "deploy"):
                return Response(general_message(400, "param error", "操作类型错误"),
                                status=400)
            # 去除掉三方服务
            for service_id in service_ids:
                service_obj = service_repo.get_service_by_service_id(
                    service_id)
                if service_obj:
                    if service_obj.service_source == "third_party":
                        service_ids.remove(service_id)

            # 校验权限
            identitys = team_services.get_user_perm_identitys_in_permtenant(
                user_id=self.user.user_id, tenant_name=self.tenant_name)
            perm_tuple = team_services.get_user_perm_in_tenant(
                user_id=self.user.user_id, tenant_name=self.tenant_name)

            if action == "stop":
                if "stop_service" not in perm_tuple and "owner" not in identitys and "admin" not in identitys and "developer" not in identitys:
                    return Response(general_message(400, "Permission denied",
                                                    "没有关闭应用权限"),
                                    status=400)
            if action == "start":
                if "start_service" not in perm_tuple and "owner" not in identitys and "admin" not in identitys and "developer" not in identitys:
                    return Response(general_message(400, "Permission denied",
                                                    "没有启动应用权限"),
                                    status=400)
            if action == "upgrade":
                if "restart_service" not in perm_tuple and "owner" not in identitys and "admin" not in identitys and "developer" not in identitys:
                    return Response(general_message(400, "Permission denied",
                                                    "没有更新应用权限"),
                                    status=400)
            if action == "deploy":
                if "deploy_service" not in perm_tuple and "owner" not in identitys and "admin" not in identitys and "developer" not in identitys:
                    return Response(general_message(400, "Permission denied",
                                                    "没有重新构建权限"),
                                    status=400)
                # 批量操作
            code, msg = app_manage_service.batch_operations(
                self.tenant, self.user, action, service_ids)
            if code != 200:
                result = general_message(code, "batch manage error", msg)
            else:
                result = general_message(200, "success", "操作成功")

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