Example #1
0
def detailService(request, service_id):
    token = request.session.get('passToken')
    ctrl_header = request.session.get("ctrl_header")
    if request.method == "POST" and request.is_ajax():
        control = ControlEngine(ctrl_header)
        # control = ControllerEngine()  # TODO: debugging용
        service = control.get_service(service_id)
        return JsonResponse(service)
    else:
        if not token:
            response = redirect(
                "/dashboard/domains/?next=/dashboard/telemeter/metering/" +
                service_id)
        else:
            control = ControlEngine(ctrl_header)
            service = control.get_service(service_id)
            if service.get("success"):
                service_detail = service["success"].get("service_detail")
                servers = service_detail.get("vm_list")
                response = render(request, 'telemeter/info.html', {
                    "servers": servers,
                    "service_name": service_detail.get("name")
                })
            else:
                response = render(request, 'telemeter/info.html',
                                  {"error": service})
        logger.info("detailService_end")
        return response
Example #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', {})
Example #3
0
def synchronize_soam(request, service_info, data_dic):
    # 관리포탈 동기화용
    conn = SOAControlDBConnector.getInstance()

    user_name = request.session.get("user_name")
    # 도메인명, 프로젝트 아이디, 서비스 아이디, 서비스명, 서비스 상태,
    # 동기화 상태{동기화전 I, 동기화중 S, 동기화완료 C, 동기화실패 F}, 동기화 날짜
    auth_url = request.session.get("auth_url")
    project_id = request.session.get("project_id")
    params = (auth_url, project_id, service_info.get("service_id"),
              service_info.get("name"), service_info.get("status"), user_name,
              user_name)

    logger.debug("[soac db insert service for sync]")
    # conn.insert(INSERT_SOAC_SERVICE, params)  # sync를 위해 soacDB에 넣기

    control = ControlEngine(request.session.get("ctrl_header"))
    s_result = control.get_service(service_info.get("service_id"))
    if s_result.get("success"):
        # used_security_group_list 상세정보 조회, security_group_list 생성
        select_security_groups = conn.select(
            SELECT_SECURITY_RESOURCE_GROUP_LIST)

        security_groups = data_dic.get("used_security_group_list")
        security_group_list = []
        for security_group in security_groups:
            for select_security_group in select_security_groups:
                if select_security_group.get(
                        "security_id") == security_group.get("security_id"):
                    select_security_group[
                        "security_type"] = security_group.get("security_type")
                    security_group_list.append(select_security_group)

        m_conn = SOAManagerDBConnector.getInstance()
        # security_group
        # TODO: seccurity_type => 관리포탈에서 코드조회후 코드로 넣을것
        # TODO: manufacture_icon
        # TODO: 보안장비가 이미 등록되 있을시 무시
        for security_group in security_group_list:
            params = (security_group.get("security_type"),
                      security_group.get("security_name"),
                      security_group.get("security_icon"),
                      security_group.get("manufacture_name"),
                      security_group.get("manufacture_icon"),
                      security_group.get("software_version"),
                      security_group.get("description"))

            logger.debug("[soam db insert equipment]")
            m_conn.insert(INSERT_SOAM_EQUIPMENT, params)

        params = (auth_url, project_id, service_info.get("service_id"),
                  service_info.get("name"),
                  service_info.get("service_description"))
        logger.debug("[soam db insert service]")
        m_conn.insert_service(params, data_dic)

        scheduler = Scheduler()

        def check_service_status():
            logger.debug("[check service status]")
            create_status = False
            # 서비스 상태 확인
            result = control.get_service(service_info.get("service_id"))
            if result.get("success"):
                try:
                    service_template = result["success"].get("service_detail")

                    # 생성중이면 1분뒤 다시 확인
                    if service_template.get("status") == "CREATE_IN_PROGRESS":
                        logger.debug("[wait CREATE_IN_PROGRESS]")
                        return
                    # 생성 완료면 자원 데이터 저장
                    elif service_template.get("status") == "CREATE_COMPLETE":
                        logger.debug("[soam db insert resources]")
                        params = (auth_url, project_id,
                                  service_info.get("service_id"),
                                  service_info.get("name"),
                                  service_info.get("service_description"))
                        m_conn.insert_service_resource(params,
                                                       service_template,
                                                       request)

                    # 생성 실패면
                    else:
                        pass

                    # 생성 완료 or 실패 시 soac db 수정
                    logger.debug("[soac db update service for sync complete]")
                    # params = (service_template.get("name"), service_template.get("status"), "C", user_name, auth_url,
                    #           request.session.get("project_name"), service_info.get("service_id"))
                    # conn.update(UPDATE_SOAC_SERVICE, params)
                    scheduler.kill_scheduler("check_service")
                except Exception as e:
                    error_str = """
                    Title: {}
                    Traceback: {}
                    """.format(e.message,
                               traceback.format_exc().strip())
                    logger.error(error_str)
                    scheduler.kill_scheduler("check_service")
            else:
                scheduler.kill_scheduler("check_service")

        logger.debug("[wait CREATE_IN_PROGRESS]")
        scheduler.schedule_interval(check_service_status,
                                    "check_service",
                                    seconds=30)
Example #4
0
def synchronize_floating_server_host(request):
    if request.method == 'POST' and request.is_ajax():
        token = request.session.get("passToken")
        auth_url = request.session.get("auth_url")
        project_id = request.session.get("project_id")
        auth = ZabbixRestAPI.get_auth("Admin", "zabbix")
        zabbix = ZabbixRestAPI(auth)
        neutron = NeutronRestAPI(auth_url, token)
        err_msg_list = []
        # openstack의 floating_ip 목록 가져오기
        q = {"project_id": project_id}
        result_floating_ips = neutron.get_floating_ips(None, q)
        create_host_flag = False
        # host목록 가져오기
        result_hosts = zabbix.get_hosts(output=["hostid", "host", "status", "name"])
        if result_hosts.get("result") and result_floating_ips.get("success"):
            floating_ips = result_floating_ips["success"].get("floatingips")  # 중요1
            hosts = result_hosts.get("result")
            # floating_ips 목록이 Zabbix에 전부 등록되있는지 확인
            # TODO: zabbix에 등록된 host중 floatingip연결을 해제시키거나 삭제된 server가 있으면 제거
            recovery_list = []  # 중요3
            for floating_ip in floating_ips:
                if floating_ip.get("port_id"):
                    # floatingip - port 조회
                    result_port = neutron.getPort(floating_ip["port_id"])
                    if result_port.get("success"):
                        port = result_port["success"].get("port")
                        floating_ip["port_details"] = port
                        server_id = port.get("device_id")
                        host_names = [temp_host.get("host") for temp_host in hosts]
                        # 각 가상머신의 호스트가 등록되있지 않다면 등록 중요3
                        if server_id and "compute" in port.get("device_owner") and server_id not in host_names:
                            # floatingip - port - device(서버) 조회
                            recovery_info = {
                                "server": {
                                    "vm_id": server_id,
                                    "floating_ip_id": floating_ip.get("id"),
                                    "floating_ip_address": floating_ip.get("floating_ip_address"),
                                    "fixed_ips": port.get("fixed_ips")
                                },
                                "auth_url": auth_url,
                                "project_name": request.session.get("project_name")
                            }
                            recovery_list.append(recovery_info)
                    if result_port.get("error"):
                        err_msg_list.append(result_port["error"])

            if len(recovery_list) > 0:
                # 서비스 리스트 조회 -> 서비스 조회 -> vm_list에서 같은아이디 있는지 확인
                ctrl_header = request.session.get("ctrl_header")
                control = ControlEngine(ctrl_header)
                result_service_list = control.get_service_list()
                if result_service_list.get("success"):
                    for service in result_service_list["success"].get("service_list"):
                        service_id = service.get("service_id")
                        result_service = control.get_service(service_id)
                        if result_service.get("success"):
                            for recovery_info in recovery_list:
                                for vm in result_service["success"]["service_detail"].get("vm_list"):
                                    # 서비스내에 해당 server가 있는지 확인
                                    if vm.get("vm_id") == recovery_info["server"].get("vm_id"):
                                        recovery_info["server"]["vm_name"] = vm.get("vm_name")
                                        recovery_info["server"]["service_id"] = service_id
                        if result_service.get("error"):
                            err_msg_list.append(result_service["error"])
                if result_service_list.get("error"):
                    err_msg_list.append(result_service_list["error"])
                            # service_list 조회끝
            for recovery_info in recovery_list:
                logger.debug("\n\n\n\n" + json.dumps(recovery_info) + "\n\n\n\n")
                # hostgroup 조회
                result_hostgroup = zabbix.get_hostgroups({"name": "Linux servers"}, ["groupid"])
                if result_hostgroup.get("result"):
                    hostgroup_id = result_hostgroup["result"][0].get("groupid")
                    result_create_host = create_host(request, zabbix, recovery_info, hostgroup_id)
                    if len(result_create_host) < 1:
                        create_host_flag = True
                    else:
                        err_msg_list.append(result_create_host)
                if not result_hostgroup.get("result"):
                    err_msg_list.append(result_hostgroup)

            # 호스트 생성시 호스트 목록 다시조회
            if create_host_flag:
                result_hosts = zabbix.get_hosts(output=["hostid", "host", "status", "name"])
                if result_hosts.get("result"):
                    hosts = result_hosts["result"]
        if not result_hosts.get("result"):
            err_msg_list.append(result_hosts)
        if result_floating_ips.get("error"):
            err_msg_list.append(result_floating_ips["error"])
        return JsonResponse({"success": {"err_msg_list": err_msg_list}})