def get(self, request, *args, **kwargs):
        """
        获取组件的持久化路径
        ---
        parameters:
            - name: tenantName
              description: 租户名
              required: true
              type: string
              paramType: path
            - name: serviceAlias
              description: 组件别名
              required: true
              type: string
              paramType: path
        """
        is_config = parse_argument(request,
                                   'is_config',
                                   value_type=bool,
                                   default=False)

        volumes = volume_service.get_service_volumes(self.tenant, self.service,
                                                     is_config)
        volumes_list = []
        if is_config:
            for tenant_service_volume in volumes:
                cf_file = volume_repo.get_service_config_file(
                    tenant_service_volume["ID"])
                if cf_file:
                    tenant_service_volume[
                        "file_content"] = cf_file.file_content
                volumes_list.append(tenant_service_volume)
        else:
            dependents = mnt_service.get_volume_dependent(
                self.tenant, self.service)
            name2deps = {}
            if dependents:
                for dep in dependents:
                    if name2deps.get(dep["volume_name"], None) is None:
                        name2deps[dep["volume_name"]] = []
                    name2deps[dep["volume_name"]].append(dep)
            for vo in volumes:
                vo["dep_services"] = name2deps.get(vo["volume_name"], None)
                volumes_list.append(vo)
        result = general_message(200, "success", "查询成功", list=volumes_list)
        return Response(result, status=result["code"])
    def get(self, request, *args, **kwargs):
        """
        获取组件的持久化路径
        ---
        parameters:
            - name: tenantName
              description: 租户名
              required: true
              type: string
              paramType: path
            - name: serviceAlias
              description: 组件别名
              required: true
              type: string
              paramType: path
        """
        volume_types = parse_argument(request, 'volume_types', value_type=list)
        try:
            q = Q(volume_type__in=volume_types) if volume_types else Q()
            tenant_service_volumes = volume_service.get_service_volumes(self.tenant, self.service).filter(q)

            volumes_list = []
            if tenant_service_volumes:
                for tenant_service_volume in tenant_service_volumes:
                    volume_dict = dict()
                    volume_dict["service_id"] = tenant_service_volume.service_id
                    volume_dict["category"] = tenant_service_volume.category
                    volume_dict["host_path"] = tenant_service_volume.host_path
                    volume_dict["volume_type"] = tenant_service_volume.volume_type
                    volume_dict["volume_path"] = tenant_service_volume.volume_path
                    volume_dict["volume_name"] = tenant_service_volume.volume_name
                    volume_dict["ID"] = tenant_service_volume.ID
                    if tenant_service_volume.volume_type == "config-file":
                        cf_file = volume_repo.get_service_config_file(tenant_service_volume.ID)
                        if cf_file:
                            volume_dict["file_content"] = cf_file.file_content
                    volumes_list.append(volume_dict)
            result = general_message(200, "success", "查询成功", list=volumes_list)
        except Exception as e:
            logger.exception(e)
            result = error_message(e.message)
        return Response(result, status=result["code"])
Exemple #3
0
 def test_not_get_argument_return_list(self):
     """测试获取不到 list 参数"""
     value = parse_argument(self.request, 'not_list', value_type=list)
     self.assertEqual(value, None)
Exemple #4
0
 def test_not__return_int(self):
     """测试获取不到 int 参数"""
     value = parse_argument(self.request, 'not_int', value_type=int)
     self.assertEqual(value, None)
Exemple #5
0
 def test_parse_argument_return_list(self):
     """测试 list 参数获取"""
     value = parse_argument(self.request, 'c', value_type=list)
     self.assertEqual(isinstance(value, list), True)
     self.assertEqual(value, ['django', 'test'])
Exemple #6
0
 def test_parse_argument_return_str(self):
     """测试 str 参数获取"""
     value = parse_argument(self.request, 'b', value_type=str)
     self.assertEqual(value, 'hello')
Exemple #7
0
 def test_parse_argument_return_int(self):
     """测试 int 参数获取"""
     value = parse_argument(self.request, 'a', value_type=int)
     self.assertEqual(value, 1)
Exemple #8
0
 def test_parse_argument_return_bool_error(self):
     """测试 bool 参数获取错误"""
     try:
         parse_argument(self.request, 'a', value_type=bool)
     except AbortRequest as e:
         self.assertEqual(isinstance(e, AbortRequest), True)
 def get(self, request, app_id, *args, **kwargs):
     page = parse_argument(request, 'page', value_type=int, default=1)
     page_size = parse_argument(request, 'page_size', value_type=int, default=10)
     records, total = upgrade_service.list_records(self.tenant_name, self.region_name, self.app_id,
                                                   AppUpgradeRecordType.UPGRADE.value, page, page_size)
     return MessageResponse(msg="success", bean={"total": total}, list=records)
Exemple #10
0
 def test_parse_argument_default_error(self):
     """测试默认参数类型错误"""
     with self.assertRaises(TypeError):
         parse_argument(self.request, 'a', default='hello', value_type=int)
Exemple #11
0
 def test_value_type_error(self):
     """测试 value_type TypeError"""
     with self.assertRaises(TypeError):
         parse_argument(self.request, 'a', value_type=dict)
Exemple #12
0
    def post(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
        """
        use_force = parse_argument(request, 'use_force', default=False, value_type=bool)

        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)

            if not request.data:
                result = general_message(400, "share info can not be empty", "分享信息不能为空")
                return Response(result, status=400)
            app_version_info = request.data.get("app_version_info", None)
            share_app_info = request.data.get("share_service_list", None)
            if not app_version_info or not share_app_info:
                result = general_message(400, "share info can not be empty", "分享应用基本信息或应用信息不能为空")
                return Response(result, status=400)
            if not app_version_info.get("app_model_id", None):
                result = general_message(400, "share app model id can not be empty", "分享应用信息不全")
                return Response(result, status=400)

            if share_app_info:
                for app in share_app_info:
                    extend_method = app.get("extend_method", "")
                    if is_singleton(extend_method):
                        extend_method_map = app.get("extend_method_map")
                        if extend_method_map and extend_method_map.get("max_node", 1) > 1:
                            result = general_message(400, "service type do not allow multiple node", "分享应用不支持多实例")
                            return Response(result, status=400)

            # 继续给app_template_incomplete赋值
            code, msg, bean = share_service.create_share_info(
                share_record=share_record,
                share_team=self.team,
                share_user=request.user,
                share_info=request.data,
                use_force=use_force)
            result = general_message(code, "create share info", msg, bean=bean)
            return Response(result, status=code)
        except ServiceHandleException as e:
            raise e
        except Exception as e:
            logger.exception(e)
            result = error_message(e.message)
            return Response(result, status=500)
Exemple #13
0
    def get(self, request, *args, **kwargs):
        """
        获取服务挂载的服务
        ---
        parameters:
            - name: tenantName
              description: 租户名
              required: true
              type: string
              paramType: path
            - name: serviceAlias
              description: 服务别名
              required: true
              type: string
              paramType: path
            - name: type
              description: 查询的类别 mnt(已挂载的,默认)| unmnt (未挂载的)
              required: false
              type: string
              paramType: query
            - name: page
              description: 页号(默认第一页)
              required: false
              type: integer
              paramType: query
            - name: page_size
              description: 每页大小(默认10)
              required: false
              type: integer
              paramType: query

        """
        query_type = request.GET.get("type", "mnt")
        page = request.GET.get("page", 1)
        page_size = request.GET.get("page_size", 10)
        volume_types = parse_argument(request, 'volume_types', value_type=list)
        try:
            if query_type == "mnt":
                mnt_list, total = mnt_service.get_service_mnt_details(
                    self.tenant, self.service, volume_types)
            elif query_type == "unmnt":
                q = Q(volume_type__in=volume_types) if volume_types else Q()
                services = app_service.get_app_list(
                    self.tenant.pk, self.user, self.tenant.tenant_id,
                    self.service.service_region)

                services_ids = [s.service_id for s in services]
                mnt_list, total = mnt_service.get_service_unmnt_details(
                    self.tenant, self.service, services_ids, page, page_size,
                    q)
            else:
                return Response(general_message(400, "param error", "参数错误"),
                                status=400)
            result = general_message(200,
                                     "success",
                                     "查询成功",
                                     list=mnt_list,
                                     total=total)
        except Exception as e:
            logger.exception(e)
            result = error_message(e.message)
        return Response(result, status=result["code"])
 def get(self, request, group_id, *args, **kwargs):
     upgrade_group_id = parse_argument(
         request, 'upgrade_group_id', default=None, value_type=int, error='upgrade_group_id is a required parameter')
     version = parse_argument(request, 'version', value_type=str, required=True, error='version is a required parameter')
     changes = upgrade_service.get_property_changes(self.tenant, self.region, self.user, self.app, upgrade_group_id, version)
     return MessageResponse(msg="success", list=changes)
    def get(self, request, *args, **kwargs):
        """
        获取组件挂载的组件
        ---
        parameters:
            - name: tenantName
              description: 租户名
              required: true
              type: string
              paramType: path
            - name: serviceAlias
              description: 组件别名
              required: true
              type: string
              paramType: path
            - name: type
              description: 查询的类别 mnt(已挂载的,默认)| unmnt (未挂载的)
              required: false
              type: string
              paramType: query
            - name: page
              description: 页号(默认第一页)
              required: false
              type: integer
              paramType: query
            - name: page_size
              description: 每页大小(默认10)
              required: false
              type: integer
              paramType: query

        """
        query = request.GET.get("query", "")
        if query == "undefined":
            query = ""
        query_type = request.GET.get("type", "mnt")
        page = request.GET.get("page", 1)
        page_size = request.GET.get("page_size", 10)
        volume_types = parse_argument(request, 'volume_types', value_type=list)
        is_config = parse_argument(request,
                                   'is_config',
                                   value_type=bool,
                                   default=False)

        if query == "undefined":
            query = ""
        if volume_types is not None and ('config-file' in volume_types):
            is_config = True

        if query_type == "mnt":
            mnt_list, total = mnt_service.get_service_mnt_details(
                self.tenant, self.service, volume_types)
        elif query_type == "unmnt":
            services = app_service.get_app_list(self.tenant.tenant_id,
                                                self.service.service_region,
                                                query)
            services_ids = [s.service_id for s in services]
            mnt_list, total = mnt_service.get_service_unmount_volume_list(
                self.tenant, self.service, services_ids, page, page_size,
                is_config)
        else:
            return Response(general_message(400, "param error", "参数错误"),
                            status=400)
        result = general_message(200,
                                 "success",
                                 "查询成功",
                                 list=mnt_list,
                                 total=total)

        return Response(result, status=result["code"])
Exemple #16
0
 def test_parse_argument_return_bool(self):
     """测试 bool 参数获取"""
     value = parse_argument(self.request, 'd', value_type=bool)
     self.assertEqual(value, True)
Exemple #17
0
    def post(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
        """
        use_force = parse_argument(request,
                                   'use_force',
                                   default=False,
                                   value_type=bool)

        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)

            if not request.data:
                result = general_message(400, "share info can not be empty",
                                         "分享信息不能为空")
                return Response(result, status=400)
            share_group_info = request.data.get("share_group_info", None)
            if share_group_info["scope"] == "goodrain":
                enterprise = enterprise_services.get_enterprise_by_enterprise_id(
                    self.team.enterprise_id)
                if not enterprise.is_active:
                    return Response(general_message(
                        10407, "enterprise is not active", "企业未激活"),
                                    status=403)
            share_app_info = request.data.get("share_service_list", None)
            if not share_group_info or not share_app_info:
                result = general_message(400, "share info can not be empty",
                                         "分享应用基本信息或应用信息不能为空")
                return Response(result, status=400)
            if not share_group_info.get("group_key", None):
                result = general_message(400,
                                         "share group key can not be empty",
                                         "分享应用信息不全")
                return Response(result, status=400)

            # 继续给app_template_incomplete赋值
            code, msg, bean = share_service.create_share_info(
                share_record=share_record,
                share_team=self.team,
                share_user=request.user,
                share_info=request.data,
                use_force=use_force)
            result = general_message(code, "create share info", msg, bean=bean)
            return Response(result, status=code)
        except ServiceHandleException as e:
            raise e
        except Exception as e:
            logger.exception(e)
            result = error_message(e.message)
            return Response(result, status=500)
 def get(self, request, app_id, *args, **kwargs):
     upgrade_group_id = parse_argument(request, "upgrade_group_id")
     record_type = parse_argument(request, "record_type")
     record = upgrade_service.get_latest_upgrade_record(self.team, self.app, upgrade_group_id, record_type)
     return MessageResponse(msg="success", bean=record)