예제 #1
0
 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})
예제 #2
0
 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
예제 #3
0
    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
예제 #4
0
 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
예제 #5
0
 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
예제 #6
0
 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
     })
예제 #7
0
 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
예제 #8
0
 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)
예제 #9
0
 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
     })
예제 #10
0
 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
     })
예제 #11
0
 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})
예제 #12
0
 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)
예제 #13
0
 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)
예제 #14
0
 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})
예제 #15
0
 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
예제 #16
0
 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})
예제 #17
0
 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})
예제 #18
0
 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
예제 #19
0
 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
예제 #20
0
    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
예제 #21
0
 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})
예제 #22
0
 def get(self, request, *args, **kwargs):
     result = LicenseManager().info()
     ret = get_error_result("Success", result)
     return JsonResponse(ret)
예제 #23
0
def param_error(error):
    return JsonResponse(get_error_result(error),
                        status=200,
                        json_dumps_params={'ensure_ascii': False})
예제 #24
0
    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
예제 #25
0
 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})