def delete_resource_pool(self, uuids): logging.info("start delete resource pools: %s" % (uuids)) ret = get_error_result("Success") try: for uuid in uuids: resource_pool = YzyResourcePools.objects.filter( deleted=False).get(uuid=uuid) node_count = YzyNodes.objects.filter( deleted=False, resource_pool=resource_pool).count() image_count = YzyBaseImages.objects.filter( deleted=False, resource_pool=resource_pool).count() template_count = YzyInstanceTemplate.objects.filter( deleted=False, pool=resource_pool).count() if node_count > 0 or image_count > 0: logger.error("delete resource pool fail") return get_error_result("ResourcePoolHaveNodeDeleteFail") if template_count > 0: logger.error("delete resource pool fail") return get_error_result( "ResourcePoolHaveTemplateDeleteFail") else: ret = server_post("/api/v1/resource_pool/delete", {"uuid": uuid}) if ret.get("code", -1) != 0: return get_error_result("ResourcePoolDeleteFail") else: return get_error_result("Success") logging.info("end delete resource pools operate!") msg = "删除资源池 %s" % ('/'.join(uuids)) insert_operation_log(msg, ret['msg']) return get_error_result("Success") except Exception as e: return get_error_result("OtherError")
def put(self, request, *args, **kwargs): try: _data = request.data user_id = _data.get("user_id") user = self.get_object(user_id) if not user: logger.error("admin user not exist: %s" % user_id) ret = get_error_result("AdminUserNotExist") return ret # username = _data.get("username") or None real_name = _data.get("real_name") or None password = _data.get("password") or None role_id = _data.get("role") or None desc = _data.get("desc", "") or None email = _data.get("email", "") or None # if username: user.username = username if real_name is not None: user.real_name = real_name if password: user.password = create_md5(password) if role_id: user.role_id = role_id if desc is not None: user.desc = desc if email is not None: user.email = email user.save() ret = get_error_result() msg = "修改管理员用户信息: %s" % user_id insert_operation_log(msg, ret) return JSONResponse(ret) except Exception as e: logger.error("", exc_info=True) return JSONResponse(get_error_result("OtherError"))
def delete_terminal(self, data): """ 删除终端 """ try: mac_list, name_list = self.get_terminal_mac_name_list(data) except Exception as e: logger.error("", exc_info=True) return get_error_result("ParamError") mac_list_str = ",".join(mac_list) # 提交终端服务接口 req_data = { "handler": "WebTerminalHandler", "command": "delete", "data": { "mac_list": mac_list_str, } } ret = terminal_post("/api/v1/terminal/task", req_data) msg = "删除终端 %s" % "/".join(name_list) insert_operation_log(msg, ret["msg"]) if ret.get("code", -1) != 0: logger.error("terminal close fail: %s" % mac_list_str) return get_error_result("TerminalCloseOperateError") logger.info("terminal delete success!!! %s" % mac_list_str) return get_error_result("Success")
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="voi_education_group") logger.info("delete voi group end") 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="voi_education_group") return JsonResponse(ret, status=200, json_dumps_params={'ensure_ascii': False}) return JsonResponse(ret, json_dumps_params={'ensure_ascii': False})
def post(self, request, *args, **kwargs): ret = get_error_result("Success") _data = request.data password = _data.get("password") if not password: # ex = Exception("not input password!") logger.error("create admin user error: not password input") ret = get_error_result("NotPasswordInputError") # return JSONResponse(ret) else: _data.update({"password": create_md5(password)}) ser = YzyAdminUserSerializer(data=_data, context={'request': request}) if ser.is_valid(): ser.save() # return Response(ser.data, status=status.HTTP_201_CREATED) # return JSONResponse() else: msg = ser.errors ret = get_error_result("ParamError") ret["msg"] = msg logger.info("create admin user: %s" % ret) msg = "创建管理员用户: %s" % _data.get("username") insert_operation_log(msg, ret) return JSONResponse(ret)
def start_check(self, param, log_user=None): """ :param param: { "desktops": [ { "name": "desktop1", "uuid": "" }, ... ] } :return: """ desktops = param.get('desktops', []) names = list() for desktop in desktops: names.append(desktop['name']) ret = self.start_dekstops(desktops) msg = "教学桌面组'%s'开机" % ('/'.join(names)) insert_operation_log(msg, ret['msg'], log_user, module="education_desktop") return ret
def start_sort_terminal(self, data): group_uuid = data.get("group_uuid", "") start_num = data.get("index_start") if not (group_uuid and start_num) or not isinstance(start_num, int): logger.error("terminal sort number error: param error") return get_error_result("ParamError") # 判断组的存在 group = self.get_object_by_uuid(YzyGroup, group_uuid) if not group: logger.error("terminal sort number error: %s group not exist" % group_uuid) return get_error_result("TerminalWebGroupNotExist") req_data = { "handler": "WebTerminalHandler", "command": "terminal_order", "data": { "group_uuid": group_uuid, "start_num": start_num } } ret = terminal_post("/api/v1/terminal/task", req_data) msg = "分组 %s 终端排序" % group.name insert_operation_log(msg, ret["msg"]) if ret.get("code", -1) != 0: logger.error("terminal update name fail") return ret logger.info("terminal sort number success!!! %s" % group.name) return ret
def delete_group_check(self, param, log_user=None): """ :param param: { "desktop_uuid": "ea2bbe72-593c-11ea-9631-000c295dd728", "desktop_name": "desktop1", "groups": [ { "uuid": "", "group_name": "" } ] } :return: """ groups = param.get('groups', []) names = list() for group in groups: names.append(group['group_name']) ret = self.delete_groups(param) msg = '个人桌面组"%s"移除绑定用户组"%s"' % (param['desktop_name'], '、'.join(names)) insert_operation_log(msg, ret['msg'], log_user, module="personal_desktop") return ret
def shutdown_node(self, data): """ data : [ {"uuid": "xxxxxxx", "hostname": "xxxxxx"}, {"uuid": "xxxxxxx", "hostname": "xxxxxx"}, {"uuid": "xxxxxxx", "hostname": "xxxxxx"} ] :param data: :return: """ names = [] ret = get_error_result("Success") for node in data: uuid = node.get("uuid") hostname = node.get("hostname") names.append(hostname) obj = self.get_object_by_uuid(YzyNodes, uuid) if obj: ret = server_post("/node/shutdown", node) if ret.get("code", -1) != 0: logger.error("shutdown node[%s] error: %s" % (hostname, ret)) break else: logger.error("shutdown node[%s] info not exist!" % hostname) ret = get_error_result("NodeNotExistMsg", hostname=hostname) msg = "关机节点 %s" % ('/'.join(names)) insert_operation_log(msg, ret["msg"]) return ret
def start_check(self, param, log_user=None): """ :param param: { "desktop_uuid": "ea2bbe72-593c-11ea-9631-000c295dd728", "desktop_name": "desktop1", "desktop_type": 1, "instances": [ { "uuid": "", "name": "" } ] } :return: """ instances = param.get('instances', []) names = list() for instance in instances: names.append(instance['name']) ret = self.start_instances(param) msg = "个人桌面组'%s'中的桌面'%s'开机" % (param['desktop_name'], '/'.join(names)) insert_operation_log(msg, ret['msg'], log_user, module="personal_desktop") return ret
def delete(self, resource_pool_uuid, uuids): # pass resource_pool = self.get_object_by_uuid(YzyResourcePools, resource_pool_uuid) if not resource_pool: logger.error( "delete resource pool base image error: not resource pool[%s]" % resource_pool_uuid) return get_error_result("ResourcePoolNotExist") # ret = get_error_result("Success") # for uuid in uuids: # try: # base_image = self.get_object_by_uuid(YzyBaseImages, uuid) # except Exception as e: # ret = get_error_result("ResourceImageNotExist") # logger.error("delete base image: %s error!" % (uuid)) # break # # path = "" # try: # path = base_image.path # if os.path.exists(path): # os.remove(path) # base_image.delete() # except: # ret = get_error_result("ResourceImageDelFail") # logger.error("delete base image file: %s fail"%(uuid)) # break data = {"pool_uuid": resource_pool_uuid, "uuids": uuids} ret = server_post("/resource_pool/images/delete", data) msg = "删除基础镜像 %s" % ('/'.join(uuids)) insert_operation_log(msg, ret["msg"]) return ret
def delete_subnet(self, uuids): """ data [ {"uuid": "1a870202-3732-11ea-8a2d-000c295dd728","name": "xxxxx"}, {"uuid": "1a870202-3732-11ea-8a2d-000c295dd728","name": "xxxxx"}, {"uuid": "1a870202-3732-11ea-8a2d-000c295dd728","name": "xxxxx"} ] :param data: :return: """ ret = get_error_result("Success") # for uuid in uuids: # obj = self.get_object_by_uuid(YzySubnets, uuid) # if obj: # # 判断是否被占用 # templates = YzyInstanceTemplate.objects.filter(subnet_uuid=uuid, deleted=False).all() # if templates: # logger.error("delete subnet[%s] error, is be used"% uuid) ret = server_post("/subnet/delete", {'uuids': uuids}) # if ret.get("code", -1) != 0: # logger.error("delete subnet[%s] error: %s" % (uuid, ret)) # break # else: # logger.error("delete subnet[%s] info not exist!" % uuid) # ret = get_error_result("SubnetNotExist") msg = "删除子网 %s" % ('/'.join(uuids)) insert_operation_log(msg, ret["msg"]) return ret
def hard_stop_check(self, param, log_user=None): desktops = param.get('desktops', []) names = list() for desktop in desktops: names.append(desktop['name']) ret = self.stop_desktops(desktops, hard=True) msg = "个人桌面组'%s'强制关机" % ('/'.join(names)) insert_operation_log(msg, ret['msg'], log_user, module="personal_desktop") return ret
def delete_check(self, param, log_user=None): desktops = param.get('desktops', []) names = list() for desktop in desktops: names.append(desktop['name']) ret = self.delete_desktops(desktops) msg = "删除个人桌面组'%s'" % ('/'.join(names)) insert_operation_log(msg, ret['msg'], log_user, module="personal_desktop") return ret
def exit_maintenance_check(self, param, log_user=None): desktops = param.get('desktops', []) names = list() for desktop in desktops: names.append(desktop['name']) ret = self.exit_maintenance(desktops) msg = "个人桌面组'%s'关闭维护模式" % ('/'.join(names)) insert_operation_log(msg, ret['msg'], log_user, module="personal_desktop") return ret
def reset_check(self, param, log_user=None): templates = param.get('templates', []) names = list() for template in templates: names.append(template['name']) ret = self.reset_templates(templates) msg = "模板'%s'重置" % ('/'.join(names)) insert_operation_log(msg, ret['msg'], log_user, module="template") return ret
def delete_check(self, param, log_user=None): users = param.get('users', []) names = list() for user in users: names.append(user['user_name']) ret = self.delete_users(users) msg = "删除用户 %s" % ('/'.join(names)) insert_operation_log(msg, ret['msg'], log_user, module="user_group") return ret
def update_setup_terminal(self, data): """更新终端配置 { "handler": "WebTerminalHandler", "command": "set_terminal", "data": { "mac_list": "00-50-56-C0-00-08,00-50-56-C0-00-07,00-50-56-C0-00-06", "mode": { "show_desktop_type": 0, "auto_desktop": 1, "open_strategy": true, "close_desktop_strategy": false, "close_terminal_strategy": true }, "program": { "screen_resolution": "1024*768", "server_ip": "172.16.1.33", "show_modify_user_passwd": true, "terminal_setup_passwd": "111111" }, "windows": { "window_mode": 2, "goto_local_desktop": 5, "goto_local_auth": true, "show_local_button": false, "goto_local_passwd": "123456" } } } """ try: mac_list, name_list = self.get_terminal_mac_name_list(data) except Exception as e: logger.error("", exc_info=True) return get_error_result("ParamError") setup_info = data.get("setup_info", {}) if not self.check_setup_info(setup_info): return get_error_result("TerminalSetupInfoParamError") data = {"mac_list": ",".join(mac_list)} data.update(setup_info) req_data = { "handler": "WebTerminalHandler", "command": "set_terminal", "data": data } ret = terminal_post("/api/v1/terminal/task", req_data) msg = "更新终端配置 %s" % "/".join(name_list) insert_operation_log(msg, ret["msg"]) if ret.get("code", -1) != 0: logger.error("terminal update setup info fail") return ret logger.info("terminal update setup info success!!!") return get_error_result("Success")
def reboot_check(self, param, log_user=None): """ 桌面很多时,重启时间很长,考虑用多线程 """ desktops = param.get('desktops', []) names = list() for desktop in desktops: names.append(desktop['name']) ret = self.reboot_desktops(desktops) msg = "个人桌面组'%s'重启" % ('/'.join(names)) insert_operation_log(msg, ret['msg'], log_user, module="personal_desktop") return ret
def delete_check(self, param, log_user=None): instances = param.get('instances', []) names = list() for instance in instances: names.append(instance['name']) ret = self.delete_instances(param) msg = "删除教学桌面组'%s'中的桌面'%s'" % (param['desktop_name'], '/'.join(names)) insert_operation_log(msg, ret['msg'], log_user, module="education_desktop") return ret
def stop_check(self, param, log_user=None): desktops = param.get('desktops', []) names = list() for desktop in desktops: names.append(desktop['name']) ret = self.stop_desktops(desktops) msg = "教学桌面组'%s'关机" % ('/'.join(names)) insert_operation_log(msg, ret['msg'], log_user, module="education_desktop") return ret
def reboot_check(self, param, log_user=None): instances = param.get('instances', []) names = list() for instance in instances: names.append(instance['name']) ret = self.reboot_instances(param) msg = "个人桌面组'%s'中的桌面'%s'重启" % (param['desktop_name'], '/'.join(names)) insert_operation_log(msg, ret['msg'], log_user, module="personal_desktop") return ret
def delete_network(self, uuids): """ :param data: :return: """ ret = get_error_result("Success") success_num = 0 failed_num = 0 try: for uuid in uuids: obj = self.get_object_by_uuid(YzyNetworks, uuid) if obj: templates = education_model.YzyInstanceTemplate.objects.filter( deleted=False, network=obj).count() if templates > 0: failed_num += 1 continue groups = education_model.YzyGroup.objects.filter( deleted=False, network=obj).count() if groups > 0: failed_num += 1 continue desktops = education_model.YzyDesktop.objects.filter( deleted=False, network=obj).count() if desktops > 0: failed_num += 1 continue personal_desktops = personal_model.YzyPersonalDesktop.objects.filter( deleted=False, network=obj).count() if personal_desktops > 0: failed_num += 1 continue ret = server_post("/network/delete", {'uuid': uuid}) if ret.get("code", -1) != 0: failed_num += 1 else: success_num += 1 else: failed_num += 1 except Exception as e: logger.error("delete network failed:%s", e, exc_info=True) return get_error_result("DataNetworkDeleteFail") msg = "删除数据网络 %s" % ('/'.join(uuids)) insert_operation_log(msg, ret["msg"]) return get_error_result("Success", data={ "failed_num": failed_num, "success_num": success_num })
def put(self, request): """ { "uuid": "00d4e728-59f8-11ea-972d-000c295dd728", "name": "group1", "value": { "name": "group1", "desc": "this is group", "start_ip": "172.16.1.20", "end_ip": "172.16.1.60" } } """ try: logger.info("update education group") data = json.loads(request.body) except Exception as e: logger.error("get request data error:%s", e) return JsonResponse(get_error_result("MessageError"), status=200, json_dumps_params={'ensure_ascii': False}) try: msg = "更新用户分组 %s" % data['name'] ret = self.update_group(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") } insert_operation_log(msg, ret['msg'], log_user, module="user_group") except Exception as e: logger.error("update personal group error:%s", e, exc_info=True) ret = get_error_result("GroupUpdateError", name=data.get('name', '')) 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 post(self, request): ret = get_error_result() _data = request.data _data.update({"enable": 1}) ser = YzyRoleSerializer(data=_data, context={'request': request}) if ser.is_valid(): ser.save() else: msg = ser.errors ret = get_error_result("ParameterError") ret["msg"] = msg logger.info("create admin user: %s" % ret) msg = "创建角色信息: %s" % _data.get("role") insert_operation_log(msg, ret) return JSONResponse(ret)
def update_name_terminal(self, data): """ 修改终端名称 """ terminals = data.get("terminals", []) perfix = data.get("prefix", "") postfix = data.get("postfix", "") postfix_start = data.get("postfix_start", "") use_terminal_id = data.get("use_terminal_id", False) if not (terminals and perfix and postfix and postfix_start): logger.error("update terminals name param error") return get_error_result("ParamError") name_list = list() _data = dict() if use_terminal_id: for terminal in terminals: mac = terminal["mac"] name = terminal["name"] terminal_id = terminal["terminal_id"] _s = "%" + "0%sd" % postfix _n = perfix.upper() + "-" + _s % int(terminal_id) _data[mac] = _n if name not in name_list: name_list.append(name) else: for terminal in terminals: mac = terminal["mac"] name = terminal["name"] _s = "%" + "0%sd" % postfix _n = perfix.upper() + "-" + _s % postfix_start _data[mac] = _n postfix_start += 1 if name not in name_list: name_list.append(name) req_data = { "handler": "WebTerminalHandler", "command": "modify_terminal_name", "data": _data } ret = terminal_post("/api/v1/terminal/task", req_data) msg = "修改终端名称 %s" % "/".join(name_list) insert_operation_log(msg, ret["msg"]) if ret.get("code", -1) != 0: logger.error("terminal update name fail") return ret logger.info("terminal update name success!!!") return get_error_result("Success")
def change_group_check(self, param, log_user=None): """ :param param: { "desktop_uuid": "", "desktop_name": "", "group_uuid": "7380f97e-74d3-11ea-b50b-000c29e84b9c" "group_name": "group1" } :return: """ ret = self.change_group(param) msg = '桌面组"%s"更换用户组"%s"' % (param['desktop_name'], param['group_name']) insert_operation_log(msg, ret['msg'], log_user, module="personal_desktop") return ret
def delete(self, request): _id = request.data.get("id", "") role = YzyRole.objects.filter(deleted=False, id=_id).first() user = YzyAdminUser.objects.filter(deleted=False, role=_id).first() if not role: logger.error("role not exist: %s", _id) return JSONResponse(get_error_result("UserNotExistError")) if user: logger.error("the role is already referenced") return JSONResponse(get_error_result("RoleAlreadyReferencedError")) if user and user.is_superuser: logger.error("Super administrator does not allow deletion:%s", role.role) return JSONResponse(get_error_result("SuperAdminNotDeleteError")) role.delete() ret = get_error_result("Success") msg = "删除角色信息:%s" % role.role insert_operation_log(msg, ret) return JSONResponse(ret)
def put(self, request): _id = request.data.get("id") desc = request.data.get("desc", '') name = request.data.get("role", '') role = YzyRole.objects.filter(deleted=False, id=_id).first() if not role: logger.error("update role fail: role not exits") return JSONResponse(get_error_result("RoleNotExistError")) if role.role != name and YzyRole.objects.filter(deleted=False, role=name).all(): logger.error("update role fail: name exits") return JSONResponse(get_error_result("NameAlreadyUseError")) role.role = name role.desc = desc role.save() ret = get_error_result("Success") msg = "更新角色信息:%s" % role.role insert_operation_log(msg, ret) return JSONResponse(ret)
def move_terminal(self, data): """ 移动终端 "data": { "terminals": [ {"id": 1, "name": "yzy-01"}, {"id": 2, "name": "yzy-02"}, {"id": 3, "name": "yzy-03"} ], "group_name": "503办公室", "group_uuid": "xxxx-xxx-xxx" } """ # terminals = data.get("terminals", "") group_uuid = data.get("group_uuid", "") if not group_uuid: group_uuid = None try: mac_list, name_list = self.get_terminal_mac_name_list(data) except Exception as e: logger.error("", exc_info=True) return get_error_result("ParamError") group = self.get_object_by_uuid(YzyGroup, group_uuid) # if not group: # logger.error("terminal move error : %s group not exist"% group_uuid) # return get_error_result("TerminalWebGroupNotExist") if group and group.group_type != constants.PERSONAL_TYPE: logger.error("terminal move error : %s group not peronal group" % group_uuid) return get_error_result("TerminalNotPersonalGroupError") terminal_objs = self.get_all_object(YzyTerminal, {"mac": mac_list}) for terminal in terminal_objs: terminal.group_uuid = group_uuid terminal.save() ret = get_error_result("Success") msg = "移动终端: %s 到 %s 分组" % ("/".join(name_list), group.name if group else "未分组") insert_operation_log(msg, ret["msg"]) logger.error("terminal move success !!!!") return ret