运维自动化路线:

cmdb的开发需要包含三部分功能:

采集硬件数据

API

页面管理

执行流程:服务器的客户端采集硬件数据,然后将硬件信息发送到API,API负责将获取到的数据保存到数据库中,后台管理程序负责对服务器信息的配置和展示。

采集硬件信息

采集硬件信息可以有两种方式实现:

利用puppet中的report功能

自己写agent,定时执行

两种方式的优缺点各异:方式一,优点是不需要在每台服务器上步一个agent,缺点是依赖于puppet,并且使用ruby开发;方式二,优点是用于python调用shell命令,学习成本低,缺点是需要在每台服务器上发一个agent。

方式一

默认情况下,puppet的client会在每半个小时连接puppet的master来同步数据,如果定义了report,那么在每次client和master同步数据时,会执行report的process函数,在该函数中定义一些逻辑,获取每台服务器信息并将信息发送给API

puppet中默认自带了5个report,放置在【/usr/lib/ruby/site_ruby/1.8/puppet/reports/】路径下。如果需要执行某个report,那么就在puppet的master的配置文件中做如下配置:

on master

/etc/puppet/puppet.conf

[main]

reports = store #默认

#report = true #默认

#pluginsync = true #默认

on client

/etc/puppet/puppet.conf

[main]

#report = true #默认

[agent]

runinterval = 10

server = master.puppet.com

certname = c1.puppet.com

如上述设置之后,每次执行client和master同步,就会在master服务器的 【/var/lib/puppet/reports】路径下创建一个文件,主动执行:puppet agent  --test

所以,我们可以创建自己的report来实现cmdb数据的采集,创建report也有两种方式。

Demo 1

1、创建report

/usr/lib/ruby/site_ruby/1.8/puppet/reports/cmdb.rb

require 'puppet'

require 'fileutils'

require 'puppet/util'

SEPARATOR = [Regexp.escape(File::SEPARATOR.to_s), Regexp.escape(File::ALT_SEPARATOR.to_s)].join

Puppet::Reports.register_report(:cmdb) do

desc "Store server info

These files collect quickly -- one every half hour -- so it is a good idea

to perform some maintenance on them if you use this report (it's the only

default report)."

def process

certname = self.name

now = Time.now.gmtime

File.open("/tmp/cmdb.json",'a') do |f|

f.write(certname)

f.write(' | ')

f.write(now)

f.write("\r\n")

end

end

end

2、应用report

/etc/puppet/puppet.conf

[main]

reports = cmdb

#report = true #默认

#pluginsync = true #默认

Demo 2

1、创建report

在 /etc/puppet/modules 目录下创建如下文件结构:

modules└── cmdb├── lib│   └── puppet│       └── reports│           └── cmdb.rb└── manifests└── init.pp

require 'puppet'

require 'fileutils'

require 'puppet/util'

SEPARATOR = [Regexp.escape(File::SEPARATOR.to_s), Regexp.escape(File::ALT_SEPARATOR.to_s)].join

Puppet::Reports.register_report(:cmdb) do

desc "Store server info

These files collect quickly -- one every half hour -- so it is a good idea

to perform some maintenance on them if you use this report (it's the only

default report)."

def process

certname = self.name

now = Time.now.gmtime

File.open("/tmp/cmdb.json",'a') do |f|

f.write(certname)

f.write(' | ')

f.write(now)

f.write("\r\n")

end

end

end

2、应用report

/etc/puppet/puppet.conf

[main]

reports = cmdb

#report = true #默认

#pluginsync = true #默认

方式二

使用python调用shell命令,解析命令结果并将数据发送到API

API

REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”

REST从资源的角度类审视整个网络,它将分布在网络中某个节点的资源通过URL进行标识,客户端应用通过URL来获取资源的表征,获得这些表征致使这些应用转变状态

REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”

所有的数据,不过是通过网络获取的还是操作(增删改查)的数据,都是资源,将一切数据视为资源是REST区别与其他架构风格的最本质属性

对于REST这种面向资源的架构风格,有人提出一种全新的结构理念,即:面向资源架构(ROA:Resource Oriented Architecture)

django中可以使用 Django rest framwork 来实现:http://www.django-rest-framework.org/

classBlog(models.Model):

title= models.CharField(max_length=50)

content=models.TextField()

modes.py

from django.contrib.auth.models importUserfrom rest_framework importrouters, serializers, viewsetsfrom app02 importmodelsfrom rest_framework.decorators importdetail_route, list_routefrom rest_framework importresponsefrom django.shortcuts importHttpResponse#Serializers define the API representation.

classUserSerializer(serializers.HyperlinkedModelSerializer):classMeta:

model=User

fields= ('url', 'username', 'email', 'is_staff')#ViewSets define the view behavior.

classUserViewSet(viewsets.ModelViewSet):

queryset=User.objects.all()

serializer_class=UserSerializer#Serializers define the API representation.

classBlogSerializer(serializers.HyperlinkedModelSerializer):classMeta:

model=models.Blog

depth= 1fields= ('url','title', 'content',)#ViewSets define the view behavior.

classBLogViewSet(viewsets.ModelViewSet):

queryset=models.Blog.objects.all()

serializer_class=BlogSerializer

@list_route()defdetail(self,request):printrequest#return HttpResponse('ok')

return response.Response('ok')

api.py

from django.conf.urls importpatterns, include, urlfrom django.contrib importadminfrom rest_framework importroutersfrom app02 importapifrom app02 importviews#Routers provide an easy way of automatically determining the URL conf.

router =routers.DefaultRouter()

router.register(r'users', api.UserViewSet)

router.register(r'blogs', api.BLogViewSet)

urlpatterns= patterns('',

url(r'^', include(router.urls)),

url(r'index/', views.index),#url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))

)

urls.py

from django.shortcuts importrenderfrom rest_framework.decorators importapi_viewfrom rest_framework.response importResponse#Create your views here.

@api_view(['GET', 'PUT', 'DELETE','POST'])defindex(request):printrequest.methodprintrequest.DATAreturn Response([{'asset': '1','request_hostname': 'c1.puppet.com' }])

views

后台管理页面

后台管理页面需要实现对数据表的增删改查。

问题:

1、paramiko执行sudo

/etc/sudoers

Defaults requiretty

Defaults:cmdb !requiretty

python cmdb_Python CMDB开发相关推荐

  1. python全栈开发工程师_【2018重磅巨献】老男孩Python高级全栈开发工程师第三期...

    2018年老男孩python全栈第三期老男孩python全栈3期 老男孩教育Python全栈开发为国内首家专注python全方面开发的教育机构 老男孩Python全栈第三期课程详细目录,高清不加密! ...

  2. 如何用Python做Web开发?——Django环境配置

    用Python做Web开发,Django框架是个非常好的起点.如何从零开始,配置好Django开发环境呢?本文带你一步步无痛上手. 概念 最近有个词儿很流行,叫做"全栈"(full ...

  3. 《Python 3程序开发指南(第2版•修订版)》——1.2 Python的关键要素

    本节书摘来自异步社区<Python 3程序开发指南(第2版•修订版)>一书中的第1章,第1.2节,作者[英]Mark Summerfield,王弘博,孙传庆 译,更多章节内容可以访问云栖社 ...

  4. python图形用户界面设计报告_19.1 Python图形用户界面开发工具包

    ,赠送一本"Python相关图书".咨询方式:加[51CTO-关老师付费群]523714201 验证消息:咨询赠书 本视频采用**Python 3.X版 本书是智捷课堂开发的立体化 ...

  5. pythonweb开发-如何用Python做Web开发?——Django环境配置

    用Python做Web开发,Django框架是个非常好的起点.如何从零开始,配置好Django开发环境呢?本文带你一步步无痛上手. 概念 最近有个词儿很流行,叫做"全栈"(full ...

  6. python利器手机版-将安卓手机打造成你的python全栈开发利器

    超神利器- 相信多数安卓用户都使用过Qpython这款移动端的Python编辑器吧?之前我也研究过一阵子这个工具,但因为一次简单的爬虫让我对它失望之极.Qpython不支持lxml这个模块,然而pyt ...

  7. python简单编程例子-中文方便就用中文编程!Python图形界面开发实例

    原标题:中文方便就用中文编程!Python图形界面开发实例 之前做的一个Python小程序,功能很简单,面对用户群也很窄,是五笔编码编.校人员使用的五笔编码编辑器. 这样的"周末" ...

  8. 不是python中用于开发用户界面的第三方库-模拟试卷C

    原标题:模拟试卷C 一.单项选择题 1. 按照"后进先出"原则组织数据的数据结构是____ 队列 栈 双向链表 二叉树 2. 以下选项的叙述中,正确的是 循环队列有队头和队尾两个指 ...

  9. 不是python中用于开发用户界面的第三方库-python界面 | Tkinter图形界面开发库

    0 写在前面 未经允许,不得转载,谢谢~~ 毕设要在现有的基础上做一个可视化的界面,所以趁机也学习一波如何用python实现图形界面的开发. 本文主要学习并整理了: 简要介绍用于python图形界面开 ...

最新文章

  1. allegro16.3 中的orcad capture CIS 无法打开何解决?
  2. python卷积神经网络cnn的训练算法_【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理...
  3. mysql之多列索引
  4. 解析button和input type=”button”的区别
  5. 中兴服务器isac配置,中兴AC设备对接Portal认证
  6. bouncycastle android,IllegalAccessError with Android and BouncyCastle
  7. 想学习板绘?教你如何在电脑学习绘画!
  8. 【开源项目】电视盒子好用又强大的APP: TVRemoteIME
  9. xcopy 复制目录及子目录
  10. CSDN格式字体颜色入门
  11. win7下ie卸载后文件夹打开总新页面打开
  12. 记住这曾经平静美好的小城-汶川(组图)
  13. 央行数字货币研究报告:法定数字币势在必行,或先应用于票据领域
  14. 创业-2022年五大互联网创业风口
  15. html数组拼接,多个数组合并成一个
  16. 应用回归分析(基于R) R语言的假设检验(一)
  17. 透彻理解机器学习中极大似然估计MLE的原理(附3D可视化代码)
  18. 微信支付时appid 和openId不匹配
  19. Flutter Clip剪裁组件
  20. VR-Platform 簡介

热门文章

  1. [shader]灯光遮罩(水纹,散焦等)
  2. HTML中标题最小的是,HTML标题
  3. 本科论文摘要和绪论有什么区别
  4. windows 2016 域服务器时间同步
  5. nasm纠正性训练指南pdf_力量训练前做这套静态拉伸,可以大大减轻健身后的肌肉酸痛...
  6. 2021-HUASACM第二周周练题解
  7. 交换机组网监控方案:解决企业视频汇聚的几种方式!
  8. php popen使用,php中popen的使用问题
  9. 计算机网络划分子网实验报告,计算机网络ip协议实验报告范文
  10. 一款小而美的女神茶杯,让你寻回生活的仪式感丨钛空舱