Created on 2017年6月6日
第1课 上节作业 10minutes
显示页面时,只有登录了才能显示,没登录会弹出一个登录框,就是一个遮挡层
第2课 自动化之路和CMBD地位 22minutes
CMDB:
自动安装
配置管理系统
CMDB运维资产管理系统(所有系统都需要调用这里的信息)---核心所在
图表工具
highchats
echats
CMDB:
采集硬件数据
API汇报----开放给所有外部,收集信息,通过API写入到数据库
页面管理
大概流程:Client Agent通过URL向API汇报====>API接收后存到数据库中====>后台管理通过调用数据库,对数据进行增删改查
第3课 CMDB之puppet采集数据方式 21minutes
采集puppet去操作
puppet:
factor ==> 结果以Key/value方式存在 (Saltstack ===> grains)
report ==> 只要master/slive连接一次,就执行report process函数
master(保存配置信息,和slive半小时连接一次,可更改)
slive(从Master获取配置,用此配置得到本地硬件信息)
可通过puppet采集硬件信息,严重依赖puppet
第4课 CMDB之自定义python插件采集数据方式 11minutes
通过Python程序来调用Shell收集硬件信息
新建了个day15_pj的程序,代码不完整,需补充
第5课 CMDB之django实现API 35minutes
每个Agang里得到都是字典,包含设备的硬件信息
通过对视频里的脚本的复制,部分未看到
可以通过httplib 的方式将数据发送到一个函数里
Created on 2017年6月7日
第6课 CMDB之数据流执行过程回顾 18minutes
def RequestUrl(host,port,source,params,timeout):
headers = {'Content-type':'applicaton/','Accept':'text/plain'}
try:
conn = httplib.HTTPConnection(host,port,timeout)
conn.request('POST',source,params,headers)
response = conn.getresponse()
original = response.read()
except Exception,e:
raise e
return original
server_info = {'cpu':'idle'}
if __name__ == '__main':
while True:
#通过Plugin获取硬件信息
#将所的获得的信息组合成一个字典,将字典发送到一个API
#API保存信息到数据库
RequestData = urllib.urlencode({'data':server_info})
result = RequestUrl('127.0.0.1','8888','/recelve_server_info',RequestData,30)
print '========result: %s =========='%(result,)
time.sleep(50)
第7课 CMDB之rest_framework开始API一 31minutes
可以测试Httplib程序
-----------------------------------------------------------------
# -*- coding: utf-8 -*-
'''
Created on 2017年6月7日 @author: louts
'''
import os
import httplib
import time
import json
import urllib
from plugins import DiskPlugin
from plugins import MemoryPlugin
class Program():
def __init__(self):
hostname = os.environ['HOSTNAME']
self.server_info = ''
def execute(self):
big_dict = {}
#对每个插件获得的数据直接拉过来,放大一个大字典里
ram = MemoryPlugin.MemoryPlugin
ram_dict = ram.execute()
big_dict = {
'ram':ram_dict,
}
RequestData = {'data':big_dict}
#格式化数据
RequestData = urllib.urlencode({'data':server_info})
#发送数据
self.requestUrl('127.0.0.1','8000','/api/',RequestData,30)
#通过httplib向URL发送请求 (代码已完整)
#http://127.0.0.1:8000/index/
#host:127.0.0.1 port:8000 source:/index/ params:data
def requestUrl(self,host,port,source,params,timeout):
headers = {'Content-type':'applicaton/','Accept':'text/plain'}
try:
conn = httplib.HTTPConnection(host,port,timeout)
conn.request('POST',source,params,headers)
response = conn.getresponse()
original = response.read()
except Exception,e:
raise e
return original
if __name__ == '__main__':
times = 0
while True:
objProgram = Program()
objProgram.execute()
times += 1
time.sleep(30000)
-----------------------------------------------------------------
Python开放接口,其实就是写一个函数,将信息进行返回
def install_os(request):
#从数据库取数据
#用Json进行封装
#返回给用户
pass
#REST是Representational State Transfer的简称,中文翻译为“表征状态转移”
def server(request):
#REST里的函数用名词来定义
#可用行业的规则来操作,增删改查
method = post,delete,put,get
if post:
Add
if delete:
del
if put:
update
if get:
Select
Django REST framework
pip install djangorestframework
pip install markdown # Markdown support for the browsable API.
pip install django-filter # Filtering support
Created on 2017年6月10日
第8课 CMDB之rest_framework开始API二 32minutes
这里有点问题,需要学习,在URL里不能有两个URL,将原来的URL并到新的当中就可以看到了
还不知道如何增删改查
#------rest-framework------------------
from django.conf.urls import url, include
from django.contrib.auth.models import User
from app01.models import Book
#这里导入有问题
from rest_framework import routers, serializers, viewsets
# Serializers define the API representation.
#这个类直接序列化queryset得到的数据
class UserSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
#这里是定义的数据库类
model = User
fields = ('url', 'username', 'email', 'is_staff')
# ViewSets define the view behavior.
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
class BookSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
#这里是定义的数据库类
model = Book
fields = ('url', 'name', 'auth')
# ViewSets define the view behavior.
class BookViewSet(viewsets.ModelViewSet):
queryset = Book.objects.all()
serializer_class = BookSerializer
# Routers provide an easy way of automatically determining the URL conf.
router = routers.DefaultRouter()
router.register(r'users', UserViewSet)
router.register(r'books', BookViewSet)
urlpatterns = [
url(r'^', include(router.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
url(r'^recevie_server_info/', views.recevie_server_info),
url(r'^admin/', admin.site.urls),
]
#----------------------------------
视频中的URL有POST,实际操作中没有这个功能
Chrome插件POSTMAN可以对页面进行操作。
Created on 2017年6月11日
第9课 CMDB之表结构设计 41minutes
可以通过rest_framework的装饰器来限制增删改查,但实验未成功
---------------------------------------------------
from rest_framework.decorators import api_view
from rest_framework.response import Response
#rest_framework装饰器
@api_view(['GET','PUT','POST','DELETE'])
def servers(request):
#REST是Representational State Transfer的简称,中文翻译为“表征状态转移”
#REST里的函数用名词来定义
#可用行业的规则来操作,增删改查
#method = post,delete,put,get
method = request.method
if method == 'POST':
return Response('ddd')
-------------------------------------------------------
创建数据库,一个Asset表对应一大堆的后端设备及CPU和内存信息
Created on 2017年6月18日
第10课 CMDB之表结构设计 41minutes