コード例 #1
0
ファイル: views.py プロジェクト: jaehoonpaul/i2nsf-soa
def simpleService(request, service_id):
    """
    간략한 서비스 정보
    :param request:
    :param service_id:
    :return:
    """
    if request.is_ajax() and request.method == 'POST':
        logger.info("simpleServicePOST")
        control = ControlEngine(request.session.get("ctrl_header"))
        service_map = control.get_map(service_id)
        # logger.info(service_map)

        logger.info("simpleServicePOST_end")
        if service_map.get("success"):
            try:
                if service_map["success"].get("map_link_list"):
                    map_data = service_map["success"]["map_link_list"]
                    if type(map_data) == str or type(map_data) == unicode:
                        map_data = json.loads(map_data.replace('\\"', '"'))
                    resource_list = map_data.get("resources")
                    links = map_data.get("links")
                    as_links = map_data.get("asLinks")
                    used_security_group_list = map_data.get(
                        "used_security_group_list")
                    security_types = map_data.get("security_types")
                    response = {
                        "success": {
                            "resources": resource_list,
                            "links": links,
                            "as_links": as_links
                        }
                    }
                    if used_security_group_list:
                        response[
                            "used_security_group_list"] = used_security_group_list
                    if security_types:
                        response["security_types"] = security_types
                    return JsonResponse(response)
                else:
                    return JsonResponse({
                        "error": {
                            "message": service_id + u" 연결정보가 없습니다.",
                            "response": service_map
                        }
                    })
            except Exception as e:
                return JsonResponse({
                    "error": {
                        "message": service_id + u" 연결정보가 올바르지 않습니다.",
                        "response": service_map,
                        "exception": e.message
                    }
                })
        else:
            return JsonResponse(service_map)
コード例 #2
0
def createChaining(request, service_id):
    if request.is_ajax() and request.method == 'POST':
        token = request.session.get('passToken')
        auth_url = request.session.get("auth_url")
        ctrl_header = request.session.get('ctrl_header')

        control = ControlEngine(ctrl_header)
        service_detail = control.get_service(service_id)
        response = {"success": {}, "error_msg_list": []}
        if service_detail.get("success"):
            response["success"]["service"] = service_detail["success"]
        else:
            response["error_msg_list"].append(service_detail.get("error"))

        map_data = control.get_map(service_id)
        if map_data.get("success"):
            response["success"]["links"] = map_data["success"][
                "map_link_list"].get("links")
            response["success"]["asLinks"] = map_data["success"][
                "map_link_list"].get("asLinks")
            response["success"]["resources"] = map_data["success"][
                "map_link_list"].get("resources")
        else:
            response["error_msg_list"].append(map_data.get("error"))

        neutron = NeutronRestAPI(auth_url, token)
        public_network = neutron.get_external_network(
            {"router:external": True})
        if public_network.get("success"):
            response["success"]["public_network"] = public_network[
                "success"].get("networks")
        else:
            response["error_msg_list"].append(public_network.get("error"))

        return JsonResponse(response)

    elif request.method == 'POST':
        jsonData = request.POST.get("jsonData")
        return render(request, 'service/create_chaining.html',
                      {'service_detail': jsonData})
    else:
        token = request.session.get('passToken')
        if not token:
            return redirect("/dashboard/domains/?next=/dashboard/service/" +
                            service_id + "/chaining/create")
        return render(request, 'service/create_chaining.html', {})
コード例 #3
0
def createChainingDev(request, service_id):
    if request.is_ajax() and request.method == 'POST':
        token = request.session.get('passToken')
        auth_url = request.session.get("auth_url")
        ctrl_header = request.session.get("ctrl_header")

        control = ControlEngine(ctrl_header)
        neutron = NeutronRestAPI(auth_url, token)

        service_detail, map_data = control.get_service_detail_and_link_list(
            service_id)

        # rel
        map_data = control.get_map(service_id)
        public_network = neutron.get_external_network(
            {"router:external": True})

        #dev        # {'success':{'id':"",'chain_id':""}}
        return JsonResponse({
            'success': {
                'service': {
                    "service_detail":
                    service_detail["success"]["service_detail"]
                },
                "links": map_data["success"]["map_link_list"],
                "public_network": public_network
            }
        })


#rel
# return JsonResponse({'service': service_detail["success"], 'instance_list':instanceList, "links": map_data["success"]["map_link_list"], "public_network": public_network})
    else:

        sfc_name = request.POST.get("sfc_name")
        sfc_desc = request.POST.get("sfc_desc")

        # print "~~~~~~~~~~~~~~~"
        # print sfc_name
        # print sfc_desc

        return render(request, 'service/create_chaining.html', {
            'sfc_name': sfc_name,
            'sfc_desc': sfc_desc
        })
コード例 #4
0
ファイル: views.py プロジェクト: jaehoonpaul/i2nsf-soa
def modifyService(request, service_id):
    """
    서비스 수정 페이지
    :param request:
    :param service_id:
    :return:
    """
    if request.method == 'POST':
        logger.info("detailServicePOST")
        control = ControlEngine(request.session.get("ctrl_header"))
        token = request.session.get("passToken")
        auth_url = request.session.get("auth_url")

        template = control.get_template(service_id)
        if template.get("success"):
            user_template = template["success"].get("user_template")
            user_template["service_id"] = service_id
            service_detail = {"success": {"service_detail": user_template}}
        else:
            service_detail = template
        map_data = control.get_map(service_id)

        public_network = []
        logger.info("detailServicePOST_end_public_network")
        try:
            neutron = NeutronRestAPI(auth_url, token)
            result = neutron.get_network_list()
        except:
            logger.warning("get public_network fail")
            return JsonResponse(service_detail)
        else:
            if result.get("success"):
                public_network = filter(
                    lambda network: network["router:external"],
                    result["success"]["networks"])

        if service_detail.get("success"):
            json_dic = {
                "success": service_detail["success"],
                "public_network": public_network
            }
            if map_data["success"].get("map_link_list"):
                links = map_data["success"]["map_link_list"].get("links")
                as_links = map_data["success"]["map_link_list"].get("asLinks")
                resources = map_data["success"]["map_link_list"].get(
                    "resources")
                security_types = map_data["success"]["map_link_list"].get(
                    "security_types")
                json_dic.update({
                    "links": links,
                    "asLinks": as_links,
                    "resources": resources,
                    "security_types": security_types
                })

            return JsonResponse(json_dic)
        else:
            return JsonResponse(service_detail)
    else:
        token = request.session.get('passToken')
        if not token:
            return redirect("/dashboard/domains/?next=/dashboard/service/" +
                            service_id + "/detail")
        logger.info("detailService_end")
        response = render(request, 'service/info.html', {})
        return response
コード例 #5
0
def get_security_group_info(request):
    token = request.session.get("passToken")
    domain_name = request.session.get("domain_name")
    project_name = request.session.get("project_name")
    user_name = request.session.get("user_name")
    if request.method == "POST":
        data = request.POST.get("data")
        control = ControlEngine(request.session.get("ctrl_header"))
        data = json.loads(data)
        service_id = data.get("service_id")
        server_id = data.get("server_id")
        service_info = control.get_service_vm(
            service_id)  # service_id 에 해당하는 서비스에 속한 서버 리스트 반환
        if service_info.get("success"):
            # print "=============success보안장비정보=================="
            # print "service_id: ", service_id, "server_id: ", server_id
            # print "data", data
            vmList = service_info["success"].get("vm_list")
            vm_name_list = [
                vm.get("vm_name") for vm in vmList
                if vm.get("vm_id") == server_id
            ]
            if len(vm_name_list) != 0:
                searchVmName = vm_name_list[0]
                smap_data = control.get_map(service_id)
                if smap_data.get("success"):
                    map_data = smap_data.get("success").get("map_data")
                    used_security_group_list = map_data.get(
                        "used_security_group_list"
                    )  # service_id에 해당하는 맵데이터에서 사용한 보안장비찾기
                    if used_security_group_list:
                        print "used_security_group_list: ", used_security_group_list
                        used_security_group_id_list = []
                        for used_security_group in used_security_group_list:
                            if used_security_group.get(
                                    "vm_name"
                            ) == searchVmName:  # 사용된 보안장비의 가상서버 목록중 같은 이름이 있는지 확인
                                used_security_group_id_list.append(
                                    used_security_group["security_id"]
                                )  # 위조건에 만족한 보안장비 id저장
                        # print "used_security_group_id_list: ", used_security_group_id_list
                        if len(used_security_group_id_list) > 0:
                            used_security_group_id = used_security_group_id_list[
                                0]  # 저장된 보안장비 ID로 db에서 정보찾기
                            db_nm = request.session.get("domain_db_nm")
                            db_user = request.session.get("domain_db_user")
                            db_pass = request.session.get("domain_db_pass")
                            db_ip = request.session.get("domain_db_ip")
                            db_port = request.session.get("domain_db_port")
                            conn = SOAControlDomainDBConnector(db_nm=db_nm,
                                                               db_user=db_user,
                                                               db_pass=db_pass,
                                                               db_ip=db_ip,
                                                               db_port=db_port)
                            params = (used_security_group_id)
                            try:
                                select_security_resource = conn.select(
                                    SELECT_SECURITY_RESOURCE_GROUP, params)
                                if len(select_security_resource) > 0:
                                    security_resource = select_security_resource[
                                        0]
                                    security_resource["data"] = {
                                        "nodes":
                                        security_resource.get("topology_json"),
                                        "links":
                                        security_resource.get("link_json"),
                                        "security_types":
                                        security_resource.get("security_json")
                                    }
                                    result = {
                                        "success": {
                                            "security_resource":
                                            security_resource
                                        }
                                    }
                                else:
                                    raise Exception(used_security_group_id +
                                                    _(u"은 존재하지 않습니다."))
                            except Exception as e:
                                result = {
                                    "error": {
                                        "message": str(e),
                                        "title": "error"
                                    }
                                }
                    else:
                        result = {
                            "error": {
                                "message": _("해당 서버에는 보안정보가 없습니다."),
                                "title": "error"
                            }
                        }
                else:
                    result = {
                        "error": {
                            "message": _("해당 서비스에는 보안정보가 없습니다."),
                            "title": "error"
                        }
                    }
            else:
                result = {
                    "error": {
                        "message": _("해당 서버가 없습니다."),
                        "title": "error"
                    }
                }
        elif service_info.get("error"):
            result = service_info.get("error")
        else:
            # print "=============error보안장비정보=================="
            result = {"error": {"message": _(u"잘못된 아이디"), "title": "error"}}

        return JsonResponse(result)
    else:
        response = render('404.html', {})
        response.status_code = 404
        return response
コード例 #6
0
ファイル: views.py プロジェクト: jaehoonpaul/i2nsf-soa
def recover_vm(recovery_server_info, ctrl_header, domain):
    """
    가상머신 장애 복구 process
    :param recovery_server_info:
    :param ctrl_header:
    :param domain:
    :return:
    """
    floating_ip_id = recovery_server_info.get("floating_ip_id")
    vm_id = recovery_server_info.get("vm_id")
    vm_name = recovery_server_info.get("vm_name")
    service_id = recovery_server_info.get("service_id")
    token = ctrl_header.get("X-Auth-Token")
    auth_url = ctrl_header.get("X-Host-Uri")
    project_name = ctrl_header.get("X-Tenant-Name")
    result = {}
    err_msg_list = []
    neutron = NeutronRestAPI(auth_url, token)
    nova = NovaRestAPI(auth_url, token)
    # floatingip 필요한 정보 추출, 삭제
    result_info_or_delete_floating_ip, floating_ip = get_floating_info_and_delete(neutron, floating_ip_id)
    # port 필요한 정보 추출, 삭제
    result_info_or_delete_port_list, port_list = get_port_list_and_delete(neutron, vm_id)
    # vm 삭제
    result_delete_server = nova.delete_server(vm_id)
    if result_info_or_delete_floating_ip:
        err_msg_list.append(result_info_or_delete_floating_ip)
    err_msg_list.extend(result_info_or_delete_port_list)
    if result_delete_server.get("error"):
        err_msg_list.append(result_delete_server["error"])

    # error 가 없으면
    if len(err_msg_list) < 1:
        control = ControlEngine(ctrl_header)
        result_template = control.get_template(service_id)
        result_map = control.get_map(service_id)

        if result_template.get("success") and result_map.get("success"):
            template = get_recovery_template(result_template["success"].get("user_template"), vm_name, port_list)
            map_data = get_recovery_map(result_map["success"], vm_name)

            result_update_map = control.update_map(service_id, map_data.replace('\\', ''))
            result_update_service = control.update_service(template, service_id)
            if result_update_service.get("success"):
                result_check = check_update_status(control, auth_url, domain, project_name, service_id)
                if result_check.get("success"):
                    vm_list = result_check["success"]["service_detail"]["vm_list"]
                    recovery_vm_name = vm_name
                    if "_recovery" in vm_name:
                        p = re.compile("_recovery\[(\d)\]")
                        m = p.search(vm_name)
                        if m:
                            recovery_cnt = m.group(1)
                            recovery_cnt = str(int(recovery_cnt) + 1)
                            recovery_vm_name = vm_name.replace("_recovery[" + m.group(1) + "]",
                                                               "_recovery[" + recovery_cnt + "]")
                    else:
                        recovery_vm_name = vm_name + "_recovery[1]"
                    vm_id = [vm.get("vm_id") for vm in vm_list if vm.get("vm_name") == recovery_vm_name][0]
                    neutron.update_token(result_check["success"]["ctrl_header"].get("X-Auth-Token"))
                    result_create_floting_ip = create_floating_ip_for_recovery(neutron, recovery_server_info, vm_id)
                    if result_create_floting_ip.get("error"):
                        err_msg_list.extend(result_create_floting_ip["error"].get("err_msg_list"))
                    else:
                        result["success"] = True
                else:
                    err_msg_list.append(result_check.get("error"))
            if result_update_service.get("error"):
                err_msg_list.append(result_update_service["error"])
            if result_update_map.get("error"):
                err_msg_list.append(result_update_map["error"])
        if result_template.get("error"):
            err_msg_list.append(result_template["error"])
        if result_map.get("error"):
            err_msg_list.append(result_map["error"])
    if len(err_msg_list) > 0:
        result["error"] = {"err_msg_list": err_msg_list}
    return result