def delete(self, request): """ { "groups": [ { "uuid": "f38c048e-59fc-11ea-84fd-000c295dd728", "name": "group1" } ] } """ try: data = json.loads(request.body) groups = data.get('groups', []) names = list() for group in groups: names.append(group['name']) ret = self.delete_groups(groups) log_user = { "id": request.user.id if request.user.id else 1, "user_name": request.user.username, "user_ip": request.META.get('HTTP_X_FORWARDED_FOR') if request.META.get('HTTP_X_FORWARDED_FOR') else request.META.get("REMOTE_ADDR") } msg = "删除用户分组'%s'" % ('/'.join(names)) insert_operation_log(msg, ret['msg'], log_user, module="user_group") except Exception as e: logger.error("delete education group error:%s", e, exc_info=True) ret = get_error_result("GroupDeleteError") msg = "删除用户分组'%s'" % ('/'.join(names)) insert_operation_log(msg, ret['msg'], log_user, module="user_group") return JsonResponse(ret, status=200, json_dumps_params={'ensure_ascii': False}) return JsonResponse(ret, json_dumps_params={'ensure_ascii': False})
def cancel_upload_check(self, param, log_user=None): """ :param param: { "name": "template1", "uuid": "655a1b9c-592a-11ea-b491-000c295dd728" } :return: """ logger.info("voi template cancel upload") uuid = param.get('uuid') if not voi_education_model.YzyVoiTemplate.objects.filter( uuid=uuid, deleted=False): logger.info("voi template cancel_upload error, it is not exists") return get_error_result("TemplateNotExist", name=param['name']) ret = server_post("/api/v1/voi/template/cancel_upload", param) logger.info("voi template cancel_upload end:%s", ret) return ret
def edit_check(self, param, log_user=None): """ :param param: { "name": "template1", "uuid": "" } :return: """ logger.info("edit template %s begin", param) uuid = param.get('uuid') if not education_model.YzyInstanceTemplate.objects.filter(uuid=uuid, deleted=False): logger.info("edit template error, it is not exists") return get_error_result("TemplateNotExist", name=param['name']) ret = server_post("/api/v1/template/edit", param) logger.info("edit template url end:%s", ret) return ret
def attach_source_check(self, param, log_user=None): """ :param param: { "name": "template1", "uuid": "655a1b9c-592a-11ea-b491-000c295dd728", "iso_uuid": "" } :return: """ logger.info("template attach_source") uuid = param.get('uuid') if not education_model.YzyInstanceTemplate.objects.filter(uuid=uuid, deleted=False): logger.info("template attach_source error, it is not exists") return get_error_result("TemplateNotExist", name=param['name']) ret = server_post("/api/v1/template/attach_source", param) logger.info("template attach_source end:%s", ret) return ret
def rollback_check(self, param, log_user=None): """ :param param: { "rollback_version": 5, "cur_version": 6, "name": "", "uuid": "" } :return: """ logger.info("voi template %s rollback", param['name']) if not voi_education_model.YzyVoiTemplate.objects.filter( uuid=param['uuid'], deleted=False): logger.info("voi template rollback error, it is not exists") return get_error_result("TemplateNotExist", name=param['name']) ret = server_post("/api/v1/voi/template/rollback", param) logger.info("voi rollback template end:%s", ret) return ret
def reboot_templates(self, templates): if len(templates) == 1: return self.reboot_template(templates[0]) success_num = 0 failed_num = 0 all_task = list() with ThreadPoolExecutor(max_workers=constants.MAX_THREADS) as executor: for template in templates: future = executor.submit(self.reboot_template, template) all_task.append(future) for future in as_completed(all_task): result = future.result() if result.get('code') != 0: failed_num += 1 else: success_num += 1 return get_error_result("Success", { "success_num": success_num, "failed_num": failed_num })
def resync_check(self, param, log_user=None): """ :param param: { "ipaddr": "172.16.1.15", "role": 2, "path": "/opt/slow", "image_id": "c2133168-7aca-11ea-994b-000c29e84b9c", "version": 2 } :return: """ logger.info("resync template image:%s", param['image_id']) image_id = param.get('image_id') if not education_model.YzyInstanceDeviceInfo.objects.filter(uuid=image_id, deleted=False): logger.info("resync template image error, it is not exists") return get_error_result("ImageNotFound") ret = server_post("/api/v1/template/resync", param) logger.info("resync template image end:%s", ret) return ret
def delete(self, request): _data = request.data ids = _data.get("ids") del_range = _data.get("del_range") query_set = YzyWarningLog.objects if ids and isinstance(ids, list): query_set = query_set.filter(number_id__in=ids) warnings = query_set.all() elif del_range in operation_log_mer.del_ranges: _date = operation_log_mer.to_date(del_range) tz = timezone.get_default_timezone() utc_date = _date.astimezone(tz) query_set = query_set.filter(created_at__lt=utc_date) warnings = query_set.all() else: warnings = [] for warning in warnings: warning.delete() ret = get_error_result() return JsonResponse(ret)
def inactive_desktops(self, desktops): if len(desktops) == 1: return self.inactive_desktop(desktops[0]) success_num = 0 failed_num = 0 all_task = list() with ThreadPoolExecutor(max_workers=constants.MAX_THREADS) as executor: for desktop in desktops: future = executor.submit(self.inactive_desktop, desktop) all_task.append(future) for future in as_completed(all_task): result = future.result() if result.get('code') != 0: failed_num += 1 else: success_num += 1 return get_error_result("Success", { "success_num": success_num, "failed_num": failed_num })
def enable_users(self, users): if len(users) == 1: return self.enable_user(users[0]) success_num = 0 failed_num = 0 all_task = list() with ThreadPoolExecutor(max_workers=constants.MAX_THREADS) as executor: for user in users: future = executor.submit(self.enable_user, user) all_task.append(future) for future in as_completed(all_task): result = future.result() if result.get('code') != 0: failed_num += 1 else: success_num += 1 return get_error_result("Success", { "success_num": success_num, "failed_num": failed_num })
def delete(self, request): """ { "tasks": [ { "uuid": "", "name": "group1" } ] } """ try: data = request.data tasks = data.get('tasks', []) names = list() for task in tasks: names.append(task['name']) ret = CrontabTaskManager().delete_crontab_task(tasks) log_user = { "id": request.user.id if request.user.id else 1, "user_name": request.user.username, "user_ip": request.META.get('HTTP_X_FORWARDED_FOR') if request.META.get('HTTP_X_FORWARDED_FOR') else request.META.get("REMOTE_ADDR") } msg = "删除桌面定时任务'%s'" % ('/'.join(names)) insert_operation_log(msg, ret['msg'], log_user, module="crontab") except Exception as e: logger.error("delete desktop crontab task error:%s", e, exc_info=True) ret = get_error_result("GroupDeleteError") msg = "删除桌面定时任务'%s'" % ('/'.join(names)) insert_operation_log(msg, ret['msg'], log_user, module="crontab") return JsonResponse(ret, status=200, json_dumps_params={'ensure_ascii': False}) return JsonResponse(ret, json_dumps_params={'ensure_ascii': False})
def put(self, request): try: data = request.data log_user = { "id": request.user.id if request.user.id else 1, "user_name": request.user.username, "user_ip": request.META.get('HTTP_X_FORWARDED_FOR') if request.META.get('HTTP_X_FORWARDED_FOR') else request.META.get("REMOTE_ADDR") } result = LogSetupManager().update_warn_setup(data, log_user) except Exception as e: logger.error("update warn setup record fail:%s", e, exc_info=True) ret = get_error_result("UpdateWarnSetupFailError") return JsonResponse(ret, status=200, json_dumps_params={'ensure_ascii': False}) return JsonResponse(result)
def delete(self, request, *args, **kwargs): _data = request.data ids = _data.get("ids") del_range = _data.get("del_range") query_set = education_model.YzyOperationLog.objects if ids and isinstance(ids, list): query_set = query_set.filter(id__in=ids) operates = query_set.all() elif del_range in self.del_ranges: _date = self.to_date(del_range) tz = timezone.get_default_timezone() utc_date = _date.astimezone(tz) query_set = query_set.filter(created_at__lt=utc_date) operates = query_set.all() else: operates = [] # operates = query_set.all() for i in operates: i.delete() ret = get_error_result() return JsonResponse(ret)
def delete(self, request): try: data = json.loads(request.body) log_user = { "id": request.user.id if request.user.id else 1, "user_name": request.user.username, "user_ip": request.META.get('HTTP_X_FORWARDED_FOR') if request.META.get('HTTP_X_FORWARDED_FOR') else request.META.get("REMOTE_ADDR") } ret = InstanceManager().delete_check(data, log_user) except Exception as e: logger.error("delete instance error:%s", e, exc_info=True) ret = get_error_result("InstanceDeleteFail", name='') return JsonResponse(ret, status=200, json_dumps_params={'ensure_ascii': False}) return JsonResponse(ret, json_dumps_params={'ensure_ascii': False})
def multi_create_check(self, param, log_user=None): """ :param param: { "group_uuid": "00d4e728-59f8-11ea-972d-000c295dd728", "prefix": "ctx", "postfix": 2, "postfix_start": 1, "user_num": 5, "passwd": "12345", "enabled": 1 } :return: """ group_uuid = param.get('group_uuid') logger.info("multi create group user") if not education_model.YzyGroup.objects.filter(uuid=group_uuid, deleted=False): logger.info("create user failed,the group not exists") return get_error_result("GroupNotExists", name='') ret = server_post("/api/v1/group/user/multi_create", param) return ret
def delete(self, request): """ 需要支持批量删除 { "templates": [ { "name": "template2", "uuid": "f309f8a2-5c51-11ea-9b12-000c295dd728" }, { "name": "template1", "uuid": "655a1b9c-592a-11ea-b491-000c295dd728" } ] } """ try: data = request.data templates = data.get('templates', []) names = list() for template in templates: names.append(template['name']) ret = VoiTemplateManager().delete_templates(templates) log_user = { "id": request.user.id if request.user.id else 1, "user_name": request.user.username, "user_ip": request.META.get('HTTP_X_FORWARDED_FOR') if request.META.get('HTTP_X_FORWARDED_FOR') else request.META.get("REMOTE_ADDR") } msg = "删除模板'%s'" % ('/'.join(names)) insert_operation_log(msg, ret['msg'], log_user, module="voi_template") except Exception as e: logger.error("delete voi template error:%s", e, exc_info=True) ret = get_error_result("TemplateDeleteFail", name='') msg = "删除模板'%s'" % ('/'.join(names)) insert_operation_log(msg, str(e), log_user, module="voi_template") return JsonResponse(ret, status=200, json_dumps_params={'ensure_ascii': False}) return JsonResponse(ret, json_dumps_params={'ensure_ascii': False})
def put(self, request): try: logger.info("update crontab task") data = request.data log_user = { "id": request.user.id if request.user.id else 1, "user_name": request.user.username, "user_ip": request.META.get('HTTP_X_FORWARDED_FOR') if request.META.get('HTTP_X_FORWARDED_FOR') else request.META.get("REMOTE_ADDR") } ret = CrontabTaskManager().update_crontab(data, log_user) except Exception as e: logger.error("update crontab task error:%s", e, exc_info=True) ret = get_error_result("CrontabTaskUpdateError", name=data.get('name', '')) return JsonResponse(ret, status=200, json_dumps_params={'ensure_ascii': False}) return JsonResponse(ret, json_dumps_params={'ensure_ascii': False})
def create_check(self, param, log_user=None): """ :param param: { "desktop_uuid": "ea2bbe72-593c-11ea-9631-000c295dd728", "desktop_name": "desktop1", "desktop_type": 1, "instance_num": 2, "create_info": { "172.16.1.11": 2 } } :return: """ desktop_uuid = param.get('desktop_uuid', '') logger.info("create instance in desktop group:%s", desktop_uuid) if not education_model.YzyDesktop.objects.filter(uuid=desktop_uuid, deleted=False): logger.info("desktop group not exists") return get_error_result("DesktopNotExist", name=param['desktop_name']) ret = server_post("/api/v1/instance/create", param) logger.info("create instance in desktop group end:%s", ret) return ret
def create_check(self, param, log_user=None): """ :param param: { "desktop_uuid": "a7f2ba44-593f-11ea-b458-000c295dd728", "desktop_name": "desktop1", "desktop_type": 2, "instance_num": 5, "create_info": { "172.16.1.11": 5 } } :return: """ desktop_uuid = param.get('desktop_uuid', '') logger.info("create instance in desktop group:%s", desktop_uuid) if not personal_model.YzyPersonalDesktop.objects.filter( uuid=desktop_uuid, deleted=False): logger.info("desktop group not exists") return get_error_result("DesktopNotExist", name=param['desktop_name']) ret = server_post("/api/v1/instance/create", param) logger.info("create instance in desktop group success") return ret
def create_group(self, data, log_user=None): """ :param data: { "name": "group2", "group_type": 2, "desc": "this is group2", "start_ip": "172.16.1.60", "end_ip": "172.16.1.80" } :return: """ # if education_model.YzyGroup.objects.filter(deleted=False, group_type=data.get("group_type")).count() > 49: # logger.info("create personal group error, the quantity must not exceed 50") # return get_error_result("GroupCreationOverflow") if education_model.YzyGroup.objects.filter(name=data['name'], group_type=2, deleted=False): logger.info("create personal group error, it's already exists") return get_error_result("GroupAlreadyExists", name=data['name']) ret = server_post("/api/v1/group/create", data) return ret
def put(self, request): try: logger.info("update personal desktop group") data = json.loads(request.body) log_user = { "id": request.user.id if request.user.id else 1, "user_name": request.user.username, "user_ip": request.META.get('HTTP_X_FORWARDED_FOR') if request.META.get('HTTP_X_FORWARDED_FOR') else request.META.get("REMOTE_ADDR") } ret = DesktopManager().update_desktop(data, log_user) except Exception as e: logger.error("update personal desktop group error:%s", e, exc_info=True) ret = get_error_result("DesktopUpdateFail", name='') return JsonResponse(ret, status=200, json_dumps_params={'ensure_ascii': False}) return JsonResponse(ret, json_dumps_params={'ensure_ascii': False})
def get(self, request, *args, **kwargs): result = LicenseManager().info() ret = get_error_result("Success", result) return JsonResponse(ret)
def param_error(error): return JsonResponse(get_error_result(error), status=200, json_dumps_params={'ensure_ascii': False})
def create_group(self, data, log_user=None): """ :param data: { "name": "group1", "group_type": 1, "desc": "this is group2", "start_ip": "172.16.1.40", "end_ip": "172.16.1.60", "dhcp": { "start_ip": "172.16.1.40", "end_ip": "172.16.1.54", "netmask": "255.255.255.0", "gateway": "172.16.1.254", "dns1": "8.8.8.8", "dns2": "", "exclude": [ {"start": "172.16.1.24", "end": "172.16.1.24"}, {"start": "172.16.1.24", "end": "172.16.1.24"} ] } } :return: """ if voi_education_model.YzyVoiGroup.objects.filter(name=data['name'], deleted=False): logger.error("create voi education group error,it's already exists") return get_error_result("GroupAlreadyExists", name=data['name']) groups = voi_education_model.YzyVoiGroup.objects.filter(group_type=1, deleted=False) for group in groups: flag_a = ipaddress.ip_network(data['start_ip']).compare_networks(ipaddress.ip_network(group.start_ip)) flag_b = ipaddress.ip_network(group.end_ip).compare_networks(ipaddress.ip_network(data['start_ip'])) flag_c = ipaddress.ip_network(data['end_ip']).compare_networks(ipaddress.ip_network(group.start_ip)) flag_d = ipaddress.ip_network(group.end_ip).compare_networks(ipaddress.ip_network(data['end_ip'])) flag_e = ipaddress.ip_network(group.start_ip).compare_networks(ipaddress.ip_network(data['start_ip'])) flag_f = ipaddress.ip_network(data['end_ip']).compare_networks(ipaddress.ip_network(group.end_ip)) if (flag_a >= 0 and flag_b >= 0) or (flag_c >= 0 and flag_d >= 0) or (flag_e >= 0 and flag_f >= 0): return get_error_result("IpAddressConflictError") # # dhcp 参数判断 # dhcp = data.get("dhcp") # start_ip = dhcp.get("start_ip") # end_ip = dhcp.get("end_ip") # netmask = dhcp.get("netmask") # gateway = dhcp.get("gateway") # if (dhcp and start_ip and end_ip and netmask and gateway): # # 配置启用dhcp # # pass # for group in groups: # group_dhcp = group.dhcp # if group_dhcp: # group_dhcp_dict = json.loads(group_dhcp) # flag_a = ipaddress.ip_network(dhcp['start_ip']).compare_networks( # ipaddress.ip_network(group_dhcp_dict["start_ip"])) # flag_b = ipaddress.ip_network(group_dhcp_dict["end_ip"]).compare_networks( # ipaddress.ip_network(dhcp['start_ip'])) # flag_c = ipaddress.ip_network(dhcp['end_ip']).compare_networks( # ipaddress.ip_network(group_dhcp_dict["start_ip"])) # flag_d = ipaddress.ip_network(group_dhcp_dict["end_ip"]).compare_networks( # ipaddress.ip_network(dhcp['end_ip'])) # flag_e = ipaddress.ip_network(group_dhcp_dict["start_ip"]).compare_networks( # ipaddress.ip_network(dhcp['start_ip'])) # flag_f = ipaddress.ip_network(dhcp['end_ip']).compare_networks( # ipaddress.ip_network(group_dhcp_dict["end_ip"])) # if (flag_a >= 0 and flag_b >= 0) or (flag_c >= 0 and flag_d >= 0) or (flag_e >= 0 and flag_f >= 0): # return get_error_result("DhcpIpAddressConflictError") # temp_ip_range = list() # exclude = dhcp.get("exclude", []) # for item in exclude: # start = item["start"] # end = item["end"] # if (ipaddress.IPv4Address(start) < ipaddress.IPv4Address(dhcp["start_ip"]) # or ipaddress.IPv4Address(end) > ipaddress.IPv4Address(dhcp["end_ip"])): # logger.error("dhcp ip exclude error: %s"% item) # return get_error_result("DhcpIpAddressConflictError") # # if not temp_ip_range: # temp_ip_range.append(item) # continue # for range in temp_ip_range: # _start = range["start"] # _end = range["end"] # if ((ipaddress.IPv4Address(start) >= ipaddress.IPv4Address(_start)) # and (ipaddress.IPv4Address(start) <= ipaddress.IPv4Address(_end))): # logger.error("dhcp ip exclude error %s"% range) # return get_error_result("DhcpIpAddressConflictError") # # if ((ipaddress.IPv4Address(start) >= ipaddress.IPv4Address(_start)) # and (ipaddress.IPv4Address(start) <= ipaddress.IPv4Address(_end))): # logger.error("dhcp ip exclude error %s"% range) # return get_error_result("DhcpIpAddressConflictError") ret = server_post("/api/v1/voi/group/create", data) return ret
def get_current_date(self, request): """ 获取服务器的当前日期 """ today = time.strftime("%Y/%m/%d") return JsonResponse(get_error_result(data=today), status=200, json_dumps_params={'ensure_ascii': False})