1. 程式人生 > >CMDB開發之基礎搭建

CMDB開發之基礎搭建

cmdb的介紹與需求

CMDB(配置管理資料庫)儲存與管理企業IT架構中裝置的各種配置資訊,它與所有服務支援和服務交付流程都緊密相聯,支援這些流程的運轉、發揮配置資訊的價值,同時依賴於相關流程保證資料的準確性。
上面是對cmdb系統的介紹,但是我們的cmdb專案要比定義當中的cmdb具有更加完備的功能
我們cmdb系統具備以下的功能:
1、 資料新增
2、 資料查詢/搜尋
3、 自動收集伺服器資訊
4、 伺服器遠端操作
5、 資料視覺化展示
6、 監控資料介面提供
7、 許可權控制
8、 資料匯出
9、 生成CSV格式
所以說我們建立的cmdb系統是一個收集伺服器基礎資訊,實現伺服器資訊視覺化,為自動化運維資料監控、資料統計、提供資料基礎的系統。
首先cmdb的對外的關聯圖:
在這裡插入圖片描述


然後我們再看一下cmdb系統結構圖:
在這裡插入圖片描述

python cmdb資料庫建模

我們首先通過Visio畫個圖來了解一下伺服器CPU,伺服器記憶體,伺服器使用者三個主題之間的關係:
在這裡插入圖片描述
伺服器
伺服器的基本資訊

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

在這裡插入圖片描述
2. 建立app的目錄

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

在這裡插入圖片描述
3. 建立靜態檔案目錄
在這裡插入圖片描述
4. 儲存靜態檔案
還是老樣子,我們將模板檔案中的靜態檔案和網頁模板匯入到專案中的靜態資料夾。
這是我的專案所用到的模板
連結:https://pan.baidu.com/s/1vj0Lszgu_9GJFXe9Wm0AOg
提取碼:avc0
在這裡插入圖片描述
在這裡插入圖片描述
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版本之後添加出來的配置,就是動態的指向專案根目錄的一個配置
在這裡插入圖片描述
載入App
在這裡插入圖片描述
其中前三項是我們自定義的應用
後兩項是ckeditor的應用
指定HTML檔案存放目錄
在這裡插入圖片描述
資料庫配置,我們選擇Python自帶sqlite資料庫,如果你需要其他資料庫,按照要求配置連線。
在這裡插入圖片描述
語言與事件的配置
在這裡插入圖片描述
靜態檔案配置
在這裡插入圖片描述
大家經常出現的問題就是靜態檔案載入不對,表現沒有前端樣式
1、 請檢測STATICFILES_DIRS是否正確,有沒有加“S”
2、 請檢測元組是不是加了逗號
媒體配置
在這裡插入圖片描述
App靜態檔案載入位置(注意這裡需要在static目錄下手動建立ckeditor,不然等會收集靜態檔案時會報錯)
在這裡插入圖片描述
Ckeditor配置
在這裡插入圖片描述
配置ckeditor的路由
在這裡插入圖片描述
收集ckeditor的靜態檔案

python manage.py collectstatic

選擇yes
在這裡插入圖片描述
在這裡我們為了測試配置的效果,我們將我們的資料表安裝到admin後臺當中
在這裡插入圖片描述
然後同步資料庫,同時啟動專案
1、 校驗配置

python manage.py validate

在這裡插入圖片描述
2、 生成資料庫語句

python manage.py makemigrations
在這裡插入圖片描述
3、 進行資料庫同步

 python manage.py syncdb

在這裡插入圖片描述
專案第一次同步在django1.4之後會詢問是否建立後臺超級使用者
在這裡插入圖片描述
訪問我們Django後臺如圖:
在這裡插入圖片描述
完成模板頁
1、指出base頁,這裡是base.html
我將所有的模板檔案放進一個資料夾以方便使用,然後新建一個base.html檔案作為模板
在這裡插入圖片描述
檢視檔案
在這裡插入圖片描述
路由指出
在這裡插入圖片描述
現在我們開啟頁面是有問題的,沒有載入樣式
在這裡插入圖片描述
所以接下來我們需要修改其中的靜態檔案路徑
在這裡插入圖片描述
然後我們再次訪問,重新整理頁面後就正常啦。
在這裡插入圖片描述
進行模板設定
模板設定常用塊兒
1、 標題塊兒
要有預設值,如果標題沒有寫,也有要預設值
在這裡插入圖片描述
2、 樣式塊兒
目的是為了給各自頁(繼承頁)新增自己的樣式
在這裡插入圖片描述
3、 內容塊兒
用來存放內容,可以分成多個塊兒
比如當前
在這裡插入圖片描述
在這裡插入圖片描述
4、 js指令碼塊兒
js在HTML當中有先後順序,後加載的可以匯入先載入的,比如vue.js依賴jq,所以我們寫匯入先匯入jq,再匯入vue.js
還有部分js寫在我們HTML頁面的標籤當中,那麼這個沒有順序,這個執行順序依賴js程式碼編寫
在這裡插入圖片描述
2、 進行模板載入
程式碼在此:
index.html

{% extends "base.html" %} <!-- 這個標籤的引數需要加引號 -->

{% block title %}
    ALLEN CMDB系統-首頁
{% endblock %}

{% block label %}
    ALLEN CMDB系統-首頁
{% endblock %}

{% block content %}
    這是我的首頁
{% endblock %}

{% block script %} <!-- 這個做出一個彈出的測試框 -->
    <script>
        $(
             function () {
                 alert("hello world")
             }
        )
    </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")

路由指出
在這裡插入圖片描述
效果如下:
在這裡插入圖片描述
當然你可以進一步去更改自己的首頁風格,我很期待你的作品哦!