主机管理+堡垒机系统开发:表结构设计(二)
一、创建django项目和app web
二、主机表
1、主机表代码:
"""存储所有主机""" hostname = models.CharField(max_length=64) ip_addr = models.GenericIPAddressField(unique=True) port = models.PositiveSmallIntegerField(default=22) idc = models.ForeignKey("IDC") enabled = models.BooleanField(default=True) #是否已启用,代表这台机器是否能登陆 def __str__(self): return self.ip_addr
1、hostname需要唯一的?
它不一定唯一,有可能是重的
2、这台机器的用户名密码要不要在这存?
不用,因为主机和用户名密码是一对多的 关系,一条存的下吗?
是否已启用,代表这台机器是否能登陆
2、IDC表代码
class IDC(models.Model): name = models.CharField(max_length=64,unique=True) def __str__(self): return self.name
三、主机组表
1、解决了什么问题:
一个人管理500台机器我给他一个一个添加吗?,我是不是要创建一个主机组
2、主机表代码
class HostGroup(models.Model): """主机组""" name = models.CharField(max_length=64, unique=True) hosts = models.ManyToManyField("Host") def __str__(self): return self.name
四、远程用户表
1、解决了什么问题:
有些远程的主机不能密钥,所以必须存密码
2、主机表代码
class RemoteUser(models.Model): """存储远程用户名密""" username = models.CharField(max_length=64) auth_type_choices = ((0,'ssh/password'),(1,'ssh/key')) auth_type = models.SmallIntegerField(choices=auth_type_choices,default=0) password = models.CharField(max_length=128,blank=True,null=True) hosts = models.ManyToManyField("Host") def __str__(self): return "%s(%s)%s" %( self.username,self.get_auth_type_display(),self.password)
3、字段设计原因
1、username要不要唯一?
为什么不用,这个账户里面存的是多台机器的用户名密码
2、可不可以有密钥和密码?
有些机器用密码,有些机器用密码,你总的区分吧!
3、password在这个存的是什么格式的?
- 存的是什么的密码?远程主机的你能在这加密吗?
- 你输入密码的时候输入的密文吗?你知道你机器上的密文在哪吗?你知道它的加密算法吗?
- 你加密了之后传给他,他认为是明文,然后他再加密一次。所以只能存明文
4、如果选择是密钥的时候?还需要存用户名和密码吗?
不需要
六、堡垒机账户表
class UserProfile(models.Model): """堡垒机的账户""" user = models.OneToOneField(User) name = models.CharField(max_length=64) bind_hosts = models.ManyToManyField("BindHost",blank=True) host_groups = models.ManyToManyField(HostGroup) def __str__(self): return self.name
作者:罗阿红
出处:http://www.cnblogs.com/luoahong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。