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
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
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