Esempio n. 1
0
 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)
Esempio n. 2
0
    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