CMDB开发之基础搭建

cmdb的介绍与需求

CMDB(配置管理数据库)存储与管理企业IT架构中设备的各种配置信息,它与所有服务支持和服务交付流程都紧密相联,支持这些流程的运转、发挥配置信息的价值,同时依赖于相关流程保证数据的准确性。
上面是对cmdb系统的介绍,但是我们的cmdb项目要比定义当中的cmdb具有更加完备的功能
我们cmdb系统具备以下的功能:
1、 数据添加
2、 数据查询/搜索
3、 自动收集服务器信息
4、 服务器远程操作
5、 数据可视化展示
6、 监控数据接口提供
7、 权限控制
8、 数据导出
9、 生成CSV格式
所以说我们创建的cmdb系统是一个收集服务器基础信息,实现服务器信息可视化,为自动化运维数据监控、数据统计、提供数据基础的系统。
首先cmdb的对外的关联图:
CMDB开发之基础搭建_第1张图片
然后我们再看一下cmdb系统结构图:
CMDB开发之基础搭建_第2张图片

python cmdb数据库建模

我们首先通过Visio画个图来了解一下服务器CPU,服务器内存,服务器用户三个主题之间的关系:
CMDB开发之基础搭建_第3张图片
服务器
服务器的基本信息

ip
mac
cpu
memory
disk
isalive

服务器cpu详细信息

processor	
vendor_id	
cpu_family	
model		
model_name	
stepping	 
microcode	
cpu_MHz		
cache_size	
physical_id	
siblings	
core_id		
cpu_cores
......

服务器内存的详细信息

MemTota
MemFree
MemAvailable
Buffers
Cached
SwapCached
Active
Inactive
Active(anon)
Inactive(anon)
Active(file)
......

用户
用户必要信息

uername
password

用户的选填信息

nickname
phone
email
photo

接口
接口信息

name
description
doc	(接口文档)

python cmdb前端基础搭建

首先我们的开发环境需要准备好:
Python 3.5
Django 1.8.2 : pip install django==1.8.2
Pillow : pip install pillow
Django-ckeditor:pip install django-ckeditor

  1. 创建项目
    跟之前创建个人博客一样的做法,进入到你选好的目录下,在此处打开cmd,开始创建项目。
    django-admin startproject ALLENCMDB

CMDB开发之基础搭建_第4张图片
2. 创建app的目录

cd .\ALLENCMDB
python3 .\manage.py startapp server
python3 .\manage.py startapp User
python3 .\manage.py startapp Api

CMDB开发之基础搭建_第5张图片
3. 创建静态文件目录
CMDB开发之基础搭建_第6张图片
4. 保存静态文件
还是老样子,我们将模板文件中的静态文件和网页模板导入到项目中的静态文件夹。
这是我的项目所用到的模板
链接:https://pan.baidu.com/s/1vj0Lszgu_9GJFXe9Wm0AOg
提取码:avc0
CMDB开发之基础搭建_第7张图片
CMDB开发之基础搭建_第8张图片
5. 数据库orm的建模
在我们项目的models当中创建模型
在django当中数据建模分为两种
我们在\ALLENCMDB\Server\models.py中编写我们的数据表结构
1、中小型项目可以直接用django自带的外键和多对多关系进行数据关联

class CMDBUser(models.Model):
    	'''
    	cmdb系统用户信息
   	 一个用户可以对应多台服务器,一台服务器可以有多个用户
   	 所以他们之间是多对多关系
    	'''
    	username = models.CharField(max_length=32,verbose_name='用户账号')
    	password = models.CharField(max_length=32,verbose_name='用户密码')
    	nickname = models.CharField(max_length=32,verbose_name='用户姓名')
    	phone = models.CharField(max_length=32,verbose_name='用户手机号')
    	email = models.EmailField(verbose_name='用户邮箱')
    	photo = models.ImageField(verbose_name='用户头像',upload_to='images')
    	service = models.ManyToManyField(Server) #通过这个字段创建关联

2、在中大型项目由于开发需求多变,多数项目采用自定义表关系
这些表的定义,没有什么多说的,就是把你需要的信息作为关键字进行数据库建表,方便后期的信息录入,以下就是数据库建表的代码:

class Server(models.Model):
    	'''
   	 服务器基本信息
    	'''
    	ip = models.CharField(max_length=32,verbose_name='服务器ip')
    	mac = models.CharField(max_length=32,verbose_name='服务器物理地址')
    	cpu = models.CharField(max_length=32,verbose_name='服务器CPU')
    	memory = models.CharField(max_length=32,verbose_name='服务器内存')
    	disk = models.CharField(max_length=32,verbose_name='服务器磁盘')
   	 isalive = models.CharField(max_length=32,verbose_name='服务器状态')


class Cpu(models.Model):
    	'''
    	服务器CPU详细信息
    	'''
    	processor = models.CharField(max_length=32,blank=True,null=True)
   	 vendor_id = models.CharField(max_length=32,blank=True,null=True)
    	cpu_family = models.CharField(max_length=32,blank=True,null=True)
   	 model = models.CharField(max_length=32,blank=True,null=True)
    	model_name = models.CharField(max_length=32,blank=True,null=True)
   	 stepping = models.CharField(max_length=32,blank=True,null=True)
    	microcode = models.CharField(max_length=32,blank=True,null=True)
    	cpu_MHz = models.CharField(max_length=32,blank=True,null=True)
  


class Memory(models.Model):
       	 '''
       	 服务器内存详细信息
       	 '''
       	 MemTota = models.CharField(max_length=32,blank=True,null=True)
       	 MemFree = models.CharField(max_length=32,blank=True,null=True)
        	MemAvailable = models.CharField(max_length=32,blank=True,null=True)
        	Buffers = models.CharField(max_length=32,blank=True,null=True)
       	 Cached = models.CharField(max_length=32,blank=True,null=True)
        	SwapCached = models.CharField(max_length=32,blank=True,null=True)
       	 Active = models.CharField(max_length=32,blank=True,null=True)
        	Inactive = models.CharField(max_length=32,blank=True,null=True)
        	Active_anon = models.CharField(max_length=32,blank=True,null=True)
        	Inactive_anon = models.CharField(max_length=32,blank=True,null=True)
       	 Active_file = models.CharField(max_length=32,blank=True,null=True)
       	 Inactive_file = models.CharField(max_length=32,blank=True,null=True)
        	Unevictable = models.CharField(max_length=32,blank=True,null=True)
        	Mlocked = models.CharField(max_length=32,blank=True,null=True)
        	SwapTotal = models.CharField(max_length=32,blank=True,null=True)

class Server_Cpu(models.Model):
 '''
	服务器与CPU关联
	'''
	server_id = models.IntegerField()
	cpu_id = models.IntegerField()

class Server_memory(models.Model):
	'''
	服务器与内存关联
	'''
	server_id = models.IntegerField()
	memory_id = models.IntegerField()

我们两种结合
这里我们注意要导入富文本编辑器
from ckeditor_uploader.fields import RichTextUploadingField

class Api(models.Model):
     """
    	CMDB接口数据模型
   	 """
   	name = models.CharField(max_length = 32,verbose_name = "接口名称")
    description = RichTextUploadingField(verbose_name = "接口描述") #采用富文本编辑器编写的接口描述字段
    doc = models.CharField(max_length = 64,verbose_name = "接口文档")

3、 完成settings基本配置
Settings:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

这是Python1.6版本之后添加出来的配置,就是动态的指向项目根目录的一个配置
CMDB开发之基础搭建_第9张图片
加载App
CMDB开发之基础搭建_第10张图片
其中前三项是我们自定义的应用
后两项是ckeditor的应用
指定HTML文件存放目录
CMDB开发之基础搭建_第11张图片
数据库配置,我们选择Python自带sqlite数据库,如果你需要其他数据库,按照要求配置连接。
CMDB开发之基础搭建_第12张图片
语言与事件的配置
CMDB开发之基础搭建_第13张图片
静态文件配置
CMDB开发之基础搭建_第14张图片
大家经常出现的问题就是静态文件加载不对,表现没有前端样式
1、 请检测STATICFILES_DIRS是否正确,有没有加“S”
2、 请检测元组是不是加了逗号
媒体配置
CMDB开发之基础搭建_第15张图片
App静态文件加载位置(注意这里需要在static目录下手动建立ckeditor,不然等会收集静态文件时会报错)
CMDB开发之基础搭建_第16张图片
Ckeditor配置
CMDB开发之基础搭建_第17张图片
配置ckeditor的路由
CMDB开发之基础搭建_第18张图片
收集ckeditor的静态文件

python manage.py collectstatic

选择yes
CMDB开发之基础搭建_第19张图片
在这里我们为了测试配置的效果,我们将我们的数据表安装到admin后台当中
CMDB开发之基础搭建_第20张图片
然后同步数据库,同时启动项目
1、 校验配置

python manage.py validate

CMDB开发之基础搭建_第21张图片
2、 生成数据库语句

python manage.py makemigrations
CMDB开发之基础搭建_第22张图片
3、 进行数据库同步

 python manage.py syncdb

CMDB开发之基础搭建_第23张图片
项目第一次同步在django1.4之后会询问是否创建后台超级用户
CMDB开发之基础搭建_第24张图片
访问我们Django后台如图:
CMDB开发之基础搭建_第25张图片
完成模板页
1、指出base页,这里是base.html
我将所有的模板文件放进一个文件夹以方便使用,然后新建一个base.html文件作为模板
CMDB开发之基础搭建_第26张图片
视图文件
CMDB开发之基础搭建_第27张图片
路由指出
CMDB开发之基础搭建_第28张图片
现在我们打开页面是有问题的,没有加载样式
CMDB开发之基础搭建_第29张图片
所以接下来我们需要修改其中的静态文件路径
CMDB开发之基础搭建_第30张图片
然后我们再次访问,刷新页面后就正常啦。
CMDB开发之基础搭建_第31张图片
进行模板设置
模板设置常用块儿
1、 标题块儿
要有默认值,如果标题没有写,也有要默认值
CMDB开发之基础搭建_第32张图片
2、 样式块儿
目的是为了给各自页(继承页)添加自己的样式
CMDB开发之基础搭建_第33张图片
3、 内容块儿
用来存放内容,可以分成多个块儿
比如当前
CMDB开发之基础搭建_第34张图片
CMDB开发之基础搭建_第35张图片
4、 js脚本块儿
js在HTML当中有先后顺序,后加载的可以导入先加载的,比如vue.js依赖jq,所以我们写导入先导入jq,再导入vue.js
还有部分js写在我们HTML页面的标签当中,那么这个没有顺序,这个执行顺序依赖js代码编写
CMDB开发之基础搭建_第36张图片
2、 进行模板加载
代码在此:
index.html

{% extends "base.html" %} 

{% block title %}
    ALLEN CMDB系统-首页
{% endblock %}

{% block label %}
    ALLEN CMDB系统-首页
{% endblock %}

{% block content %}
    这是我的首页
{% endblock %}

{% block script %} 
    
{% endblock %}

\ALLENCMDB\ALLENCMDB\views.py

#coding:utf-8
from django.shortcuts import render_to_response


def index(request):
    return render_to_response("index.html")

路由指出
CMDB开发之基础搭建_第37张图片
效果如下:
CMDB开发之基础搭建_第38张图片
当然你可以进一步去更改自己的首页风格,我很期待你的作品哦!

你可能感兴趣的:(项目开发)