def get_loadbalance(self, request, project_id, ns_id): """ 查询 namespace 下的 loadbalance 信息 """ access_token = request.user.token.access_token lb_info = MesosLoadBlance.objects.filter(project_id=project_id) lb_list = [] for lb in lb_info: # 已经调用 bcs api 创建过的,才继续查询状态 if lb.status == 'created': # 查询 lb 的ns,TODO 配置平台 /namespace/?group_by=env_type&with_lb=1 该API 直接返回 ns lb_res, lb_data = get_lb_status( access_token, project_id, lb.name, lb.cluster_id, None) if lb_res: lb_list.append({'lb_id': lb.id, 'lb_name': lb.name}) return Response(lb_list)
def handle_lb_dtail_data(self, request, access_token, project_id, merge_data, cluster, namespace, cluster_envs): # 按前端需要二次处理数据 for i in merge_data: i['constraints'] = json.loads(i['data']) i['ip_list'] = json.loads(i['ip_list']) i['cluster_name'] = cluster.get(i['cluster_id'], i['cluster_id']) i['environment'] = cluster_envs.get(i['cluster_id'], '') i.pop('data', None) # 处理新添加的字段 data_dict = i['data_dict'] if data_dict: data_dict = json.loads(data_dict) else: data_dict = {} ns = data_dict.get('namespace_id') or data_dict.get('namespace') if ns and str(ns).isdigit(): ns = int(ns) ns_name = namespace.get(ns) or MESOS_LB_NAMESPACE_NAME i['namespace'] = ns i['namespace_name'] = ns_name i['network_mode'] = data_dict.get('networkMode') i['network_type'] = data_dict.get('networkType') i['custom_value'] = data_dict.get('custom_value') i['image_url'] = data_dict.get('image_url') i['image_version'] = data_dict.get('image_version') i['forward_mode'] = data_dict.get('forward_mode') i['resources'] = data_dict.get('resources') i['instance'] = data_dict.get('instance') i['host_port'] = data_dict.get('host_port') i['eth_value'] = data_dict.get('eth_value', 'eth1') i.pop('data_dict', None) status = i.get('status') or LB_DEFAULT_STATUS if status == LB_DEFAULT_STATUS: i['status'] = status i['status_name'] = [LB_STATUS_DICT.get(status)] i['status_tips'] = [LB_STATUS_DICT.get(status)] else: # 已经创建的应用需要查询 bcs 的状态 lb_res, status_dict = get_lb_status(access_token, project_id, i['name'], i['cluster_id'], ns_name, lb_id=i['id']) deployment_status = status_dict.get('deployment_status') # 用户执行过删除操作 if status == 'deleted' and not deployment_status: i['status'] = status i['status_name'] = [LB_STATUS_DICT.get(status)] i['status_tips'] = [LB_STATUS_DICT.get(status)] else: i['status'] = deployment_status status_name = [] status_tips = [] status_name.append('deployment:%s' % ( status_dict.get('deployment_status') or '--')) status_name.append('application:%s' % ( status_dict.get('application_status') or '--')) status_tips.append('deployment:%s' % ( status_dict.get('deployment_status_message') or '--')) status_tips.append('application:%s' % ( status_dict.get('application_status_message') or '--')) i['status_name'] = status_name i['status_tips'] = status_tips # 停用后,如果不是 deleting 状态,方便前端轮询则需要添加一个中间状态 if status == 'deleted' and deployment_status != 'Deleting': i['status'] = 'before_deleting' # 可以调用 bcs 删除lb 的情况 is_delete_lb = True if i['status'] in [ 'Deploying', 'Running', 'Update', 'UpdatePaused', 'UpdateSuspend'] else False i['is_delete_lb'] = is_delete_lb # 检查是否有集群的相关权限 if merge_data: perm = bcs_perm.Cluster(request, project_id, bcs_perm.NO_RES) merge_data = perm.hook_perms(request, project_id, merge_data) return merge_data