コード例 #1
0
    def get_application_status(
        self,
        request,
        cluster_id,
        project_id=None,
        category="application",
        kind=2,
        func=None,
        ns_name=None,
        inst_name=None,
    ):
        """获取application的状态"""
        ret_data = {}
        flag, resp = func(
            request,
            project_id,
            cluster_id,
            inst_name,
            category=category,
            project_kind=kind,
            namespace=ns_name,
            field=
            "data.metadata.name,data.metadata.namespace,data.status,data.message,data.buildedInstance,data.instance,updateTime,createTime,data.metadata.labels",  # noqa
        )

        if not flag:
            raise error_codes.APIError.f(resp.data.get("message"))

        for val in resp.get("data", []):
            data = val.get("data", {})
            metadata = data.get("metadata", {})
            key_name = (metadata.get("namespace"), metadata.get("name"))
            build_instance = data.get("buildedInstance") or 0
            instance = data.get("instance") or 0
            labels = metadata.get("labels", {})
            source_type = labels.get("io.tencent.paas.source_type") or "other"
            annotations = metadata.get('annotations') or {}
            ret_data[key_name] = {
                "name": metadata.get("name"),
                "namespace": metadata.get("namespace"),
                "backend_status": "BackendNormal",
                "backend_status_message": _("请求失败,已通知管理员!"),
                "category": category,
                "application_status": data.get("status"),
                "application_status_message": data.get("message"),
                "task_group_count": "%s/%s" % (build_instance, instance),
                "build_instance": build_instance,
                "instance": instance,
                "deployment_status": "",
                "deployemnt_status_message": "",
                "update_time": val.get("updateTime"),
                "create_time": val.get("updateTime"),
                "source_type": SOURCE_TYPE_MAP.get(source_type),
                "version":
                utils.get_instance_version_name(annotations, labels),
                'hpa': False,  # Application 默认都是未绑定
            }
        return ret_data
コード例 #2
0
    def get_k8s_category_info(self, request, project_id, resource_name, inst_name, cluster_id, ns_name):
        """获取分类的上报信息
        {'BCS-K8S-15007': {'K8sDeployment': {'inst_list': ['bellke-test-deploy-1'], 'ns_list': ['abc1']}}}
        """
        ret_data = {}
        client = K8SClient(
            request.user.token.access_token,
            project_id, cluster_id, None
        )
        curr_func = FUNC_MAP[resource_name] % 'get'
        resp = retry_requests(
            getattr(client, curr_func),
            params={
                "name": inst_name,
                "namespace": ns_name,
                "field": ','.join(app_constants.RESOURCE_STATUS_FIELD_LIST)
            }
        )
        if resp.get('code') != ErrorCode.NoError:
            raise error_codes.APIError.f(resp.get('message'))
        data = resp.get('data') or []

        # 添加HPA绑定信息
        data = get_deployment_hpa(request, project_id, cluster_id, ns_name, data)

        for info in data:
            spec = getitems(info, ['data', 'spec'], default={})
            # 针对不同的模板获取不同的值
            replicas, available = utils.get_k8s_desired_ready_instance_count(info, resource_name)
            curr_key = (info['namespace'], info['resourceName'])
            labels = getitems(info, ['data', 'metadata', 'labels'], default={})
            source_type = labels.get('io.tencent.paas.source_type') or 'other'
            annotations = getitems(info, ['data', 'metadata', 'annotations'], default={})
            ret_data[curr_key] = {
                'backend_status': 'BackendNormal',
                'backend_status_message': _('请求失败,已通知管理员!'),
                'category': resource_name,
                'pod_count': f'{available}/{replicas}',
                'build_instance': available,
                'instance': replicas,
                'status': utils.get_k8s_resource_status(resource_name, info, replicas, available),
                'name': info['resourceName'],
                'namespace': info['namespace'],
                'create_at': info['createTime'],
                'update_at': info['updateTime'],
                'source_type': SOURCE_TYPE_MAP.get(source_type),
                'version': get_instance_version_name(annotations, labels),  # 标识应用的线上版本
                'hpa': info['hpa']  # 是否绑定了HPA
            }
            if spec.get('paused'):
                ret_data[curr_key]['status'] = 'Paused'
        return ret_data
コード例 #3
0
    def get_deployment_status(
        self,
        request,
        cluster_id,
        project_id=None,
        category="deployment",
        kind=2,
        func=None,
        ns_name=None,
        inst_name=None,
    ):
        """获取deployment的状态"""
        ret_data = {}
        flag, resp = func(request,
                          project_id,
                          cluster_id,
                          inst_name,
                          category=category,
                          project_kind=kind,
                          namespace=ns_name)
        if not flag:
            raise error_codes.APIError.f(resp.data.get("message"))

        # 添加HPA绑定信息
        hpa_list = get_mesos_deployment_hpa(request, project_id, cluster_id,
                                            ns_name)

        for val in resp.get("data", []):
            data = val.get("data", {})
            metadata = data.get("metadata", {})
            key_name = (metadata.get("namespace"), metadata.get("name"))
            labels = metadata.get("labels", {})
            annotations = metadata.get('annotations') or {}
            ret_data[key_name] = {
                "backend_status": "BackendNormal",
                "backend_status_message": _("请求失败,已通知管理员!"),
                "category": category,
                "deployment_status": data.get("status"),
                "deployemnt_status_message": data.get("message"),
                "source_type": labels.get("io.tencent.paas.source_type"),
                "version":
                utils.get_instance_version_name(annotations, labels),
                "hpa": True if key_name in hpa_list else False,
            }
        return ret_data