[svc]堡垒机模型设计初步

models

from django.contrib.auth.models import AbstractUser
from django.db import models


# Create your models here.

class RemoteUser(models.Model):
    """主机账号"""
    auth_type = models.SmallIntegerField(choices=((0, 'sshpass'), (1, 'sshkey')), default=0)
    username = models.CharField(max_length=30)
    password = models.CharField(max_length=60, blank=True, null=True)

    class Meta:
        unique_together = ("auth_type", "username", "password")
        verbose_name = "主机账号"
        verbose_name_plural = verbose_name

    def __str__(self):
        return "%s/%s" % (self.username, self.password)


class HostGroup(models.Model):
    """主机组"""
    name = models.CharField(max_length=30)

    # hosts = models.ForeignKey(Hosts, on_delete=models.CASCADE)

    class Meta:
        verbose_name = "主机组"
        verbose_name_plural = verbose_name

    def __str__(self):
        return "%s" % (self.name)


class Hosts(models.Model):
    """主机"""
    name = models.CharField(max_length=30, unique=True)
    ip = models.GenericIPAddressField(unique=True)
    port = models.SmallIntegerField(default=22)
    idc = models.ForeignKey("IDC", on_delete=models.CASCADE)
    # remote_user = models.ManyToManyField(RemoteUser)
    host_group = models.ForeignKey(HostGroup, on_delete=models.CASCADE)

    class Meta:
        verbose_name = "主机"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name


class HostToRemoteUser(models.Model):
    """主机和账号绑定"""
    host = models.ForeignKey(Hosts, on_delete=models.CASCADE)
    remote_user = models.ForeignKey(RemoteUser, on_delete=models.CASCADE)


class IDC(models.Model):
    name = models.CharField(max_length=30, unique=True)

    class Meta:
        verbose_name = "IDC机房"
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.name


# class UserProfile(AbstractUser):
#     # host_to_remote_users = models.ManyToManyField("HostToRemoteUser", blank=True, null=True)
#     # host_groups = models.ManyToManyField("HostGroup", blank=True, null=True)
#     tel = models.CharField(max_length=30)
#
#     class Meta:
#         verbose_name = "用户信息"
#         verbose_name_plural = verbose_name
#
#     def __str__(self):
#         return self.username

admin

from django.contrib import admin

from .models import RemoteUser, Hosts, HostGroup, IDC, HostToRemoteUser


# Register your models here.

class RemoteUserAdmin(admin.ModelAdmin):
    """主机账号"""
    list_display = ("username", "password")


class HostsAdmin(admin.ModelAdmin):
    """主机"""
    list_display = ("name", "ip", "port","idc","host_group")


class HostGroupAdmin(admin.ModelAdmin):
    """主机组"""
    list_display = ("name",)


class IDCAdmin(admin.ModelAdmin):
    """主机组"""
    list_display = ("name",)


class HostToRemoteUserAdmin(admin.ModelAdmin):
    """主机组"""
    list_display = ("host", "remote_user")


admin.site.register(RemoteUser, RemoteUserAdmin)
admin.site.register(Hosts, HostsAdmin)
admin.site.register(HostGroup, HostGroupAdmin)
admin.site.register(HostToRemoteUser, HostToRemoteUserAdmin)
admin.site.register(IDC, IDCAdmin)
原文地址:https://www.cnblogs.com/iiiiiher/p/8648428.html