日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

CMDB之数据库表结构的设计

發(fā)布時(shí)間:2024/4/24 55 生活家
生活随笔 收集整理的這篇文章主要介紹了 CMDB之数据库表结构的设计 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

CMDB之?dāng)?shù)據(jù)庫表設(shè)計(jì)

1.開發(fā)CMDB的背景
很多公司還在用Excel維護(hù)資產(chǎn)信息,當(dāng)服務(wù)器數(shù)量變多時(shí),難以保證excel表格的正確性,而且不同部門之間交換信息不方便。實(shí)現(xiàn)自動(dòng)采集資產(chǎn),自動(dòng)匯報(bào),并自動(dòng)保存變更記錄。
2.CMDB架構(gòu)
- 資產(chǎn)采集(資產(chǎn)采集)
- API(接受數(shù)據(jù)保存入庫,對外提供數(shù)據(jù)接口)
- 后臺管理

3.資產(chǎn)采集方式
三種方案
- agent
- paramiko
- saltstack

4.服務(wù)器的唯一標(biāo)識
a.不需要采集虛擬機(jī)
- 采用主板的SN號作為唯一標(biāo)識。
b.需要采集虛擬機(jī)
- 對服務(wù)器進(jìn)行標(biāo)準(zhǔn)化,唯一標(biāo)識選用hostname

5.CMDB流程
- 裝機(jī)同時(shí),主機(jī)名在CMDB中設(shè)置
- 第一次采集,將主機(jī)名寫入文件,發(fā)送到API
- 第N次采集,主機(jī)名從直接從文件名中獲取。

6.表結(jié)構(gòu)圖示

7.django-models結(jié)構(gòu)

from django.db import models


class UserProfile(models.Model):
    """
    用戶信息
    """
    name = models.CharField(u'姓名', max_length=32)
    email = models.EmailField(u'郵箱')
    phone = models.CharField(u'座機(jī)', max_length=32)
    mobile = models.CharField(u'手機(jī)', max_length=32)

    class Meta:
        verbose_name_plural = "用戶表"

    def __str__(self):
        return self.name


class AdminInfo(models.Model):
    """
    用戶登陸相關(guān)信息
    """
    user_info = models.OneToOneField("UserProfile")
    username = models.CharField(u'用戶名', max_length=64)
    password = models.CharField(u'密碼', max_length=64)

    class Meta:
        verbose_name_plural = "管理員表"

    def __str__(self):
        return self.user_info.name


class UserGroup(models.Model):
    """
    用戶組
    """
    name = models.CharField(max_length=32, unique=True)
    users = models.ManyToManyField('UserProfile')

    class Meta:
        verbose_name_plural = "用戶組表"

    def __str__(self):
        return self.name


class BusinessUnit(models.Model):
    """
    業(yè)務(wù)線,業(yè)務(wù)聯(lián)系人和系統(tǒng)管理員
    """
    name = models.CharField('業(yè)務(wù)線', max_length=64, unique=True)
    contact = models.ForeignKey('UserGroup', verbose_name='業(yè)務(wù)聯(lián)系人', related_name='c')
    manager = models.ForeignKey('UserGroup', verbose_name='系統(tǒng)管理員', related_name='m')

    class Meta:
        verbose_name_plural = "業(yè)務(wù)線表"

    def __str__(self):
        return self.name


class IDC(models.Model):
    """
    機(jī)房信息
    """
    name = models.CharField('機(jī)房', max_length=32)
    floor = models.IntegerField('樓層', default=1)

    class Meta:
        verbose_name_plural = "機(jī)房表"

    def __str__(self):
        return self.name


class Tag(models.Model):
    """
    資產(chǎn)標(biāo)簽
    """
    name = models.CharField('標(biāo)簽', max_length=32, unique=True)

    class Meta:
        verbose_name_plural = "標(biāo)簽表"

    def __str__(self):
        return self.name


class Asset(models.Model):
    """
    資產(chǎn)信息表,所有資產(chǎn)公共信息(交換機(jī),服務(wù)器,防火墻等)
    """
    device_type_choices = (
        (1, '服務(wù)器'),
        (2, '交換機(jī)'),
        (3, '防火墻'),
    )
    device_status_choices = (
        (1, '上架'),
        (2, '在線'),
        (3, '離線'),
        (4, '下架'),
    )

    device_type_id = models.IntegerField(choices=device_type_choices, default=1)
    device_status_id = models.IntegerField(choices=device_status_choices, default=1)

    cabinet_num = models.CharField('機(jī)柜號', max_length=30, null=True, blank=True)
    cabinet_order = models.CharField('機(jī)柜中序號', max_length=30, null=True, blank=True)

    idc = models.ForeignKey('IDC', verbose_name='IDC機(jī)房', null=True, blank=True)
    business_unit = models.ForeignKey('BusinessUnit', verbose_name='屬于的業(yè)務(wù)線', null=True, blank=True)

    tag = models.ManyToManyField('Tag')

    latest_date = models.DateField(null=True)
    create_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name_plural = "資產(chǎn)表"

    def __str__(self):
        return "%s-%s-%s" % (self.idc.name, self.cabinet_num, self.cabinet_order)


class Server(models.Model):
    """
    服務(wù)器信息
    """
    asset = models.OneToOneField('Asset')

    hostname = models.CharField(max_length=128, unique=True)
    sn = models.CharField('SN號', max_length=64, db_index=True)
    manufacturer = models.CharField(verbose_name='制造商', max_length=64, null=True, blank=True)
    model = models.CharField('型號', max_length=64, null=True, blank=True)

    manage_ip = models.GenericIPAddressField('管理IP', null=True, blank=True)

    os_platform = models.CharField('系統(tǒng)', max_length=16, null=True, blank=True)
    os_version = models.CharField('系統(tǒng)版本', max_length=16, null=True, blank=True)

    cpu_count = models.IntegerField('CPU個(gè)數(shù)', null=True, blank=True)
    cpu_physical_count = models.IntegerField('CPU物理個(gè)數(shù)', null=True, blank=True)
    cpu_model = models.CharField('CPU型號', max_length=128, null=True, blank=True)

    create_at = models.DateTimeField(auto_now_add=True, blank=True)

    class Meta:
        verbose_name_plural = "服務(wù)器表"

    def __str__(self):
        return self.hostname


class NetworkDevice(models.Model):
    asset = models.OneToOneField('Asset')
    management_ip = models.CharField('管理IP', max_length=64, blank=True, null=True)
    vlan_ip = models.CharField('VlanIP', max_length=64, blank=True, null=True)
    intranet_ip = models.CharField('內(nèi)網(wǎng)IP', max_length=128, blank=True, null=True)
    sn = models.CharField('SN號', max_length=64, unique=True)
    manufacture = models.CharField(verbose_name=u'制造商', max_length=128, null=True, blank=True)
    model = models.CharField('型號', max_length=128, null=True, blank=True)
    port_num = models.SmallIntegerField('端口個(gè)數(shù)', null=True, blank=True)
    device_detail = models.CharField('設(shè)置詳細(xì)配置', max_length=255, null=True, blank=True)

    class Meta:
        verbose_name_plural = "網(wǎng)絡(luò)設(shè)備"


class Disk(models.Model):
    """
    硬盤信息
    """
    slot = models.CharField('插槽位', max_length=8)
    model = models.CharField('磁盤型號', max_length=32)
    capacity = models.FloatField('磁盤容量GB')
    pd_type = models.CharField('磁盤類型', max_length=32)
    server_obj = models.ForeignKey('Server',related_name='disk')

    class Meta:
        verbose_name_plural = "硬盤表"

    def __str__(self):
        return self.slot


class NIC(models.Model):
    """
    網(wǎng)卡信息
    """
    name = models.CharField('網(wǎng)卡名稱', max_length=128)
    hwaddr = models.CharField('網(wǎng)卡mac地址', max_length=64)
    netmask = models.CharField(max_length=64)
    ipaddrs = models.CharField('ip地址', max_length=256)
    up = models.BooleanField(default=False)
    server_obj = models.ForeignKey('Server',related_name='nic')


    class Meta:
        verbose_name_plural = "網(wǎng)卡表"

    def __str__(self):
        return self.name


class Memory(models.Model):
    """
    內(nèi)存信息
    """
    slot = models.CharField('插槽位', max_length=32)
    manufacturer = models.CharField('制造商', max_length=32, null=True, blank=True)
    model = models.CharField('型號', max_length=64)
    capacity = models.FloatField('容量', null=True, blank=True)
    sn = models.CharField('內(nèi)存SN號', max_length=64, null=True, blank=True)
    speed = models.CharField('速度', max_length=16, null=True, blank=True)

    server_obj = models.ForeignKey('Server',related_name='memory')


    class Meta:
        verbose_name_plural = "內(nèi)存表"

    def __str__(self):
        return self.slot


class AssetRecord(models.Model):
    """
    資產(chǎn)變更記錄,creator為空時(shí),表示是資產(chǎn)匯報(bào)的數(shù)據(jù)。
    """
    asset_obj = models.ForeignKey('Asset', related_name='ar')
    content = models.TextField(null=True)# 新增硬盤
    creator = models.ForeignKey('UserProfile', null=True, blank=True) #
    create_at = models.DateTimeField(auto_now_add=True)


    class Meta:
        verbose_name_plural = "資產(chǎn)記錄表"

    def __str__(self):
        return "%s-%s-%s" % (self.asset_obj.idc.name, self.asset_obj.cabinet_num, self.asset_obj.cabinet_order)


class ErrorLog(models.Model):
    """
    錯(cuò)誤日志,如:agent采集數(shù)據(jù)錯(cuò)誤 或 運(yùn)行錯(cuò)誤
    """
    asset_obj = models.ForeignKey('Asset', null=True, blank=True)
    title = models.CharField(max_length=16)
    content = models.TextField()
    create_at = models.DateTimeField(auto_now_add=True)

    class Meta:
        verbose_name_plural = "錯(cuò)誤日志表"

    def __str__(self):
        return self.title

總結(jié)

以上是生活随笔為你收集整理的CMDB之数据库表结构的设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。