Пример #1
0
def list_routing(request, router_id):
    """
    dst_rules, pbr_tables{src_rules}
    :param request:
    :param router_id:
    :return:
    """
    control = ControlEngine(request.session.get("ctrl_header"))
    modal_title = request.GET.get("modal_title")
    dst_rules = control.get_route_dst_rule_list()
    result = {"modal_title": modal_title, "router_id": router_id}
    if dst_rules.get("success"):
        netnodeip = [
            tmp_dst_rule.get("netnodeip")
            for tmp_dst_rule in dst_rules["success"]["result"]
            if tmp_dst_rule.get("router") == "qrouter-" + router_id
        ]
        if len(netnodeip) > 0:
            pbr_table_name = router_id.split("-")[0]
            result["pbr"] = pbr_table_name
            result["netnodeip"] = netnodeip[0]

            dst_rule = control.get_route_dst_rule("qrouter-" + router_id,
                                                  netnodeip[0])
            if dst_rule.get("success"):
                result["dst_rules"] = dst_rule["success"].get("result")

            result_pbr_tables = control.get_route_pbr_tables()
            if result_pbr_tables.get("success") and result_pbr_tables[
                    "success"].get("result") and len(
                        result_pbr_tables["success"]["result"]) > 0:
                pbr_tables = result_pbr_tables["success"].get("result")[0].get(
                    "routers").get("qrouter-" + router_id)
                result["pbr_tables"] = []
                for value in pbr_tables:
                    # logger.debug("\t\t\n{}\t\t\n{}\t\t\n{}".format(pbr_table_name, value.get("PBR_TABLE"),pbr_table_name in value.get("PBR_TABLE")))
                    if pbr_table_name in value.get(
                            "PBR_TABLE"
                    ):  # value.get("PBR_TABLE") in ["local", "main", "default"] or
                        pbr_table = {
                            "PBR_TABLE": value.get("PBR_TABLE"),
                            "order": value.get("order"),
                            "target": value.get("target")
                        }
                        src_rules = control.get_route_src_rules(
                            "qrouter-" + router_id, netnodeip[0],
                            value.get("PBR_TABLE"))
                        if src_rules.get("success"):
                            pbr_table["src_rules"] = src_rules["success"].get(
                                "result")
                        result["pbr_tables"].append(pbr_table)
    return render(request, "service/routing/index.html", result)
Пример #2
0
def delete_src_routing(request, router_id):
    """
    type2 삭제 요청시
     - type2 제거
    type1 삭제 요청은 없음
    pbrtable 삭제 요청시
     - type2 조회후 제거
     - type1 조회후 제거
     - pbrtable 제거
    :param request:
    :param router_id:
    :return:
    """
    control = ControlEngine(request.session.get("ctrl_header"))
    data = json.loads(request.POST.get("data"))
    netnodeip = request.POST.get("netnodeip")
    if data.get("type") == 'type1':
        result = control.delete_route_src_rule_path_type1(
            router_id, netnodeip, data)
    elif data.get("type") == 'type2':
        result = control.delete_route_src_rule_path_type2(
            router_id, netnodeip, data)
    else:
        result_src_rules = control.get_route_src_rules(router_id, netnodeip,
                                                       data.get("pbrtable"))
        result_qrouters = control.get_route_pbr_tables()

        if result_qrouters.get("success") and result_src_rules.get("success"):
            result = {}
            for src_rule in result_src_rules["success"].get("result"):
                if src_rule.get("broadcast") is None and src_rule.get(
                        "local") is None:
                    result_delete_src_type2 = control.delete_route_src_rule_path_type2(
                        router_id, netnodeip, {
                            "type": "type2",
                            "dest": src_rule.get("dest"),
                            "via": src_rule.get("via"),
                            "dev": src_rule.get("dev"),
                            "pbr": data.get("pbrtable")
                        })
                    if result_delete_src_type2.get("error"):
                        result = result_delete_src_type2

            if result.get("error") is None:
                qrouters = result_qrouters["success"].get("result")[0].get(
                    "routers")
                pbr_tables = qrouters.get(router_id)
                for pbr_table in pbr_tables:
                    if pbr_table.get("PBR_TABLE") == data.get("pbrtable"):
                        result_delete_src_type1 = control.delete_route_src_rule_path_type1(
                            router_id, netnodeip, {
                                "type":
                                "type1",
                                "src":
                                pbr_table.get("target").replace(
                                    "from ", "").replace(" lookup", ""),
                                "pbr":
                                data.get("pbrtable")
                            }
                        )  # from all lookup / from 172.16.10.0/24 lookup 에서 CIDR 추출
                        if result_delete_src_type1.get("error"):
                            result = result_delete_src_type1

                if result.get("error") is None:
                    result = control.delete_route_src_rule_path_pbrtable(
                        router_id, netnodeip, {"pbr": data.get("pbrtable")})

        elif result_qrouters.get("error"):
            result = result_qrouters
        else:
            result = result_src_rules

    return JsonResponse(result)