コード例 #1
0
ファイル: views.py プロジェクト: aixan/aixan
def edit_user(request):
    if request.method == 'GET':
        did = request.GET.get('id', None)
        data = Role.objects.filter(deleted_at__isnull=True)
        li_st = []
        for item in data:
            di_ct = {"id": item.id, 'name': item.name}
            li_st.append(di_ct)
        if did:
            user = User.objects.get(id=did)
            context = {'id': did, 'profile': user, "role": li_st}
        else:
            context = {"role": li_st}
        return render(request, 'user/edit_user.html', context)

    elif request.method == 'POST':
        user = user_get(request)
        did = request.POST.get('id')
        data = {
            "username": request.POST.get("username"),
            "name": request.POST.get("name"),
            "sex": request.POST.get("sex"),
            "phone": request.POST.get("phone"),
            "email": request.POST.get("email"),
            "card_id": request.POST.get("card_id"),
            "home_address": request.POST.get("home_address"),
            "desc": request.POST.get("desc", None),
        }
        if did:
            if User.objects.filter(phone=data["phone"],
                                   deleted_by_id__isnull=True).exclude(id=did):
                return JsonResponse({"code": 1, "msg": "手机号已存在"})
            if User.objects.filter(email=data["email"],
                                   deleted_by_id__isnull=True).exclude(id=did):
                return JsonResponse({"code": 1, "msg": "邮箱已存在"})
            User.objects.filter(id=did).update(**data)
            data = {"code": 0, "msg": "用户资料修改成功~"}
        else:
            data["password"] = request.POST.get("password")
            if User.objects.filter(username=data["username"]).first():
                return JsonResponse({"code": 1, "msg": "用户名已存在"})
            if User.objects.filter(phone=data["phone"],
                                   deleted_by_id__isnull=True).first():
                return JsonResponse({"code": 1, "msg": "手机号已存在"})
            if User.objects.filter(email=data["email"],
                                   deleted_by_id__isnull=True).first():
                return JsonResponse({"code": 1, "msg": "邮箱已存在"})
            User.objects.create_user(created_by=user, **data)
            data = {"code": 0, "msg": "用户添加成功~"}
        return JsonResponse(data)
    elif request.method == "DELETE":
        user = user_get(request)
        request_data = QueryDict(request.body)
        did = request_data.get("id").split(",")
        User.objects.filter(id__in=did).update(deleted_at=human_datetime(),
                                               deleted_by=user,
                                               is_active=0)
        data = {"code": 0, "msg": "账号删除成功~"}
        return JsonResponse(data)
コード例 #2
0
ファイル: views.py プロジェクト: aixan/aixan
def domains_add(request):
    request_data = QueryDict(request.body)
    did = request_data.get("id", None)
    user = user_get(request)
    if request.method == "GET":
        data = Api.objects.filter().values('id', 'name')
        return render(request, "domains/domains_add.html", {'api': data})
    if request.method == "POST":
        id = request.POST.get("id")
        domain = request.POST.get("domain")
        obj = Domains.objects.filter(domain=domain)
        if obj.count() == 0:
            api = Api.objects.get(id=id)
            data = Ali_Add_Domain(api.key, api.secret, api.region, domain)
            if data['code'] == 0:
                data = json.loads(data['data'])
                dns1 = data['DnsServers']['DnsServer'][0]
                dns2 = data['DnsServers']['DnsServer'][1]
                Domains.objects.create(api=api,
                                       domain=domain,
                                       dns1=dns1,
                                       dns2=dns2)
            data = {"code": 0, "msg": "添加域名成功~"}
        else:
            data = {"code": 1, "msg": "添加域名失败~"}
        return JsonResponse(data)
    elif request.method == "DELETE":
        id = request.POST.get('id')
        Domains.objects.get(id=id).delete()
        data = {"code": 0, "msg": "域名删除成功~"}
        return JsonResponse(data)
コード例 #3
0
ファイル: views.py プロジェクト: aixan/aixan
def role(request):
    user = user_get(request)
    request_data = QueryDict(request.body)
    d_id = request_data.get('id', None)
    name = request_data.get('name', None)
    if request.method == "GET":
        return render(request, 'user/role.html')
    elif request.method == "POST":
        if Role.objects.filter(name=name,
                               deleted_by__id__isnull=True).exists():
            data = {"code": 1, "msg": "角色已存在,创建失败~"}
        else:
            Role.objects.create(name=name, created_by=user)
            data = {"code": 0, "msg": "角色创建成功~"}
        return JsonResponse(data)
    elif request.method == "PUT":
        if Role.objects.filter(name=name,
                               deleted_by__id__isnull=True).exists():
            data = {"code": 1, "msg": "角色已存在,修改失败~"}
        else:
            Role.objects.filter(id=d_id).update(name=name)
            data = {"code": 0, "msg": "角色修改成功~"}
        return JsonResponse(data)
    elif request.method == "DELETE":
        Role.objects.filter(id__in=d_id.split(",")).update(
            deleted_at=human_datetime(), deleted_by=user)
        data = {"code": 0, "msg": "删除角色成功"}
        return JsonResponse(data)
コード例 #4
0
ファイル: views.py プロジェクト: aixan/aixan
def template_edit(request):
    request_data = QueryDict(request.body)
    user = user_get(request)
    did = request_data.get("id", None)
    if request.method == "GET":
        did = request.GET.get("id", None)
        if did:
            data = Exec.objects.get(id=did)
        else:
            data = ""
        return render(request, "exec/template_edit.html", {"data": data})
    if request.method == "POST":
        data = {
            "name": request_data.get('name'),
            "types": request_data.get('types'),
            "body": request_data.get('body'),
            "desc": request_data.get('desc'),
        }
        if did:
            Exec.objects.filter(id=did).update(**data)
            data = {"code": 0, "msg": "模板修改成功。"}
        else:
            Exec.objects.create(created_by=user, **data)
            data = {"code": 0, "msg": "添加模板成功。"}
        return JsonResponse(data)

    elif request.method == "DELETE":
        Exec.objects.filter(id__in=did.split(',')).update(
            deleted_at=human_datetime(), deleted_by=user)
        data = {"code": 0, "msg": "模板删除成功~"}
        return JsonResponse(data)
コード例 #5
0
def edit_host(request):
    if request.method == "GET":
        did = request.GET.get("id", None)
        if did:
            data = Host.objects.get(id=did)
        else:
            data = ""
        return render(request, "host/edit_host.html", {"host": data})
    elif request.method == "POST":
        user = user_get(request)
        did = request.POST.get("id", None)
        password = request.POST.get("password", None)
        data = {
            "types": request.POST.get("types"),
            "system": request.POST.get("system"),
            "name": request.POST.get("name"),
            "username": request.POST.get("username"),
            "hostname": request.POST.get("hostname"),
            "port": request.POST.get("port"),
            "pkey": request.POST.get("pkey"),
            "desc": request.POST.get("desc"),
        }
        valid = valid_ssh(data['hostname'], data['port'], data['username'], password=password, pkey=data['pkey'])
        if valid[0] is False:
            data = {"code": 1, "msg": valid[2]}
            return JsonResponse(data)
        if did:
            Host.objects.filter(id=did).update(**data)
            data = {"code": 0, "msg": "修改主机成功~"}
        elif Host.objects.filter(hostname=data['hostname'], deleted_by_id__isnull=True).exists():
            data = {"code": 1, "msg": "添加失败,主机已存在~"}
        else:
            Host.objects.create(created_by=user, **data)
            data = {"code": 0, "msg": "添加主机成功~"}
        return JsonResponse(data)
コード例 #6
0
def contact_edit(request):
    request_data = QueryDict(request.body)
    did = request_data.get('id', None)
    user = user_get(request)
    if request.method == "GET":
        did = request.GET.get('id')
        if did:
            data = Contact.objects.filter(id=did).first()
        else:
            data = ""
        return render(request, "alarm/contact_edit.html", {"data": data})
    elif request.method == "POST":
        data = {
            "name": request_data.get("name"),
            "phone": request_data.get("phone"),
            "email": request_data.get("email"),
            "ding": request_data.get("ding"),
            "wx_token": request_data.get("wx_token"),
            "qy_wx": request_data.get("qy_wx"),
        }
        if did:
            Contact.objects.filter(id=did).update(**data)
            data = {"code": 1, "msg": "联系人修改成功~"}
        else:
            Contact.objects.create(created_by=user, **data)
            data = {"code": 0, "msg": "联系人添加成功~"}
        return JsonResponse(data)

    elif request.method == "DELETE":
        Contact.objects.filter(id__in=did.split(',')).update(
            deleted_at=human_datetime(), deleted_by=user)
        data = {"code": 0, "msg": "联系人删除成功"}
        return JsonResponse(data)
コード例 #7
0
ファイル: views.py プロジェクト: aixan/aixan
def domains(request):
    user = user_get(request)
    if request.method == "GET":
        data = Domains.objects.filter(deleted_by__id__isnull=True)
        data = {"data": data}
        return render(request, "domains/domains.html", data)
    elif request.method == "SYNC":
        request_data = QueryDict(request.body)
        id = request_data.get("id")
        domain = Domains.objects.get(id=id)
        data = Ali_Parsing(domain.api.key, domain.api.secret,
                           domain.api.region, domain.domain)
        if data['code'] == 0:
            data = json.loads(data['data'])
            for item in data['DomainRecords']['Record']:
                dict = {}
                dict['RR'] = item['RR']
                dict['Line'] = item['Line']
                dict['Type'] = item['Type']
                dict['Value'] = item['Value']
                dict['RecordId'] = item['RecordId']
                dict['TTL'] = item['TTL']
                dict['domain_id'] = domain.id
                if "Priority" in item:
                    dict['Priority'] = item['Priority']
                else:
                    dict['Priority'] = None
                Parsing.objects.update_or_create(RecordId=item['RecordId'],
                                                 defaults=dict,
                                                 created_by=user)
            data = {"code": 0, "msg": "域名解析同步成功~"}
        else:
            data = {"code": 1, "msg": "域名解析同步失败~"}
        return JsonResponse(data)
コード例 #8
0
def pod(request):
    user = user_get(request)
    hostname = request.GET.get('hostname')
    namespace = request.GET.get("namespace")
    pod_name = request.GET.get("pod_name")
    containers = request.GET.get("containers").split(',')  # 返回 nginx1,nginx2,转成一个列表方便前端处理
    # 认证类型和token,用于传递到websocket,websocket根据sessionid获取token,让websocket处理连接k8s认证用
    connect = {'hostname': hostname, 'username': user, 'namespace': namespace, 'pod_name': pod_name, 'containers': containers}
    return render(request, 'webssh/pod.html', {'connect': connect})
コード例 #9
0
ファイル: views.py プロジェクト: aixan/aixan
def get_statefulset(request):
    user = user_get(request)
    hostname = request.GET.get('hostname')

    auth_config(user, hostname)
    apps_api = client.AppsV1Api()

    namespace = request.GET.get("namespace")
    if request.method == "GET":
        pageIndex = request.GET.get("pageIndex")
        pageSize = request.GET.get("pageSize")

        list = []
        res = []
        try:
            for sts in apps_api.list_namespaced_stateful_set(namespace).items:
                dict = {}
                dict["name"] = sts.metadata.name
                dict["namespace"] = sts.metadata.namespace
                dict["replicas"] = sts.spec.replicas
                dict["selector"] = sts.spec.selector.match_labels
                dict["service_name"] = sts.spec.service_name
                dict["ready_replicas"] = ("0"
                                          if sts.status.ready_replicas is None
                                          else sts.status.ready_replicas)
                # current_replicas = sts.status.current_replicas
                containers = {}
                for c in sts.spec.template.spec.containers:
                    containers[c.name] = c.image
                dict["containers"] = containers
                dict["labels"] = sts.metadata.labels
                dict["create_time"] = dt_format(
                    sts.metadata.creation_timestamp)
                list.append(dict)
            pageInator = Paginator(list, pageSize)
            context = pageInator.page(pageIndex)
            for item in context:
                res.append(item)
            data = {
                "code": 0,
                "msg": "ok",
                "DataCount": len(list),
                "data": res
            }
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
    elif request.method == "DELETE":
        request_data = QueryDict(request.body)
        name = request_data.get("name")
        namespace = request_data.get('namespace')
        try:
            apps_api.delete_namespaced_stateful_set(name, namespace)
            data = {"code": 0, "msg": "删除成功."}
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
コード例 #10
0
ファイル: views.py プロジェクト: aixan/aixan
def get_pvc(request):
    user = user_get(request)
    hostname = request.GET.get('hostname')

    auth_config(user, hostname)
    core_api = client.CoreV1Api()

    namespace = request.GET.get("namespace")
    if request.method == "GET":
        pageIndex = request.GET.get("pageIndex")
        pageSize = request.GET.get("pageSize")

        list = []
        res = []
        try:
            for pvc in core_api.list_namespaced_persistent_volume_claim(
                    namespace).items:
                dict = {}
                dict["name"] = pvc.metadata.name
                dict["namespace"] = pvc.metadata.namespace
                dict["labels"] = pvc.metadata.labels
                dict["storage_class_name"] = pvc.spec.storage_class_name
                dict["access_modes"] = pvc.spec.access_modes
                dict["capacity"] = (pvc.status.capacity
                                    if pvc.status.capacity is None else
                                    pvc.status.capacity["storage"])
                dict["volume_name"] = pvc.spec.volume_name
                dict["status"] = pvc.status.phase
                dict["create_time"] = dt_format(
                    pvc.metadata.creation_timestamp)
                list.append(dict)

            pageInator = Paginator(list, pageSize)
            context = pageInator.page(pageIndex)
            for item in context:
                res.append(item)
            data = {
                "code": 0,
                "msg": "ok",
                "DataCount": len(list),
                "data": res
            }
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
    elif request.method == "DELETE":
        request_data = QueryDict(request.body)
        name = request_data.get("name")
        namespace = request_data.get("namespace")
        try:
            core_api.delete_namespaced_persistent_volume_claim(name, namespace)
            data = {"code": 0, "msg": "删除成功."}
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
コード例 #11
0
ファイル: views.py プロジェクト: aixan/aixan
def get_jobs(request):
    user = user_get(request)
    hostname = request.GET.get('hostname')

    auth_config(user, hostname)
    batch_api = client.BatchV1Api()

    namespace = request.GET.get("namespace")
    if request.method == "GET":
        pageIndex = request.GET.get("pageIndex")
        pageSize = request.GET.get("pageSize")

        list = []
        res = []
        try:
            for job in batch_api.list_namespaced_job(namespace).items:
                dict = {}
                dict["name"] = job.metadata.name
                dict["namespace"] = job.metadata.namespace
                # dict["desired_number"] = ds.status.desired_number_scheduled
                # dict["available_number"] = ds.status.number_available
                # dict["selector"] = ds.spec.selector.match_labels
                # containers = {}
                # for c in ds.spec.template.spec.containers:
                #     containers[c.name] = c.image
                # dict["containers"] = containers
                dict["labels"] = job.metadata.labels
                dict["create_time"] = dt_format(
                    job.metadata.creation_timestamp)
                list.append(dict)

            pageInator = Paginator(list, pageSize)
            context = pageInator.page(pageIndex)
            for item in context:
                res.append(item)
            data = {
                "code": 0,
                "msg": "ok",
                "DataCount": len(list),
                "data": res
            }
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
    elif request.method == "DELETE":
        request_data = QueryDict(request.body)
        name = request_data.get("name")
        try:
            batch_api.delete_namespaced_cron_job(name, namespace)
            data = {"code": 0, "msg": "删除成功."}
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
コード例 #12
0
ファイル: views.py プロジェクト: aixan/aixan
def get_cronjobs(request):
    user = user_get(request)
    hostname = request.GET.get('hostname')

    auth_config(user, hostname)
    batch_api = client.BatchV2alpha1Api()

    namespace = request.GET.get("namespace")
    if request.method == "GET":
        pageIndex = request.GET.get("pageIndex")
        pageSize = request.GET.get("pageSize")

        list = []
        res = []
        try:
            for cj in batch_api.list_namespaced_cron_job(namespace).items:
                dict = {}
                dict["name"] = cj.metadata.name
                dict["namespace"] = cj.metadata.namespace
                dict["schedule"] = cj.spec.schedule
                if cj.status.last_schedule_time:
                    dict["lastScheduleTime"] = dt_format(
                        cj.status.last_schedule_time)
                else:
                    dict["lastScheduleTime"] = ""
                print(cj.status.last_schedule_time)
                dict["create_time"] = dt_format(cj.metadata.creation_timestamp)
                list.append(dict)

            pageInator = Paginator(list, pageSize)
            context = pageInator.page(pageIndex)
            for item in context:
                res.append(item)
            data = {
                "code": 0,
                "msg": "ok",
                "DataCount": len(list),
                "data": res
            }
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
    elif request.method == "DELETE":
        request_data = QueryDict(request.body)
        name = request_data.get("name")
        namespace = request_data.get("namespace")
        try:
            batch_api.delete_namespaced_cron_job(name, namespace)
            data = {"code": 0, "msg": "删除成功."}
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
コード例 #13
0
ファイル: views.py プロジェクト: aixan/aixan
def yaml_json_add(request):
    user = user_get(request)
    hostname = request.POST.get('hostname')
    auth_config(user, hostname)
    core_api = client.CoreV1Api()  # namespace,pod,service,pv,pvc
    apps_api = client.AppsV1Api()  # deployment
    batch1_api = client.BatchV1Api()
    batch2_api = client.BatchV2alpha1Api()
    networking_api = client.NetworkingV1beta1Api()  # ingress
    storage_api = client.StorageV1Api()  # storage_class
    namespace = request.POST.get('namespace', None)
    resource = request.POST.get('resource', None)
    name = request.POST.get('name', None)
    types = request.POST.get('types')
    if types == "yaml":
        body = request.POST.get('yaml', None)
        body = yaml.safe_load(body)
    else:
        body = request.POST.get('json', None)
    try:
        if body['kind'] == "Namespace":
            core_api.create_namespace(body)
        elif body['kind'] == "Deployment":
            apps_api.create_namespaced_deployment(namespace, body)
        elif body['kind'] == "DaemonSet":
            apps_api.create_namespaced_daemon_set(namespace, body)
        elif body['kind'] == "StatefulSet":
            apps_api.create_namespaced_stateful_set(namespace, body)
        elif body['kind'] == "Service":
            core_api.create_namespaced_service(namespace, body)
        elif body['kind'] == "Pod":
            core_api.create_namespaced_pod(namespace, body)
        elif body['kind'] == "Ingress":
            networking_api.create_namespaced_ingress(namespace, body)
        elif body['kind'] == "PersistentVolume":
            core_api.create_persistent_volume(body)
        elif body['kind'] == "PersistentVolumeClaim":
            core_api.create_namespaced_persistent_volume_claim(namespace, body)
        elif body['kind'] == "ConfigMap":
            core_api.create_namespaced_config_map(namespace, body)
        elif body['kind'] == "Secret":
            core_api.create_namespaced_secret(namespace, body)
        elif body['kind'] == "CronJob":
            batch2_api.create_namespaced_cron_job(namespace, body)
        elif body['kind'] == "Job":
            batch1_api.create_namespaced_job(namespace, body)
        data = {"code": 0, "msg": f"{body['kind']}创建成功"}
        return data
    except Exception as e:
        data = error(e)
        return data
コード例 #14
0
def group_edit(request):
    request_data = QueryDict(request.body)
    did = request_data.get('id', None)
    user = user_get(request)
    if request.method == "GET":
        did = request.GET.get("id")
        data = Contact.objects.filter(deleted_by__id__isnull=True)
        if data:
            li_st = []
            for item in data:
                di_ct = {"value": item.id, "title": item.name}
                li_st.append(di_ct)
        else:
            li_st = ""
        if did:
            data = Group.objects.filter(id=did).first()
            value = []
            for item in data.contacts.all():
                value.append(item.id)
            data.contact = li_st
            data.values = value
        else:
            data = {"contact": li_st, "values": ""}
        return render(request, "alarm/group_edit.html", {"data": data})
    if request.method == "POST":
        data = {
            "name": request_data.get("name"),
            "desc": request_data.get("desc"),
        }
        contacts = json.loads(request_data.get("contacts"))
        li_st = []
        for item in contacts:
            li_st.append(int(item['value']))
        print(li_st)
        if did:
            contacts = Contact.objects.filter(id__in=li_st)
            print(contacts)
            data = Group.objects.filter(id=did)
            data.contacts.add(*li_st)
            data.update(**data)
            data.save()
            print(data, "1")
            # data.contacts.add(*contacts)
            # data.save()
            data = {"code": 0, "msg": "联系组修改成功~"}
        else:
            data = Group.objects.create(created_by=user, **data)
            data.contacts.add(*contacts)
            data = {"code": 0, "msg": "联系组添加失败~"}
        return JsonResponse(data)
コード例 #15
0
ファイル: views.py プロジェクト: aixan/aixan
def get_secret(request):
    user = user_get(request)
    hostname = request.GET.get('hostname')

    auth_config(user, hostname)
    core_api = client.CoreV1Api()

    namespace = request.GET.get("namespace")
    if request.method == "GET":
        pageIndex = request.GET.get("pageIndex")
        pageSize = request.GET.get("pageSize")

        list = []
        res = []
        try:
            for secret in core_api.list_namespaced_secret(namespace).items:
                dict = {}
                dict["name"] = secret.metadata.name
                dict["namespace"] = secret.metadata.namespace
                dict["data_length"] = ("空" if secret.data is None else len(
                    secret.data))
                dict["create_time"] = dt_format(
                    secret.metadata.creation_timestamp)
                list.append(dict)

            pageInator = Paginator(list, pageSize)
            context = pageInator.page(pageIndex)
            for item in context:
                res.append(item)
            data = {
                "code": 0,
                "msg": "ok",
                "DataCount": len(list),
                "data": res
            }
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
    elif request.method == "DELETE":
        request_data = QueryDict(request.body)
        name = request_data.get("name")
        namespace = request_data.get("namespace")
        try:
            core_api.delete_namespaced_secret(name, namespace)
            data = {"code": 0, "msg": "删除成功."}
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
コード例 #16
0
ファイル: views.py プロジェクト: aixan/aixan
def get_node(request):
    # 命名空间选择和命名空间表格使用
    if request.method == "GET":
        user = user_get(request)
        hostname = request.GET.get('hostname')

        auth_config(user, hostname)
        core_api = client.CoreV1Api()

        pageIndex = request.GET.get("pageIndex")
        pageSize = request.GET.get("pageSize")

        list = []
        res = []
        try:
            for node in core_api.list_node_with_http_info()[0].items:
                dict = {}
                dict["name"] = node.metadata.name
                dict["labels"] = node.metadata.labels
                status = node.status.conditions[-1].status
                if status:
                    dict["status"] = "Ready"
                else:
                    dict["status"] = status
                dict["scheduler"] = ("是" if node.spec.unschedulable is None
                                     else "否")
                dict["cpu"] = node.status.capacity['cpu']
                dict["memory"] = node.status.capacity['memory']
                dict["kebelet_version"] = node.status.node_info.kubelet_version
                dict[
                    "cri_version"] = node.status.node_info.container_runtime_version
                dict["create_time"] = dt_format(
                    node.metadata.creation_timestamp)
                list.append(dict)

            pageInator = Paginator(list, pageSize)
            context = pageInator.page(pageIndex)
            for item in context:
                res.append(item)
            data = {
                "code": 0,
                "msg": "ok",
                "DataCount": len(list),
                "data": res
            }
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
コード例 #17
0
ファイル: views.py プロジェクト: aixan/aixan
def get_menu(request):
    user = user_get(request)
    if user.is_superuser:
        menuInfo = menuIn(user.is_superuser)
    else:
        menuInfo = menuIn(user.username)
    homeInfo = {"title": "首页", "href": "home.html"}
    logoInfo = {
        "title": "运维管理平台",
        "image": "/static/layuimini/images/logo.png",
        "href": ""
    }
    systemInit = {
        "homeInfo": homeInfo,
        "logoInfo": logoInfo,
        "menuInfo": menuInfo,
    }
    return JsonResponse(systemInit)
コード例 #18
0
ファイル: views.py プロジェクト: aixan/aixan
def get_key(request):
    if request.method == "GET":
        data = Setting.objects.all()
    elif request.method == "POST":
        user = user_get(request)
        public_key = request.POST.get("public_key")
        private_key = request.POST.get("private_key")

        obj_public_key = Setting.objects.update_or_create(
            key="public_key", defaults={"value": public_key}, created_by=user)
        print(obj_public_key)
        obj_private_key = Setting.objects.update_or_create(
            key="private_key",
            defaults={"value": private_key},
            created_by=user)
        print(obj_private_key)
        data = {"code": 0, "msg": "修改成功."}
        return JsonResponse(data)
コード例 #19
0
def host(request):
    if request.method == "GET":
        data = Host.objects.all()
        types, system = [], []
        for item in data:
            types.append(item.types)
            system.append(item.system)
        context = {"types": list(set(types)), "system": list(set(system))}
        return render(request, "host/host.html", context)
    elif request.method == "DELETE":
        user = user_get(request)
        request_data = QueryDict(request.body)
        did = request_data.get("id").split(",")
        Host.objects.filter(id__in=did).update(deleted_at=human_datetime(), deleted_by=user)
        data = {"code": 0, "msg": "主机删除成功~"}
        return JsonResponse(data)
    elif request.method == "POST":
        key = request.FILES.get("file")
        data = key.read()
        data = {"code": 0, "msg": "上传成功", "data": data.decode('utf-8')}
        return JsonResponse(data)
コード例 #20
0
def get_k8s(request):
    if request.method == "GET":
        try:
            user = user_get(request)
            hostname = request.GET.get('hostname')
            user = User.objects.get(username=user)
            host = []
            if user.is_superuser:
                data = K8s.objects.all()
                for item in data:
                    dict = {}
                    dict['hostname'] = item.hostname.hostname
                    host.append(dict)
                if hostname == "null":
                    hostname = host[0]["hostname"]
                auth_config(user, hostname)
            else:
                data = Auth.objects.filter(user_id=user.id)
                for auth in data:
                    dict = {}
                    dict['hostname'] = auth.hostname.hostname.hostname
                    host.append(dict)
                if hostname == "null":
                    hostname = host[0]["hostname"]
                auth_config(user, hostname)
            core_api = client.CoreV1Api()
            namespace = []
            for ns in core_api.list_namespace().items:
                dict = {}
                dict["name"] = ns.metadata.name
                namespace.append(dict)
            data = {
                "code": 0,
                "msg": "ok",
                "hostname": host,
                "namespace": namespace
            }
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
コード例 #21
0
def edit_k8s(request):
    user = user_get(request)
    request_data = QueryDict(request.body)
    d_id = request_data.get("id", None)
    if request.method == "GET":
        d_id = request.GET.get("id", None)
        if d_id:
            data = K8s.objects.get(id=d_id)
        else:
            data = ""
        return render(request, "k8s/edit_k8s.html", {"data": data})

    elif request.method == "POST":
        data = {
            "name": request_data.get('name'),
            "ca": request_data.get('ca'),
            "config": request_data.get("config"),
            "desc": request_data.get('desc'),
        }
        hostname = Host.objects.get(hostname=request_data.get('hostname'),
                                    deleted_by__id__isnull=True)
        if d_id:
            K8s.objects.filter(id=d_id).update(hostname=hostname, **data)
            data = {"code": 0, "msg": "修改成功~"}
        else:
            if K8s.objects.filter(hostname=hostname,
                                  deleted_by__id__isnull=True).exists():
                data = {"code": 1, "msg": "添加失败,主机已存在~"}
            else:
                K8s.objects.create(created_by=user, hostname=hostname, **data)
                data = {"code": 0, "msg": "主机添加成功~"}
        return JsonResponse(data)

    elif request.method == "DELETE":
        K8s.objects.filter(id__in=d_id.split(",")).update(
            deleted_at=human_datetime(), deleted_by=user)
        data = {"code": 0, "msg": "删除成功."}
        return JsonResponse(data)
コード例 #22
0
ファイル: views.py プロジェクト: aixan/aixan
def get_service(request):
    user = user_get(request)
    hostname = request.GET.get('hostname')

    auth_config(user, hostname)
    core_api = client.CoreV1Api()

    namespace = request.GET.get("namespace")
    if request.method == "GET":
        pageIndex = request.GET.get("pageIndex")
        pageSize = request.GET.get("pageSize")

        list = []
        res = []
        try:
            for service in core_api.list_namespaced_service(namespace).items:
                dict = {}
                dict["name"] = service.metadata.name
                dict["namespace"] = service.metadata.namespace
                dict["labels"] = service.metadata.labels
                dict["type"] = service.spec.type
                dict["cluster_ip"] = service.spec.cluster_ip
                dict["selector"] = service.spec.selector
                ports = []
                for p in service.spec.ports:  # 不是序列,不能直接返回
                    port_name = p.name
                    port = p.port
                    target_port = p.target_port
                    protocol = p.protocol
                    node_port = ""
                    if dict["type"] == "NodePort":
                        node_port = " <br> NodePort: %s" % p.node_port

                    port = {
                        'port_name': port_name,
                        'port': port,
                        'protocol': protocol,
                        'target_port': target_port,
                        'node_port': node_port
                    }
                    ports.append(port)
                dict["ports"] = ports
                # 确认是否关联Pod
                for ep in core_api.list_namespaced_endpoints(namespace).items:
                    if ep.metadata.name == dict["name"] and ep.subsets is None:
                        dict["endpoint"] = "未关联"
                    else:
                        dict["endpoint"] = "已关联"
                dict["create_time"] = dt_format(
                    service.metadata.creation_timestamp)
                list.append(dict)

            pageInator = Paginator(list, pageSize)
            context = pageInator.page(pageIndex)
            for item in context:
                res.append(item)
            data = {
                "code": 0,
                "msg": "ok",
                "DataCount": len(list),
                "data": res
            }
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
    elif request.method == "DELETE":
        request_data = QueryDict(request.body)
        name = request_data.get("name")
        try:
            core_api.delete_namespaced_service(name, namespace)
            data = {"code": 0, "msg": "删除成功."}
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
コード例 #23
0
ファイル: views.py プロジェクト: aixan/aixan
def get_ingress(request):
    user = user_get(request)
    hostname = request.GET.get('hostname')

    auth_config(user, hostname)
    networking_api = client.NetworkingV1beta1Api()

    namespace = request.GET.get("namespace")
    if request.method == "GET":
        pageIndex = request.GET.get("pageIndex")
        pageSize = request.GET.get("pageSize")

        list = []
        res = []
        try:
            for ing in networking_api.list_namespaced_ingress(namespace).items:
                dict = {}
                dict["name"] = ing.metadata.name
                dict["namespace"] = ing.metadata.namespace
                dict["service"] = "None"
                # dict["http_hosts"] = "None"
                for h in ing.spec.rules:
                    host = h.host
                    path = ("/" if h.http.paths[0].path is None else
                            h.http.paths[0].path)
                    service_name = h.http.paths[0].backend.service_name
                    service_port = h.http.paths[0].backend.service_port
                    http_hosts = {
                        'host': host,
                        'path': path,
                        'service_name': service_name,
                        'service_port': service_port
                    }
                dict["http_hosts"] = http_hosts
                # dict["https_hosts"] = "None"
                if ing.spec.tls is None:
                    https_hosts = ing.spec.tls
                else:
                    for tls in ing.spec.tls:
                        host = tls.hosts[0]
                        secret_name = tls.secret_name
                        https_hosts = {
                            'host': host,
                            'secret_name': secret_name
                        }
                dict["https_hosts"] = https_hosts
                dict["labels"] = ing.metadata.labels
                dict["create_time"] = dt_format(
                    ing.metadata.creation_timestamp)
                list.append(dict)
            pageInator = Paginator(list, pageSize)
            context = pageInator.page(pageIndex)
            for item in context:
                res.append(item)
            data = {
                "code": 0,
                "msg": "ok",
                "DataCount": len(list),
                "data": res
            }
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
    elif request.method == "DELETE":
        request_data = QueryDict(request.body)
        name = request_data.get("name")
        namespace = request_data.get("namespace")
        try:
            networking_api.delete_namespaced_ingress(name, namespace)
            data = {"code": 0, "msg": "删除成功."}
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
コード例 #24
0
ファイル: views.py プロジェクト: aixan/aixan
def get_deployment(request):
    user = user_get(request)
    hostname = request.GET.get('hostname')

    auth_config(user, hostname)
    apps_api = client.AppsV1Api()
    namespace = request.GET.get("namespace")
    if request.method == "GET":
        pageIndex = request.GET.get("pageIndex")
        pageSize = request.GET.get("pageSize")

        list = []
        res = []
        try:
            for dp in apps_api.list_namespaced_deployment(namespace).items:
                dict = {}
                dict["name"] = dp.metadata.name
                dict["namespace"] = dp.metadata.namespace
                dict["replicas"] = dp.spec.replicas
                dict["available_replicas"] = (
                    0 if dp.status.available_replicas is None else
                    dp.status.available_replicas)
                dict["labels"] = dp.metadata.labels
                dict["selector"] = dp.spec.selector.match_labels
                if len(dp.spec.template.spec.containers) > 1:
                    images = ""
                    n = 1
                    for c in dp.spec.template.spec.containers:
                        status = ("运行中" if dp.status.conditions[0].status
                                  == "True" else "异常")
                        image = c.image
                        images += "[%s]: %s / %s" % (n, image, status)
                        images += "<br>"
                        n += 1
                else:
                    status = ("运行中" if dp.status.conditions[0].status == "True"
                              else "异常")
                    image = dp.spec.template.spec.containers[0].image
                    images = "%s / %s" % (image, status)
                dict["images"] = images
                dict["create_time"] = dt_format(dp.metadata.creation_timestamp)
                list.append(dict)

            pageInator = Paginator(list, pageSize)
            context = pageInator.page(pageIndex)
            for item in context:
                res.append(item)
            data = {
                "code": 0,
                "msg": "ok",
                "DataCount": len(list),
                "data": res
            }
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
    elif request.method == "DELETE":
        request_data = QueryDict(request.body)
        name = request_data.get("name")
        namespace = request_data.get("namespace")
        try:
            apps_api.delete_namespaced_deployment(name, namespace)
            data = {"code": 0, "msg": "删除成功."}
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
    elif request.method == "REPLICAS":
        request_data = QueryDict(request.body)
        name = request_data.get("name")
        replicas = request_data.get('replicas')
        try:
            body = apps_api.read_namespaced_deployment(name, namespace)
            body.spec.replicas = int(replicas)
            apps_api.replace_namespaced_deployment(name, namespace, body)
            data = {"code": 0, "msg": "修改成功."}
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
コード例 #25
0
ファイル: views.py プロジェクト: aixan/aixan
def schedule_edit(request):
    user = user_get(request)
    request_data = QueryDict(request.body)
    did = request_data.get("id", None)
    if request.method == "GET":
        did = request.GET.get("id")
        if did:
            data = Schedule.objects.get(id=did)
            data.targets = ','.join(eval(data.targets))
            data.rst_notify = eval(data.rst_notify)
        else:
            data = ""
        return render(request, "exec/schedule_edit.html", {"data": data})
    elif request.method == "POST":
        data = {
            'name': request.POST.get("name"),
            'types': request.POST.get("types"),
            'command': request.POST.get("command"),
            'targets': request.POST.get("targets").split(","),
            'desc': request.POST.get("desc"),
            'rst_notify': {
                "mode": request_data.get('rst_notify.mode'),
                'value': request_data.get('rst_notify.value')
            }
        }
        trigger = request.POST.get("trigger")
        if did:
            if trigger == "interval":
                interval = request.POST.get("interval")
                Schedule.objects.filter(id=did).update(trigger=trigger,
                                                       trigger_args=interval,
                                                       **data)
            elif trigger == "date":
                date = request.POST.get("date")
                Schedule.objects.filter(id=did).update(trigger=trigger,
                                                       trigger_args=date,
                                                       **data)
            elif trigger == "cron":
                cron = request.POST.get("cron")
                Schedule.objects.filter(id=did).update(trigger=trigger,
                                                       trigger_args=cron,
                                                       **data)
            obj = Schedule.objects.filter(id=did).first()
            if obj and obj.is_active:
                message = {'id': obj.id, 'action': 'modify'}
                message.update({
                    'trigger': obj.trigger,
                    'trigger_args': obj.trigger_args,
                    'command': obj.command,
                    'targets': obj.targets
                })
                rds_cli = get_redis_connection()
                rds_cli.lpush(settings.SCHEDULE_KEY, json.dumps(message))
            data = {"code": 0, "msg": "类别修改成功~"}
        else:
            if trigger == "interval":
                interval = request.POST.get("interval")
                Schedule.objects.create(created_by=user,
                                        trigger=trigger,
                                        trigger_args=interval,
                                        **data)
            elif trigger == "date":
                date = request.POST.get("date")
                Schedule.objects.create(created_by=user,
                                        trigger=trigger,
                                        trigger_args=date,
                                        **data)
            elif trigger == "cron":
                cron = request.POST.get("cron")
                Schedule.objects.create(created_by=user,
                                        trigger=trigger,
                                        trigger_args=cron,
                                        **data)
            data = {"code": 0, "msg": "任务添加成功~"}
        return JsonResponse(data)

    elif request.method == "DELETE":
        obj = Schedule.objects.filter(id=did).first()
        if obj:
            if obj.is_active:
                data = {"code": 1, "msg": "该任务在运行中,请先停止任务再尝试删除"}
            else:
                Schedule.objects.filter(id=did).update(
                    deleted_at=human_datetime(), deleted_by=user)
                data = {"code": 0, "msg": "任务删除成功"}
            return JsonResponse(data)
    elif request.method == "PUT":
        obj = Schedule.objects.filter(id=did).first()
        if obj:
            if obj.is_active:
                obj.is_active = 0
                obj.save()
                message = {'id': did, 'action': 'remove'}
                data = {"code": 1, "msg": "任务已停止"}
            else:
                message = {'id': did, 'action': 'add'}
                message.update({
                    'trigger': obj.trigger,
                    'trigger_args': obj.trigger_args,
                    'command': obj.command,
                    'targets': obj.targets
                })
                obj.is_active = 1
                obj.save()
                data = {"code": 0, "msg": "任务启动成功"}
            rds_cli = get_redis_connection()
            rds_cli.lpush(settings.SCHEDULE_KEY, json.dumps(message))
            return JsonResponse(data)
コード例 #26
0
ファイル: views.py プロジェクト: aixan/aixan
def get_namespace(request):
    user = user_get(request)
    hostname = request.GET.get('hostname')

    auth_config(user, hostname)
    core_api = client.CoreV1Api()

    if request.method == "GET":
        list = []
        res = []
        try:
            for ns in core_api.list_namespace().items:
                dict = {}
                dict["name"] = ns.metadata.name
                dict["labels"] = ns.metadata.labels
                dict["phase"] = ns.status.phase
                dict["create_time"] = dt_format(ns.metadata.creation_timestamp)
                list.append(dict)
            if request.GET.get("pageIndex"):
                pageIndex = request.GET.get("pageIndex")
                pageSize = request.GET.get("pageSize")
                pageInator = Paginator(list, pageSize)
                context = pageInator.page(pageIndex)
                for item in context:
                    res.append(item)
            else:
                res = list
            data = {
                "code": 0,
                "msg": "ok",
                "DataCount": len(list),
                "data": res
            }
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
    elif request.method == "DELETE":
        request_data = QueryDict(request.body)
        name = request_data.get("name")
        try:
            core_api.delete_namespace(name)
            data = {"code": 0, "msg": "删除成功."}
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
    elif request.method == "ADD":
        request_data = QueryDict(request.body)
        name = request_data.get("name")
        labels = request_data.get("labels")
        try:
            dict = {}
            if not labels:
                pass
            else:
                labels = request_data.get("labels").split(",")
                for label in labels:
                    i, b = label.split(":")
                    dict[f"{i}"] = b
            body = {
                "apiVersion": "v1",
                "kind": "Namespace",
                "metadata": {
                    "name": name,
                    "labels": dict
                }
            }
            core_api.create_namespace(body)
            data = {"code": 0, "msg": "添加成功."}
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
    elif request.method == "EDIT":
        request_data = QueryDict(request.body)
        name = request_data.get("name")
        labels = request_data.get("labels")
        try:
            body = core_api.read_namespace(name)
            dict = {}

            if not labels:
                body.metadata.labels = None
            else:
                labels = request_data.get("labels").split(",")
                for label in labels:
                    i, b = label.split(":")
                    dict[f"{i}"] = b
                body.metadata.labels = dict
            core_api.replace_namespace(name, body)  # 全局更新
            # core_api.patch_namespace(name=name, body=body)  # 局部更新
            data = {"code": 0, "msg": "修改成功.", "data": dict}
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
コード例 #27
0
ファイル: views.py プロジェクト: aixan/aixan
def get_pv(request):
    user = user_get(request)
    hostname = request.GET.get('hostname')

    auth_config(user, hostname)
    core_api = client.CoreV1Api()

    if request.method == "GET":
        pageIndex = request.GET.get("pageIndex")
        pageSize = request.GET.get("pageSize")

        list = []
        res = []
        try:
            for pv in core_api.list_persistent_volume().items:
                dict = {}
                dict["name"] = pv.metadata.name
                dict["capacity"] = pv.spec.capacity["storage"]
                dict["access_modes"] = pv.spec.access_modes
                dict[
                    "reclaim_policy"] = pv.spec.persistent_volume_reclaim_policy
                dict["status"] = pv.status.phase
                if pv.spec.claim_ref is not None:
                    pvc_ns = pv.spec.claim_ref.namespace
                    pvc_name = pv.spec.claim_ref.name
                    dict["pvc"] = "%s / %s" % (pvc_ns, pvc_name)
                else:
                    dict["pvc"] = "未绑定"
                dict["tsorage_class"] = pv.spec.storage_class_name
                dict["create_time"] = dt_format(pv.metadata.creation_timestamp)
                list.append(dict)

            pageInator = Paginator(list, pageSize)
            context = pageInator.page(pageIndex)
            for item in context:
                res.append(item)
            data = {
                "code": 0,
                "msg": "ok",
                "DataCount": len(list),
                "data": res
            }
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
    elif request.method == "DELETE":
        request_data = QueryDict(request.body)
        name = request_data.get("name")
        try:
            core_api.delete_persistent_volume(name)
            data = {"code": 0, "msg": "删除成功."}
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
    elif request.method == "POST":
        name = request.POST.get("name", None)
        capacity = request.POST.get("capacity", None)
        access_mode = request.POST.get("access_mode", None)
        storage_type = request.POST.get("storage_type", None)
        server_ip = request.POST.get("server_ip", None)
        mount_path = request.POST.get("mount_path", None)
        body = client.V1PersistentVolume(
            api_version="v1",
            kind="PersistentVolume",
            metadata=client.V1ObjectMeta(name=name),
            spec=client.V1PersistentVolumeSpec(
                capacity={'storage': capacity},
                access_modes=[access_mode],
                nfs=client.V1NFSVolumeSource(server=server_ip,
                                             path="/ifs/kubernetes/%s" %
                                             mount_path)))
        try:
            core_api.create_persistent_volume(body=body)
            data = {"code": 0, "msg": "创建成功"}
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
コード例 #28
0
ファイル: views.py プロジェクト: aixan/aixan
def get_pod(request):
    user = user_get(request)
    hostname = request.GET.get('hostname')

    auth_config(user, hostname)
    core_api = client.CoreV1Api()

    if request.method == "GET":
        namespace = request.GET.get("namespace")
        pageIndex = request.GET.get("pageIndex")
        pageSize = request.GET.get("pageSize")

        list = []
        res = []
        try:
            for pods in core_api.list_namespaced_pod(namespace).items:
                dict = {}
                dict["name"] = pods.metadata.name
                dict["namespace"] = pods.metadata.namespace
                dict["pod_ip"] = pods.status.pod_ip
                dict["labels"] = pods.metadata.labels
                containers = []  # [{},{},{}]
                status = "None"
                # 只为None说明Pod没有创建(不能调度或者正在下载镜像)
                if pods.status.container_statuses is None:
                    status = pods.status.conditions[-1].reason
                    print(status)
                else:
                    for c in pods.status.container_statuses:
                        c_name = c.name
                        c_image = c.image
                        # 获取重启次数
                        restart_count = c.restart_count
                        # 获取容器状态
                        c_status = "None"
                        if c.ready is True:
                            c_status = "Running"
                        elif c.ready is False:
                            if c.state.waiting is not None:
                                c_status = c.state.waiting.reason
                            elif c.state.terminated is not None:
                                c_status = c.state.terminated.reason
                            elif c.state.last_state.terminated is not None:
                                c_status = c.last_state.terminated.reason

                        c = {
                            'c_name': c_name,
                            'c_image': c_image,
                            'restart_count': restart_count,
                            'c_status': c_status
                        }
                        containers.append(c)
                dict["containers"] = containers
                dict["phase"] = pods.status.phase
                dict["create_time"] = dt_format(
                    pods.metadata.creation_timestamp)
                list.append(dict)

            pageInator = Paginator(list, pageSize)
            context = pageInator.page(pageIndex)
            for item in context:
                res.append(item)
            data = {
                "code": 0,
                "msg": "ok",
                "DataCount": len(list),
                "data": res
            }
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
    elif request.method == "DELETE":
        request_data = QueryDict(request.body)
        name = request_data.get("name")
        namespace = request_data.get("namespace")
        try:
            core_api.delete_namespaced_pod(name, namespace)
            data = {"code": 0, "msg": "删除成功."}
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
    elif request.method == "LOG":
        request_data = QueryDict(request.body)
        name = request_data.get("name", None)
        namespace = request_data.get("namespace", None)
        # 目前没有对Pod多容器处理
        try:
            log_text = core_api.read_namespaced_pod_log(name=name,
                                                        namespace=namespace,
                                                        tail_lines=500)
            if len(log_text) == 0:
                data = {"code": 0, "msg": "获取日志成功", "data": "没有日志!"}
            else:
                data = {"code": 0, "msg": "获取日志成功", "data": log_text}
        except Exception as e:
            data = error(e)
        return JsonResponse(data)
コード例 #29
0
ファイル: views.py プロジェクト: aixan/aixan
def parsing_edit(request):
    request_data = QueryDict(request.body)
    user = user_get(request)
    did = request_data.get("id", None)
    if request.method == "GET":
        dom = Domains.objects.filter(deleted_by__id__isnull=True)
        did = request.GET.get('id', None)
        if did:
            data = Parsing.objects.get(id=did)
        else:
            data = ""
        return render(request, "domains/parsing_edit.html", {
            "data": data,
            "domain": dom
        })
    elif request.method == "POST":
        data = {
            "RR": request_data.get("RR"),
            "Type": request_data.get("Type"),
            "Value": request_data.get("Value"),
            "TTL": request_data.get("TTL"),
            "Line": request_data.get("Line"),
            "Priority": request_data.get("Priority", None),
            "RecordId": request_data.get("RecordId", None),
        }
        pars = Domains.objects.get(id=request_data.get("domain"))
        if did:
            api_key = Ali_Edit_Parsing(pars.api.key, pars.api.secret,
                                       pars.api.region, **data)
            if api_key['code'] == 0:
                Parsing.objects.filter(id=did).update(**data)
                data = {"code": 0, "msg": "域名解析修改成功~"}
            else:
                data = {"code": 0, "msg": "域名解析失败~"}
        else:
            api_key = Ali_Edit_Parsing(pars.api.key, pars.api.secret,
                                       pars.api.region, pars.domain, **data)
            if api_key['code'] == 0:
                data['RecordId'] = json.loads(api_key['data'])['RecordId']
                Parsing.objects.create(created_by=user, **data, domain=pars)
                data = {"code": 0, "msg": "域名解析添加成功~"}
            else:
                data = {"code": 0, "msg": "域名解析失败~"}
        return JsonResponse(data)
    elif request.method == "DELETE":
        Pars = Parsing.objects.filter(id=did)
        data = Ali_Del_Parsing(Pars.first().domain.api.key,
                               Pars.first().domain.api.secret,
                               Pars.first().domain.api.region,
                               Pars.first().RecordId)
        if data['code'] == 0:
            Pars.update(deleted_at=human_datetime(), deleted_by=user)
            data = {"code": 0, "msg": "域名解析同步删除成功~"}
        else:
            Pars.update(deleted_at=human_datetime(), deleted_by=user)
            data = {"code": 0, "msg": "域名解析本地删除成功~"}
        return JsonResponse(data)
    elif request.method == "SYNC":
        domain = Domains.objects.filter(deleted_by__id__isnull=True)
        if domain:
            for item in domain:
                api_key = Ali_Parsing(item.api.key, item.api.secret,
                                      item.api.region, item.domain)
                if api_key['code'] == 0:
                    data = json.loads(api_key['data'])
                    for dom in data['DomainRecords']['Record']:
                        if "Priority" in dom:
                            Priority = dom['Priority']
                        else:
                            Priority = None
                        di_ct = {
                            'RR': dom['RR'],
                            'Line': dom['Line'],
                            'Type': dom['Type'],
                            'Value': dom['Value'],
                            'RecordId': dom['RecordId'],
                            'TTL': dom['TTL'],
                            'domain_id': item.id,
                            'Priority': Priority
                        }
                        Parsing.objects.update_or_create(
                            RecordId=dom['RecordId'],
                            defaults=di_ct,
                            created_by=user)
                else:
                    pass
            data = {"code": 0, "msg": "域名解析同步成功~"}
        else:
            data = {"code": 1, "msg": "域名查找失败~"}
        return JsonResponse(data)
コード例 #30
0
ファイル: views.py プロジェクト: aixan/aixan
def api_edit(request):
    request_data = QueryDict(request.body)
    did = request_data.get("id", None)
    user = user_get(request)
    if request.method == "GET":
        did = request.GET.get('id')
        if did:
            data = Api.objects.get(id=did)
        else:
            data = ""
        return render(request, "domains/api_edit.html", {"data": data})

    elif request.method == "POST":
        data = {
            "name": request_data.get("name"),
            "cloud": request_data.get("cloud"),
            "region": request_data.get("region"),
            "key": request_data.get("key"),
            "secret": request_data.get("secret"),
            "desc": request_data.get("desc"),
        }
        api_key = Ali_Domain(data["key"], data["secret"], data["region"])
        if api_key['code'] == 0:
            if did:
                Api.objects.filter(id=did).update(**data)
                data = {"code": 0, "msg": "API修改成功~"}
            else:
                Api.objects.create(created_by=user, **data)
                data = {"code": 0, "msg": "API添加成功~"}
        else:
            data = {"code": 0, "msg": "API接口验证失败~"}
        return JsonResponse(data)

    elif request.method == "DELETE":
        Api.objects.filter(id__in=did.split(',')).update(
            deleted_at=human_datetime(), deleted_by=user)
        data = {"code": 0, "msg": "API删除成功~"}
        return JsonResponse(data)

    elif request.method == "PUT":
        if did:
            Api_obj = Api.objects.filter(id__in=did)
        else:
            Api_obj = Api.objects.all()
        if Api_obj.count() < 0:
            data = {"code": 1, "msg": f"请添加API接口"}
        else:
            li_st = []
            cg, sb = 0, 0
            for item in Api_obj:
                data = Ali_Domain(item.key, item.secret, item.region)
                if data['code'] == 0:
                    data = json.loads(data['data'])
                    for i in data['Domains']['Domain']:
                        di_ct = {
                            'api_id': item.id,
                            'domain': i['DomainName'],
                            'dns1': i['DnsServers']['DnsServer'][0],
                            'dns2': i['DnsServers']['DnsServer'][1]
                        }
                        Domains.objects.update_or_create(
                            domain=i['DomainName'],
                            defaults=di_ct,
                            created_by=user)
                    cg += 1
                else:
                    li_st.append(item.name)
                    sb += 1
            if sb > 1:
                data = {
                    "code":
                    1,
                    "msg":
                    f"同步异常,总:{Api_obj.count()},成功:{cg},失败:{sb},失败名称{str(li_st)}"
                }
            else:
                data = {
                    "code": 0,
                    "msg": f"同步成功,总:{Api_obj.count()},成功:{cg},失败:{sb}"
                }
        return JsonResponse(data)