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
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', {})
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)
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}})