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